using Strata.SqlTools.Markdown.LinqToSql; using Strata.SqlTools.Breakdowns.LinqToSql; namespace Strata.SqlTools.Markdown.Tests.LinqToSql; [TestFixture] public class SqlStatementGeneratorTests { private SqlStatementGenerator _generator = null!; [SetUp] public void Setup() { _generator = new SqlStatementGenerator(); } [Test] public void GenerateLinqPipelineDiagram_BasicQuery_GeneratesSequenceDiagram() { // Arrange var query = new LinqQueryBreakdown("*", "Users"); // Act var result = SqlStatementGenerator.GenerateLinqPipelineDiagram(query, "User Query Pipeline"); // Assert Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("sequenceDiagram")); Assert.That(result, Does.Contain("### User Query Pipeline")); Assert.That(result, Does.Contain("LINQ Provider")); Assert.That(result, Does.Contain("Expression Tree")); Assert.That(result, Does.Contain("SQL Generator")); Assert.That(result, Does.Contain("Database")); Assert.That(result, Does.Contain("```")); } [Test] public void GenerateLinqPipelineDiagram_WithWhere_ShowsPredicateProcessing() { // Arrange var query = new LinqQueryBreakdown("Id, Name", "Users"); query.AddWhereClause("Age > 21"); // Act var result = SqlStatementGenerator.GenerateLinqPipelineDiagram(query); // Assert Assert.That(result, Does.Contain("Where Predicate")); Assert.That(result, Does.Contain("Expression Tree")); Assert.That(result, Does.Contain("SQL Generator")); } [Test] public void GenerateLinqPipelineDiagram_WithProjection_ShowsSelectProcessing() { // Arrange var query = new LinqQueryBreakdown("Id, Name, Email", "Users"); // Act var result = SqlStatementGenerator.GenerateLinqPipelineDiagram(query); // Assert Assert.That(result, Does.Contain("Select Projection")); Assert.That(result, Does.Contain("LINQ Provider")); Assert.That(result, Does.Contain("Database")); } [Test] public void GenerateLinqPipelineDiagram_NullTitle_GeneratesWithoutTitle() { // Arrange var query = new LinqQueryBreakdown("*", "Users"); // Act var result = SqlStatementGenerator.GenerateLinqPipelineDiagram(query, null); // Assert Assert.That(result, Does.Not.Contain("###")); Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("sequenceDiagram")); } [Test] public void GenerateSequenceDiagram_DelegatesToBaseClass() { // Arrange var query = new LinqQueryBreakdown("*", "Users"); // Act var result = SqlStatementGenerator.GenerateSequenceDiagram(query, "Sequence Test"); // Assert Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("sequenceDiagram")); Assert.That(result, Does.Contain("### Sequence Test")); } [Test] public void GenerateEntityRelationshipDiagram_DelegatesToBaseClass() { // Arrange var query = new LinqQueryBreakdown("Id, Name", "Users"); // Act var result = SqlStatementGenerator.GenerateEntityRelationshipDiagram(query, "ER Test"); // Assert Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("erDiagram")); Assert.That(result, Does.Contain("### ER Test")); } }