using Strata.SqlTools.Breakdowns.SqlServer; using Strata.SqlTools.Markdown.SqlServer; namespace Strata.SqlTools.Markdown.Tests.SqlServer; [TestFixture] public class SqlStatementGeneratorTests { private SqlStatementGenerator _generator = null!; [SetUp] public void Setup() { _generator = new SqlStatementGenerator(); } [Test] public void GenerateSequenceDiagram_WithSimpleQuery_GeneratesSequence() { // Arrange var query = new QueryBreakdown("*", "Users"); // Act var result = _generator.GenerateSequenceDiagram(query); // Assert Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("sequenceDiagram")); Assert.That(result, Does.Contain("App->>DB")); Assert.That(result, Does.Contain("DB-->>App")); Assert.That(result, Does.Contain("```")); } [Test] public void GenerateSequenceDiagram_WithSetupClauses_IncludesSetup() { // Arrange var query = new QueryBreakdown("*", "Users"); query.SetupClauses.Add("CREATE TEMP TABLE #Temp (ID INT)"); // Act var result = _generator.GenerateSequenceDiagram(query); // Assert Assert.That(result, Does.Contain("Setup Clauses")); Assert.That(result, Does.Contain("activate DB")); Assert.That(result, Does.Contain("deactivate DB")); } [Test] public void GenerateSequenceDiagram_WithFinishClauses_IncludesFinish() { // Arrange var query = new QueryBreakdown("*", "Users"); query.FinishClauses.Add("DROP TABLE #Temp"); // Act var result = _generator.GenerateSequenceDiagram(query); // Assert Assert.That(result, Does.Contain("Finish Clauses")); Assert.That(result, Does.Contain("Cleanup")); } [Test] public void GenerateSequenceDiagram_WithTitle_IncludesTitle() { // Arrange var query = new QueryBreakdown("*", "Users"); // Act var result = _generator.GenerateSequenceDiagram(query, "Query Execution"); // Assert Assert.That(result, Does.StartWith("### Query Execution")); } [Test] public void GenerateEntityRelationshipDiagram_WithTables_GeneratesERDiagram() { // Arrange var tables = new[] { "Users", "Orders", "Products" }; // Act var result = _generator.GenerateEntityRelationshipDiagram(tables); // Assert Assert.That(result, Does.Contain("```mermaid")); Assert.That(result, Does.Contain("erDiagram")); Assert.That(result, Does.Contain("Users")); Assert.That(result, Does.Contain("Orders")); Assert.That(result, Does.Contain("Products")); Assert.That(result, Does.Contain("```")); } [Test] public void GenerateEntityRelationshipDiagram_WithTitle_IncludesTitle() { // Arrange var tables = new[] { "Users", "Orders" }; // Act var result = _generator.GenerateEntityRelationshipDiagram(tables, "Database Schema"); // Assert Assert.That(result, Does.StartWith("### Database Schema")); } [Test] public void GenerateEntityRelationshipDiagram_CleansTableNames() { // Arrange var tables = new[] { "[dbo].[Users]", "schema.Orders" }; // Act var result = _generator.GenerateEntityRelationshipDiagram(tables); // Assert Assert.That(result, Does.Contain("dbo_Users")); Assert.That(result, Does.Contain("schema_Orders")); Assert.That(result, Does.Not.Contain("[")); Assert.That(result, Does.Not.Contain("]")); } }