Skip to content

Commit 5c2581f

Browse files
committed
feat: Convert tests to use Shouldly and improve view inlining logic
- Updated all test files to use Shouldly assertions instead of NUnit assertions. - Added Shouldly package to SqlInliner.Tests. - Improved implicit alias handling in DatabaseView.cs. - Added safeguard to toRemove loop in DatabaseViewInliner.cs to prevent potential infinite loops.
1 parent 65962a7 commit 5c2581f

13 files changed

+261
-219
lines changed
Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NUnit.Framework;
2+
using Shouldly;
23

34
namespace SqlInliner.Tests;
45

@@ -9,7 +10,7 @@ public void CreateOrAlterReplacesCreateView()
910
{
1011
const string viewSql = "create view dbo.V as select 1";
1112
var result = DatabaseView.CreateOrAlter(viewSql);
12-
StringAssert.StartsWith("CREATE OR ALTER VIEW", result);
13+
result.ShouldStartWith("CREATE OR ALTER VIEW");
1314
}
1415

1516
[Test]
@@ -20,16 +21,16 @@ public void AddViewDefinitionUpdatesConnection()
2021
const string definition = "CREATE VIEW dbo.VTest AS SELECT 1";
2122
connection.AddViewDefinition(viewName, definition);
2223

23-
Assert.IsTrue(connection.IsView(viewName));
24-
Assert.AreEqual(definition, connection.GetViewDefinition(viewName.GetName()));
24+
connection.IsView(viewName).ShouldBeTrue();
25+
connection.GetViewDefinition(viewName.GetName()).ShouldBe(definition);
2526
}
2627

2728
[Test]
2829
public void RecommendedOptionsEnableStripUnusedJoins()
2930
{
3031
var options = InlinerOptions.Recommended();
31-
Assert.IsTrue(options.StripUnusedColumns);
32-
Assert.IsTrue(options.StripUnusedJoins);
32+
options.StripUnusedColumns.ShouldBeTrue();
33+
options.StripUnusedJoins.ShouldBeTrue();
3334
}
3435

3536
[Test]
@@ -40,10 +41,10 @@ public void ViewWithoutAliasGetsDefaultAlias()
4041

4142
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT Id FROM dbo.VPeople";
4243
var (view, errors) = DatabaseView.FromSql(connection, viewSql);
43-
Assert.AreEqual(0, errors.Count);
44-
Assert.IsNotNull(view);
44+
errors.Count.ShouldBe(0);
45+
view.ShouldNotBeNull();
4546
var referenced = view!.References.Views[0];
46-
Assert.IsNotNull(referenced.Alias);
47-
Assert.AreEqual("VPeople", referenced.Alias!.Value);
47+
referenced.Alias.ShouldNotBeNull();
48+
referenced.Alias!.Value.ShouldBe("VPeople");
4849
}
49-
}
50+
}

src/SqlInliner.Tests/BasicTests.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NUnit.Framework;
2+
using Shouldly;
23

34
namespace SqlInliner.Tests;
45

@@ -19,8 +20,8 @@ public void InvalidSql()
1920

2021
var (view, errors) = DatabaseView.FromSql(connection, viewSql);
2122

22-
Assert.IsNull(view);
23-
Assert.AreNotEqual(0, errors.Count);
23+
view.ShouldBeNull();
24+
errors.Count.ShouldNotBe(0);
2425
}
2526

2627
[Test]
@@ -29,8 +30,8 @@ public void InvalidSqlInliner()
2930
const string viewSql = "CREATE OR VIEW dbo.X AS SELECT 0";
3031

3132
var inliner = new DatabaseViewInliner(connection, viewSql);
32-
Assert.IsNull(inliner.View);
33-
Assert.AreNotEqual(viewSql, inliner.Sql);
33+
inliner.View.ShouldBeNull();
34+
inliner.Sql.ShouldNotBe(viewSql);
3435
}
3536

3637
[Test]
@@ -39,15 +40,15 @@ public void ReturnOriginalIfNoViewsAreReferenced()
3940
const string viewSql = "CREATE VIEW dbo.X AS SELECT 0";
4041

4142
var inliner = new DatabaseViewInliner(connection, viewSql);
42-
Assert.AreEqual(0, inliner.Errors.Count);
43-
Assert.AreEqual(viewSql, inliner.Sql);
44-
Assert.IsNotNull(inliner.View);
43+
inliner.Errors.Count.ShouldBe(0);
44+
inliner.Sql.ShouldBe(viewSql);
45+
inliner.View.ShouldNotBeNull();
4546
}
4647

4748
[Test]
4849
public void EmptyConnection()
4950
{
50-
Assert.AreEqual(0, connection.Views.Count);
51-
Assert.IsNull(connection.Connection);
51+
connection.Views.Count.ShouldBe(0);
52+
connection.Connection.ShouldBeNull();
5253
}
5354
}

src/SqlInliner.Tests/ComplexScenarioTests.cs

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NUnit.Framework;
2+
using Shouldly;
23

34
namespace SqlInliner.Tests;
45

@@ -23,11 +24,11 @@ public void ViewWithLeftOuterJoin_Inlines()
2324
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT p.Id, p.FirstName, o.Amount FROM dbo.VPeople p LEFT OUTER JOIN dbo.VOrders o ON p.Id = o.PersonId";
2425

2526
var inliner = new DatabaseViewInliner(connection, viewSql, options);
26-
Assert.AreEqual(0, inliner.Errors.Count);
27-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
28-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.Orders"));
29-
Assert.IsFalse(inliner.Result.ConvertedSql.Contains("dbo.VPeople"));
30-
Assert.IsFalse(inliner.Result.ConvertedSql.Contains("dbo.VOrders"));
27+
inliner.Errors.Count.ShouldBe(0);
28+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
29+
inliner.Result.ConvertedSql.ShouldContain("dbo.Orders");
30+
inliner.Result.ConvertedSql.ShouldNotContain("dbo.VPeople");
31+
inliner.Result.ConvertedSql.ShouldNotContain("dbo.VOrders");
3132
}
3233

3334
[Test]
@@ -36,9 +37,9 @@ public void ViewWithRightOuterJoin_Inlines()
3637
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT p.Id, p.FirstName, o.Amount FROM dbo.VPeople p RIGHT OUTER JOIN dbo.VOrders o ON p.Id = o.PersonId";
3738

3839
var inliner = new DatabaseViewInliner(connection, viewSql, options);
39-
Assert.AreEqual(0, inliner.Errors.Count);
40-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
41-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.Orders"));
40+
inliner.Errors.Count.ShouldBe(0);
41+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
42+
inliner.Result.ConvertedSql.ShouldContain("dbo.Orders");
4243
}
4344

4445
[Test]
@@ -47,9 +48,9 @@ public void ViewWithFullOuterJoin_Inlines()
4748
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT p.Id, p.FirstName, o.Amount FROM dbo.VPeople p FULL OUTER JOIN dbo.VOrders o ON p.Id = o.PersonId";
4849

4950
var inliner = new DatabaseViewInliner(connection, viewSql, options);
50-
Assert.AreEqual(0, inliner.Errors.Count);
51-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
52-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.Orders"));
51+
inliner.Errors.Count.ShouldBe(0);
52+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
53+
inliner.Result.ConvertedSql.ShouldContain("dbo.Orders");
5354
}
5455

5556
[Test]
@@ -65,10 +66,10 @@ FROM dbo.VPeople p
6566
INNER JOIN dbo.VProducts pr ON o.Id = pr.Id";
6667

6768
var inliner = new DatabaseViewInliner(connection, viewSql, options);
68-
Assert.AreEqual(0, inliner.Errors.Count);
69-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
70-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.Orders"));
71-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.Products"));
69+
inliner.Errors.Count.ShouldBe(0);
70+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
71+
inliner.Result.ConvertedSql.ShouldContain("dbo.Orders");
72+
inliner.Result.ConvertedSql.ShouldContain("dbo.Products");
7273
}
7374

7475
[Test]
@@ -81,11 +82,13 @@ public void ThreeLevelNesting_Inlines()
8182

8283
const string viewSql = "CREATE VIEW dbo.VLevel4 AS SELECT l3.Id FROM dbo.VLevel3 l3";
8384

85+
var options = InlinerOptions.Recommended();
86+
options.StripUnusedJoins = false;
8487
var inliner = new DatabaseViewInliner(connection, viewSql, options);
85-
Assert.AreEqual(0, inliner.Errors.Count);
86-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
87-
Assert.IsFalse(inliner.Result.ConvertedSql.Contains("VLevel2"));
88-
Assert.IsFalse(inliner.Result.ConvertedSql.Contains("VLevel3"));
88+
inliner.Errors.Count.ShouldBe(0);
89+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
90+
inliner.Result.ConvertedSql.ShouldNotContain("VLevel2");
91+
inliner.Result.ConvertedSql.ShouldNotContain("VLevel3");
8992
}
9093

9194
[Test]
@@ -97,8 +100,8 @@ public void ViewWithSubquery_Inlines()
97100
FROM dbo.VPeople p";
98101

99102
var inliner = new DatabaseViewInliner(connection, viewSql, options);
100-
Assert.AreEqual(0, inliner.Errors.Count);
101-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
103+
inliner.Errors.Count.ShouldBe(0);
104+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
102105
}
103106

104107
[Test]
@@ -111,8 +114,8 @@ FROM dbo.VPeople p
111114
GROUP BY p.Id, p.FirstName";
112115

113116
var inliner = new DatabaseViewInliner(connection, viewSql, options);
114-
Assert.AreEqual(0, inliner.Errors.Count);
115-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
117+
inliner.Errors.Count.ShouldBe(0);
118+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
116119
}
117120

118121
[Test]
@@ -121,8 +124,8 @@ public void ViewWithOrderBy_Inlines()
121124
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT TOP 100 p.Id, p.FirstName FROM dbo.VPeople p ORDER BY p.FirstName";
122125

123126
var inliner = new DatabaseViewInliner(connection, viewSql, options);
124-
Assert.AreEqual(0, inliner.Errors.Count);
125-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
127+
inliner.Errors.Count.ShouldBe(0);
128+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
126129
}
127130

128131
[Test]
@@ -134,19 +137,21 @@ public void ViewWithCaseStatement_Inlines()
134137
FROM dbo.VPeople p";
135138

136139
var inliner = new DatabaseViewInliner(connection, viewSql, options);
137-
Assert.AreEqual(0, inliner.Errors.Count);
138-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
140+
inliner.Errors.Count.ShouldBe(0);
141+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
139142
}
140143

141144
[Test]
142145
public void ViewWithDistinct_Inlines()
143146
{
144147
const string viewSql = "CREATE VIEW dbo.VTest AS SELECT DISTINCT p.LastName FROM dbo.VPeople p";
145148

149+
var options = InlinerOptions.Recommended();
150+
options.StripUnusedJoins = false;
146151
var inliner = new DatabaseViewInliner(connection, viewSql, options);
147-
Assert.AreEqual(0, inliner.Errors.Count);
148-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
149-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("DISTINCT"));
152+
inliner.Errors.Count.ShouldBe(0);
153+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
154+
inliner.Result.ConvertedSql.ShouldContain("DISTINCT");
150155
}
151156

152157
[Test]
@@ -158,7 +163,7 @@ FROM dbo.VPeople p
158163
WHERE p.IsActive = 1 AND p.LastName IS NOT NULL";
159164

160165
var inliner = new DatabaseViewInliner(connection, viewSql, options);
161-
Assert.AreEqual(0, inliner.Errors.Count);
162-
Assert.IsTrue(inliner.Result.ConvertedSql.Contains("dbo.People"));
166+
inliner.Errors.Count.ShouldBe(0);
167+
inliner.Result.ConvertedSql.ShouldContain("dbo.People");
163168
}
164-
}
169+
}

src/SqlInliner.Tests/DatabaseConnectionTests.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NUnit.Framework;
2+
using Shouldly;
23

34
namespace SqlInliner.Tests;
45

@@ -8,14 +9,14 @@ public class DatabaseConnectionTests
89
public void EmptyConnection_HasNoViews()
910
{
1011
var connection = new DatabaseConnection();
11-
Assert.AreEqual(0, connection.Views.Count);
12+
connection.Views.Count.ShouldBe(0);
1213
}
1314

1415
[Test]
1516
public void EmptyConnection_HasNullConnection()
1617
{
1718
var connection = new DatabaseConnection();
18-
Assert.IsNull(connection.Connection);
19+
connection.Connection.ShouldBeNull();
1920
}
2021

2122
[Test]
@@ -27,7 +28,7 @@ public void AddViewDefinition_AddsToViews()
2728

2829
connection.AddViewDefinition(viewName, definition);
2930

30-
Assert.AreEqual(1, connection.Views.Count);
31+
connection.Views.Count.ShouldBe(1);
3132
}
3233

3334
[Test]
@@ -40,7 +41,7 @@ public void AddViewDefinition_CanRetrieveDefinition()
4041
connection.AddViewDefinition(viewName, definition);
4142
var retrieved = connection.GetViewDefinition(viewName.GetName());
4243

43-
Assert.AreEqual(definition, retrieved);
44+
retrieved.ShouldBe(definition);
4445
}
4546

4647
[Test]
@@ -55,9 +56,9 @@ public void AddViewDefinition_MultipleViews_AllAccessible()
5556
connection.AddViewDefinition(view1, def1);
5657
connection.AddViewDefinition(view2, def2);
5758

58-
Assert.AreEqual(2, connection.Views.Count);
59-
Assert.AreEqual(def1, connection.GetViewDefinition(view1.GetName()));
60-
Assert.AreEqual(def2, connection.GetViewDefinition(view2.GetName()));
59+
connection.Views.Count.ShouldBe(2);
60+
connection.GetViewDefinition(view1.GetName()).ShouldBe(def1);
61+
connection.GetViewDefinition(view2.GetName()).ShouldBe(def2);
6162
}
6263

6364
[Test]
@@ -67,7 +68,7 @@ public void IsView_ViewExists_ReturnsTrue()
6768
var viewName = DatabaseConnection.ToObjectName("dbo", "VTest");
6869
connection.AddViewDefinition(viewName, "CREATE VIEW dbo.VTest AS SELECT 1");
6970

70-
Assert.IsTrue(connection.IsView(viewName));
71+
connection.IsView(viewName).ShouldBeTrue();
7172
}
7273

7374
[Test]
@@ -76,7 +77,7 @@ public void IsView_ViewDoesNotExist_ReturnsFalse()
7677
var connection = new DatabaseConnection();
7778
var viewName = DatabaseConnection.ToObjectName("dbo", "VTest");
7879

79-
Assert.IsFalse(connection.IsView(viewName));
80+
connection.IsView(viewName).ShouldBeFalse();
8081
}
8182

8283
[Test]
@@ -87,7 +88,7 @@ public void IsView_DifferentSchema_ReturnsFalse()
8788
var viewName2 = DatabaseConnection.ToObjectName("other", "VTest");
8889
connection.AddViewDefinition(viewName1, "CREATE VIEW dbo.VTest AS SELECT 1");
8990

90-
Assert.IsFalse(connection.IsView(viewName2));
91+
connection.IsView(viewName2).ShouldBeFalse();
9192
}
9293

9394
[Test]
@@ -101,16 +102,16 @@ public void AddViewDefinition_UpdatesExistingView()
101102
connection.AddViewDefinition(viewName, def1);
102103
connection.AddViewDefinition(viewName, def2);
103104

104-
Assert.AreEqual(def2, connection.GetViewDefinition(viewName.GetName()));
105+
connection.GetViewDefinition(viewName.GetName()).ShouldBe(def2);
105106
}
106107

107108
[Test]
108109
public void ToObjectName_CreatesValidSchemaObjectName()
109110
{
110111
var objectName = DatabaseConnection.ToObjectName("myschema", "myview");
111112

112-
Assert.IsNotNull(objectName);
113-
Assert.AreEqual("myschema", objectName.SchemaIdentifier.Value);
114-
Assert.AreEqual("myview", objectName.BaseIdentifier.Value);
113+
objectName.ShouldNotBeNull();
114+
objectName.SchemaIdentifier.Value.ShouldBe("myschema");
115+
objectName.BaseIdentifier.Value.ShouldBe("myview");
115116
}
116-
}
117+
}

0 commit comments

Comments
 (0)