chore(sonar): wrap independent assertions in Assert.Multiple (NUnit2045)

Driven by `dotnet format analyzers --diagnostics NUnit2045`. The fixer
groups consecutive independent `Assert.That(...)` calls into
`Assert.Multiple(() => { ... })`, so a failing assertion no longer
short-circuits the block — every failure inside the group is reported,
which gives much better diagnostics on multi-property tests.

Audit confirmed no Assert.Throws / Assert.Fail / Assert.Catch / Assert.Pass
/ Assert.DoesNotThrow got pulled inside a Multiple block (those need to
short-circuit). All 1180 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Thom Lamb
2026-05-27 11:59:47 -05:00
co-authored by Claude Opus 4.7
parent 505ada5017
commit 67512d23e1
47 changed files with 2132 additions and 1113 deletions
@@ -23,9 +23,12 @@ public class LinqQueryBreakdownBuilderTests
// Assert
Assert.That(breakdown, Is.Not.Null);
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(breakdown.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("Age > 18"));
Assert.Multiple(() =>
{
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(breakdown.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("Age > 18"));
});
}
[Test]
@@ -375,13 +378,16 @@ public class LinqQueryBreakdownBuilderTests
.OrderByDescending("AvgSalary")
.Build();
// Assert
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Department"));
Assert.That(breakdown.FromClause.Clause, Is.EqualTo("Employees"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("IsActive = true"));
Assert.That(breakdown.GroupByClause.Clause, Is.EqualTo("Department, Position"));
Assert.That(breakdown.HavingClause.Clause, Is.EqualTo("COUNT(*) >= 3"));
Assert.That(breakdown.OrderByClause.Clause, Is.EqualTo("AvgSalary DESC"));
Assert.Multiple(() =>
{
// Assert
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Department"));
Assert.That(breakdown.FromClause.Clause, Is.EqualTo("Employees"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("IsActive = true"));
Assert.That(breakdown.GroupByClause.Clause, Is.EqualTo("Department, Position"));
Assert.That(breakdown.HavingClause.Clause, Is.EqualTo("COUNT(*) >= 3"));
Assert.That(breakdown.OrderByClause.Clause, Is.EqualTo("AvgSalary DESC"));
});
}
[Test]
@@ -396,10 +402,13 @@ public class LinqQueryBreakdownBuilderTests
.OrderByAscending("Id")
.Build();
// Assert
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("IsActive = true"));
Assert.That(breakdown.OrderByClause.Clause, Is.EqualTo("Id ASC"));
Assert.Multiple(() =>
{
// Assert
Assert.That(breakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(breakdown.WhereClause.Clause, Is.EqualTo("IsActive = true"));
Assert.That(breakdown.OrderByClause.Clause, Is.EqualTo("Id ASC"));
});
}
#endregion
@@ -503,9 +512,12 @@ public class LinqQueryBreakdownBuilderTests
.FromTable("Orders");
var breakdown2 = builder2.Build();
// Assert
Assert.That(breakdown1.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(breakdown2.FromClause.Clause, Is.EqualTo("Orders"));
Assert.Multiple(() =>
{
// Assert
Assert.That(breakdown1.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(breakdown2.FromClause.Clause, Is.EqualTo("Orders"));
});
}
#endregion
@@ -27,8 +27,11 @@ public class LinqQueryBreakdownTests
// Assert
Assert.That(breakdown, Is.Not.Null);
Assert.That(breakdown.EntityType, Is.EqualTo(typeof(User)));
Assert.That(breakdown.FromClause?.Clause, Does.Contain("User"));
Assert.Multiple(() =>
{
Assert.That(breakdown.EntityType, Is.EqualTo(typeof(User)));
Assert.That(breakdown.FromClause?.Clause, Does.Contain("User"));
});
}
[Test]
@@ -92,10 +95,13 @@ public class LinqQueryBreakdownTests
// Act
var breakdown = LinqQueryBreakdown.Analyze(query);
// Assert
Assert.That(breakdown.WhereClause?.Clause, Is.Not.Null);
Assert.That(breakdown.OrderByClause?.Clause, Is.Not.Null);
Assert.That(breakdown.SelectClause?.Clause, Is.Not.Null);
Assert.Multiple(() =>
{
// Assert
Assert.That(breakdown.WhereClause?.Clause, Is.Not.Null);
Assert.That(breakdown.OrderByClause?.Clause, Is.Not.Null);
Assert.That(breakdown.SelectClause?.Clause, Is.Not.Null);
});
}
[Test]
@@ -159,10 +165,13 @@ public class LinqQueryBreakdownTests
// Act
var success = LinqQueryBreakdown.TryAnalyze(query, out var breakdown, out var error);
// Assert
Assert.That(success, Is.True);
Assert.That(breakdown, Is.Not.Null);
Assert.That(error, Is.Empty);
Assert.Multiple(() =>
{
// Assert
Assert.That(success, Is.True);
Assert.That(breakdown, Is.Not.Null);
Assert.That(error, Is.Empty);
});
}
[Test]
@@ -174,9 +183,12 @@ public class LinqQueryBreakdownTests
// Act
var success = LinqQueryBreakdown.TryAnalyze(query!, out var breakdown, out var error);
// Assert
Assert.That(success, Is.False);
Assert.That(error, Is.Not.Empty);
Assert.Multiple(() =>
{
// Assert
Assert.That(success, Is.False);
Assert.That(error, Is.Not.Empty);
});
}
[Test]
@@ -194,10 +206,16 @@ public class LinqQueryBreakdownTests
// Assert
Assert.That(breakdown.SelectClause?.Clause, Does.Contain("Id"));
Assert.That(breakdown.SelectClause?.Clause, Does.Contain("Name"));
Assert.That(breakdown.SelectClause?.Clause, Does.Contain("Email"));
Assert.That(breakdown.WhereClause?.Clause, Does.Contain("Age"));
Assert.That(breakdown.WhereClause?.Clause, Does.Contain("IsActive"));
Assert.That(breakdown.OrderByClause?.Clause, Does.Contain("Name"));
Assert.Multiple(() =>
{
Assert.That(breakdown.SelectClause?.Clause, Does.Contain("Email"));
Assert.That(breakdown.WhereClause?.Clause, Does.Contain("Age"));
});
Assert.Multiple(() =>
{
Assert.That(breakdown.WhereClause?.Clause, Does.Contain("IsActive"));
Assert.That(breakdown.OrderByClause?.Clause, Does.Contain("Name"));
});
}
#region Round-Trip and Query Modification Tests
@@ -278,9 +296,12 @@ public class LinqQueryBreakdownTests
var activeSql = activeBreakdown.GetSql();
var recentSql = recentBreakdown.GetSql();
// Assert - Both queries are valid and different
Assert.That(activeSql, Does.Contain("IsActive"));
Assert.That(recentSql, Does.Contain("Age"));
Assert.Multiple(() =>
{
// Assert - Both queries are valid and different
Assert.That(activeSql, Does.Contain("IsActive"));
Assert.That(recentSql, Does.Contain("Age"));
});
Assert.That(activeSql, Is.Not.EqualTo(recentSql));
}
@@ -328,8 +349,11 @@ public class LinqQueryBreakdownTests
// Assert
Assert.That(paginatedSql, Does.Contain("ORDER BY"));
Assert.That(paginatedSql, Does.Contain("Id ASC"));
Assert.That(breakdown.SetupClauses, Has.Count.EqualTo(1));
Assert.Multiple(() =>
{
Assert.That(paginatedSql, Does.Contain("Id ASC"));
Assert.That(breakdown.SetupClauses, Has.Count.EqualTo(1));
});
}
[Test]
@@ -351,12 +375,15 @@ public class LinqQueryBreakdownTests
var hasOrdering = !string.IsNullOrEmpty(breakdown.OrderByClause?.Clause);
var summary = breakdown.GetQuerySummary();
// Assert - Verify analytics
Assert.That(methodCount, Is.GreaterThan(0));
Assert.That(hasProjection, Is.True);
Assert.That(hasFilters, Is.True);
Assert.That(hasOrdering, Is.True);
Assert.That(summary, Does.Contain("SELECT"));
Assert.Multiple(() =>
{
// Assert - Verify analytics
Assert.That(methodCount, Is.GreaterThan(0));
Assert.That(hasProjection, Is.True);
Assert.That(hasFilters, Is.True);
Assert.That(hasOrdering, Is.True);
Assert.That(summary, Does.Contain("SELECT"));
});
Assert.That(summary, Does.Contain("WHERE"));
Assert.That(summary, Does.Contain("ORDER BY"));
}
@@ -523,9 +550,12 @@ public class GetQueryTests
var linqResult = linqBreakdown.GetQuery<User>();
var sqlResult = sqlBreakdown.GetQuery<User>();
// Assert
Assert.That(linqResult, Is.Null);
Assert.That(sqlResult, Is.Null);
Assert.Multiple(() =>
{
// Assert
Assert.That(linqResult, Is.Null);
Assert.That(sqlResult, Is.Null);
});
}
#endregion
@@ -543,9 +573,12 @@ public class GetQueryTests
// Assert
Assert.That(breakdown, Is.Not.Null);
Assert.That(breakdown.TableName.Clause, Is.EqualTo("User"));
Assert.That(breakdown.InsertIntoClause.Clause, Is.Not.Empty);
Assert.That(breakdown.ValuesClause.Clause, Is.Not.Empty);
Assert.Multiple(() =>
{
Assert.That(breakdown.TableName.Clause, Is.EqualTo("User"));
Assert.That(breakdown.InsertIntoClause.Clause, Is.Not.Empty);
Assert.That(breakdown.ValuesClause.Clause, Is.Not.Empty);
});
Assert.That(breakdown.InsertIntoClause.Clause, Does.Contain("Id"));
Assert.That(breakdown.InsertIntoClause.Clause, Does.Contain("Name"));
}
@@ -565,9 +598,12 @@ public class GetQueryTests
// Assert
Assert.That(breakdown, Is.Not.Null);
Assert.That(breakdown.TableName.Clause, Is.EqualTo("User"));
Assert.That(breakdown.InsertIntoClause.Clause, Is.Not.Empty);
Assert.That(breakdown.ValuesClause.Clause, Does.Contain("("));
Assert.Multiple(() =>
{
Assert.That(breakdown.TableName.Clause, Is.EqualTo("User"));
Assert.That(breakdown.InsertIntoClause.Clause, Is.Not.Empty);
Assert.That(breakdown.ValuesClause.Clause, Does.Contain("("));
});
}
[Test]
@@ -690,8 +726,11 @@ public class GetQueryTests
// Assert
Assert.That(breakdown, Is.Not.Null);
Assert.That(breakdown.ProcedureName.Clause, Is.EqualTo(procName));
Assert.That(breakdown.Parameters, Is.Not.Empty);
Assert.Multiple(() =>
{
Assert.That(breakdown.ProcedureName.Clause, Is.EqualTo(procName));
Assert.That(breakdown.Parameters, Is.Not.Empty);
});
Assert.That(breakdown.Parameters, Has.Count.EqualTo(2));
}
@@ -763,10 +802,13 @@ public class GetQueryTests
// Assert
Assert.That(sqlServerBreakdown, Is.Not.Null);
Assert.That(sqlServerBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(sqlServerBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(sqlServerBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(sqlServerBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
Assert.Multiple(() =>
{
Assert.That(sqlServerBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(sqlServerBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(sqlServerBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(sqlServerBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
});
}
[Test]
@@ -784,10 +826,13 @@ public class GetQueryTests
// Assert
Assert.That(postgresBreakdown, Is.Not.Null);
Assert.That(postgresBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(postgresBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(postgresBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(postgresBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
Assert.Multiple(() =>
{
Assert.That(postgresBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(postgresBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(postgresBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(postgresBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
});
}
[Test]
@@ -802,10 +847,13 @@ public class GetQueryTests
// Assert
Assert.That(snowflakeBreakdown, Is.Not.Null);
Assert.That(snowflakeBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(snowflakeBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(snowflakeBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(snowflakeBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
Assert.Multiple(() =>
{
Assert.That(snowflakeBreakdown.SelectClause?.Clause, Is.EqualTo(breakdown.SelectClause?.Clause));
Assert.That(snowflakeBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(snowflakeBreakdown.WhereClause?.Clause, Is.EqualTo(breakdown.WhereClause?.Clause));
Assert.That(snowflakeBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
});
}
[Test]
@@ -819,9 +867,12 @@ public class GetQueryTests
// Act
var sqlServerBreakdown = breakdown.ConvertToSqlServerBreakdown();
// Assert
Assert.That(sqlServerBreakdown.SelectClause?.Comment, Is.EqualTo("Select user columns"));
Assert.That(sqlServerBreakdown.WhereClause?.Comment, Is.EqualTo("Filter adult users"));
Assert.Multiple(() =>
{
// Assert
Assert.That(sqlServerBreakdown.SelectClause?.Comment, Is.EqualTo("Select user columns"));
Assert.That(sqlServerBreakdown.WhereClause?.Comment, Is.EqualTo("Filter adult users"));
});
}
[Test]
@@ -837,12 +888,15 @@ public class GetQueryTests
// Act
var postgresBreakdown = breakdown.ConvertToPostgreSqlBreakdown();
// Assert
Assert.That(postgresBreakdown.SelectClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.FromClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.WhereClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.GroupByClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.OrderByClause?.Clause, Is.Not.Null);
Assert.Multiple(() =>
{
// Assert
Assert.That(postgresBreakdown.SelectClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.FromClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.WhereClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.GroupByClause?.Clause, Is.Not.Null);
Assert.That(postgresBreakdown.OrderByClause?.Clause, Is.Not.Null);
});
}
[Test]
@@ -854,9 +908,12 @@ public class GetQueryTests
// Act
var snowflakeBreakdown = breakdown.ConvertToSnowflakeBreakdown();
// Assert
Assert.That(snowflakeBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(snowflakeBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
Assert.Multiple(() =>
{
// Assert
Assert.That(snowflakeBreakdown.FromClause?.Clause, Is.EqualTo(breakdown.FromClause?.Clause));
Assert.That(snowflakeBreakdown.OrderByClause?.Clause, Is.EqualTo(breakdown.OrderByClause?.Clause));
});
}
[Test]
@@ -21,8 +21,11 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
Assert.That(mainQuery.WithClauses, Has.Count.EqualTo(1));
Assert.That(mainQuery.WithClauses[0].TableName, Is.EqualTo("active_users"));
Assert.That(mainQuery.WithClauses[0].Query, Is.EqualTo(cte));
Assert.Multiple(() =>
{
Assert.That(mainQuery.WithClauses[0].TableName, Is.EqualTo("active_users"));
Assert.That(mainQuery.WithClauses[0].Query, Is.EqualTo(cte));
});
}
[Test]
@@ -81,8 +84,11 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
var keys = merged.Keys.ToList();
Assert.That(keys.Any(k => k.Contains("Status")), "Should include CTE parameters");
Assert.That(keys.Any(k => k.Contains("Limit")), "Should include main query parameters");
Assert.Multiple(() =>
{
Assert.That(keys.Any(k => k.Contains("Status")), "Should include CTE parameters");
Assert.That(keys.Any(k => k.Contains("Limit")), "Should include main query parameters");
});
}
[Test]
@@ -101,8 +107,11 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
var valueKey = merged.Keys.FirstOrDefault(k => k.Contains("Value"));
Assert.That(valueKey, Is.Not.Null, "Should have a Value parameter");
Assert.That(merged[valueKey], Is.EqualTo("main_value"), "Main query parameter should take precedence");
Assert.Multiple(() =>
{
Assert.That(valueKey, Is.Not.Null, "Should have a Value parameter");
Assert.That(merged[valueKey], Is.EqualTo("main_value"), "Main query parameter should take precedence");
});
}
#endregion
@@ -152,8 +161,11 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
Assert.That(query.WithClauses, Has.Count.EqualTo(2));
var keys = merged.Keys.ToList();
Assert.That(keys.Any(k => k.Contains("MinDate")));
Assert.That(keys.Any(k => k.Contains("Status")));
Assert.Multiple(() =>
{
Assert.That(keys.Any(k => k.Contains("MinDate")));
Assert.That(keys.Any(k => k.Contains("Status")));
});
}
#endregion
@@ -213,9 +225,12 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
var keys = merged.Keys.ToList();
Assert.That(keys.Any(k => k.Contains("AnchorLevel")), "Should include anchor parameters");
Assert.That(keys.Any(k => k.Contains("MaxLevel")), "Should include recursive parameters");
Assert.That(keys.Any(k => k.Contains("QueryLimit")), "Should include main query parameters");
Assert.Multiple(() =>
{
Assert.That(keys.Any(k => k.Contains("AnchorLevel")), "Should include anchor parameters");
Assert.That(keys.Any(k => k.Contains("MaxLevel")), "Should include recursive parameters");
Assert.That(keys.Any(k => k.Contains("QueryLimit")), "Should include main query parameters");
});
}
#endregion
@@ -279,10 +294,13 @@ public class LinqQueryBreakdownWithClauseTests
// Assert
var keys = merged.Keys.ToList();
Assert.That(keys.Any(k => k.Contains("InnerParam")));
Assert.That(keys.Any(k => k.Contains("OuterParam")));
Assert.That(keys.Any(k => k.Contains("MainParam")));
Assert.That(sql, Contains.Substring("WITH"));
Assert.Multiple(() =>
{
Assert.That(keys.Any(k => k.Contains("InnerParam")));
Assert.That(keys.Any(k => k.Contains("OuterParam")));
Assert.That(keys.Any(k => k.Contains("MainParam")));
Assert.That(sql, Contains.Substring("WITH"));
});
}
#endregion
@@ -19,10 +19,13 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(0));
Assert.That(stats.UniqueQueries, Is.EqualTo(0));
Assert.That(stats.DuplicateQueries, Is.Empty);
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(0));
Assert.That(stats.UniqueQueries, Is.EqualTo(0));
Assert.That(stats.DuplicateQueries, Is.Empty);
});
}
[Test]
@@ -43,10 +46,13 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(1));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
Assert.That(stats.DuplicateQueries, Is.Empty);
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(1));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
Assert.That(stats.DuplicateQueries, Is.Empty);
});
}
[Test]
@@ -77,10 +83,13 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(3));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
Assert.That(stats.DuplicateQueries, Has.Count.EqualTo(2));
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(3));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
Assert.That(stats.DuplicateQueries, Has.Count.EqualTo(2));
});
}
#endregion
@@ -207,9 +216,12 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.TableUsageFrequency["Users"], Is.EqualTo(3));
Assert.That(stats.TableUsageFrequency["Orders"], Is.EqualTo(1));
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.TableUsageFrequency["Users"], Is.EqualTo(3));
Assert.That(stats.TableUsageFrequency["Orders"], Is.EqualTo(1));
});
}
[Test]
@@ -246,11 +258,14 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.ColumnSelectionFrequency.ContainsKey("Id"), Is.True);
Assert.That(stats.ColumnSelectionFrequency["Id"], Is.EqualTo(3));
Assert.That(stats.ColumnSelectionFrequency["Name"], Is.EqualTo(2));
Assert.That(stats.ColumnSelectionFrequency["Email"], Is.EqualTo(1));
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.ColumnSelectionFrequency.ContainsKey("Id"), Is.True);
Assert.That(stats.ColumnSelectionFrequency["Id"], Is.EqualTo(3));
Assert.That(stats.ColumnSelectionFrequency["Name"], Is.EqualTo(2));
Assert.That(stats.ColumnSelectionFrequency["Email"], Is.EqualTo(1));
});
}
[Test]
@@ -267,9 +282,12 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.ColumnSelectionFrequency.ContainsKey("*"), Is.False);
Assert.That(stats.ColumnSelectionFrequency["Id"], Is.EqualTo(1));
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.ColumnSelectionFrequency.ContainsKey("*"), Is.False);
Assert.That(stats.ColumnSelectionFrequency["Id"], Is.EqualTo(1));
});
}
#endregion
@@ -488,9 +506,12 @@ public class QueryCollectionAnalyzerTests
// Act
var stats = analyzer.Analyze();
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(100));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
Assert.Multiple(() =>
{
// Assert
Assert.That(stats.TotalQueries, Is.EqualTo(100));
Assert.That(stats.UniqueQueries, Is.EqualTo(1));
});
}
#endregion
@@ -62,9 +62,12 @@ public class QueryValidatorTests
validator.Validate(breakdown2);
var count2 = validator.Issues.Count;
// Assert
Assert.That(count1, Is.GreaterThan(0));
Assert.That(count2, Is.GreaterThan(0));
Assert.Multiple(() =>
{
// Assert
Assert.That(count1, Is.GreaterThan(0));
Assert.That(count2, Is.GreaterThan(0));
});
}
#endregion
@@ -324,10 +327,13 @@ public class QueryValidatorTests
var infos = validator.GetIssuesBySeverity(ValidationSeverity.Info);
var errors = validator.GetIssuesBySeverity(ValidationSeverity.Error);
// Assert
Assert.That(warnings, Is.Not.Empty);
Assert.That(infos, Is.Not.Empty);
Assert.That(errors, Is.Empty);
Assert.Multiple(() =>
{
// Assert
Assert.That(warnings, Is.Not.Empty);
Assert.That(infos, Is.Not.Empty);
Assert.That(errors, Is.Empty);
});
}
#endregion
@@ -349,8 +355,11 @@ public class QueryValidatorTests
// Assert
Assert.That(validator.Issues, Has.Count.EqualTo(1));
Assert.That(validator.Issues[0].Code, Is.EqualTo("CUSTOM_001"));
Assert.That(validator.HasErrors, Is.True);
Assert.Multiple(() =>
{
Assert.That(validator.Issues[0].Code, Is.EqualTo("CUSTOM_001"));
Assert.That(validator.HasErrors, Is.True);
});
}
[Test]
@@ -365,9 +374,12 @@ public class QueryValidatorTests
.AddIssue(ValidationSeverity.Warning, "WARN_001", "Warning 1")
.AddIssue(ValidationSeverity.Info, "INFO_001", "Info 1");
// Assert
Assert.That(result, Is.SameAs(validator));
Assert.That(validator.Issues, Has.Count.EqualTo(3));
Assert.Multiple(() =>
{
// Assert
Assert.That(result, Is.SameAs(validator));
Assert.That(validator.Issues, Has.Count.EqualTo(3));
});
}
#endregion
@@ -480,9 +492,12 @@ public class QueryValidatorTests
// Act
var validator = QueryValidator.ValidateQuery(breakdown);
// Assert
Assert.That(validator.Issues.Count, Is.GreaterThan(1));
Assert.That(validator.HasWarnings, Is.True);
Assert.Multiple(() =>
{
// Assert
Assert.That(validator.Issues.Count, Is.GreaterThan(1));
Assert.That(validator.HasWarnings, Is.True);
});
}
[Test]
@@ -27,10 +27,13 @@ public class ReverseConverterTests
// Assert
Assert.That(linqBreakdown, Is.Not.Null);
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("IsActive = 1"));
Assert.That(linqBreakdown.OrderByClause.Clause, Is.EqualTo("Name ASC"));
Assert.Multiple(() =>
{
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("IsActive = 1"));
Assert.That(linqBreakdown.OrderByClause.Clause, Is.EqualTo("Name ASC"));
});
}
[Test]
@@ -46,9 +49,12 @@ public class ReverseConverterTests
// Act
var linqBreakdown = sqlServerBreakdown.ToLinqQueryBreakdown();
// Assert
Assert.That(linqBreakdown.GroupByClause.Clause, Is.EqualTo("Department"));
Assert.That(linqBreakdown.HavingClause.Clause, Is.EqualTo("COUNT(*) > 5"));
Assert.Multiple(() =>
{
// Assert
Assert.That(linqBreakdown.GroupByClause.Clause, Is.EqualTo("Department"));
Assert.That(linqBreakdown.HavingClause.Clause, Is.EqualTo("COUNT(*) > 5"));
});
}
[Test]
@@ -81,9 +87,12 @@ public class ReverseConverterTests
// Assert
Assert.That(linqBreakdown, Is.Not.Null);
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("user_id"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("users"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("is_active = true"));
Assert.Multiple(() =>
{
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("user_id"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("users"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("is_active = true"));
});
}
[Test]
@@ -116,9 +125,12 @@ public class ReverseConverterTests
// Assert
Assert.That(linqBreakdown, Is.Not.Null);
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("USER_ID"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("USERS"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("IS_ACTIVE = TRUE"));
Assert.Multiple(() =>
{
Assert.That(linqBreakdown.SelectClause.Clause, Contains.Substring("USER_ID"));
Assert.That(linqBreakdown.FromClause.Clause, Is.EqualTo("USERS"));
Assert.That(linqBreakdown.WhereClause.Clause, Is.EqualTo("IS_ACTIVE = TRUE"));
});
}
[Test]
@@ -252,10 +264,13 @@ public class ReverseConverterTests
var result2 = sqlServerBreakdown.ConvertToDialect("POSTGRESQL");
var result3 = sqlServerBreakdown.ConvertToDialect("postgresql");
// Assert
Assert.That(result1, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(result2, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(result3, Is.TypeOf<PostgreSqlBreakdown>());
Assert.Multiple(() =>
{
// Assert
Assert.That(result1, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(result2, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(result3, Is.TypeOf<PostgreSqlBreakdown>());
});
}
#endregion
@@ -281,10 +296,13 @@ public class ReverseConverterTests
var backToLinq2 = toPostgres!.ToLinqQueryBreakdown();
var finalToSqlServer = backToLinq2.ConvertToSqlServerBreakdown();
// Assert - Check that clauses are preserved
Assert.That(backToLinq.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(backToLinq.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(backToLinq.WhereClause.Clause, Is.EqualTo("IsActive = true"));
Assert.Multiple(() =>
{
// Assert - Check that clauses are preserved
Assert.That(backToLinq.SelectClause.Clause, Contains.Substring("Id"));
Assert.That(backToLinq.FromClause.Clause, Is.EqualTo("Users"));
Assert.That(backToLinq.WhereClause.Clause, Is.EqualTo("IsActive = true"));
});
}
#endregion
@@ -333,11 +351,14 @@ public class ReverseConverterTests
var resultSqlServer1 = sqlServerBreakdown.ConvertToDialect("sqlserver");
var resultSqlServer2 = sqlServerBreakdown.ConvertToDialect("sql_server");
// Assert
Assert.That(resultPostgres1, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(resultPostgres2, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(resultSqlServer1, Is.SameAs(sqlServerBreakdown));
Assert.That(resultSqlServer2, Is.SameAs(sqlServerBreakdown));
Assert.Multiple(() =>
{
// Assert
Assert.That(resultPostgres1, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(resultPostgres2, Is.TypeOf<PostgreSqlBreakdown>());
Assert.That(resultSqlServer1, Is.SameAs(sqlServerBreakdown));
Assert.That(resultSqlServer2, Is.SameAs(sqlServerBreakdown));
});
}
#endregion