using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Expressions; using Strata.SqlTools.SqlBreakdown.Expressions.Functions.Aggregate; namespace Strata.SqlTools.SqlBreakdown.Tests.ExpressionTests; [TestFixture] public class SelectClauseColumnTests : ExpressionTestsBase { private static IEnumerable SelectClauseColumnTestCases() { yield return new TestCaseData("TableColumn", "foo_dept_name", "PES.DEPARTMENT_NAME AS foo_dept_name") .SetName("TableColumn_{m}"); yield return new TestCaseData("SumFunction", "sum_net_rev", "SUM(PES.NET_REVENUE) AS sum_net_rev") .SetName("WithSumFunction_{m}"); yield return new TestCaseData("Parameter", "my_var_col", ":FOOBAR AS my_var_col") .SetName("WithParameter_{m}"); } [TestCaseSource(nameof(SelectClauseColumnTestCases))] public void SelectClauseColumn_GeneratesCorrectSql(string columnType, string alias, string expectedSql) { // Arrange SelectClauseColumn column = columnType switch { "TableColumn" => SelectClauseColumn.TableColumn(_nameColumnExp, alias), "SumFunction" => new SelectClauseColumn(new SumFunction(_revenueColumnExp), alias), "Parameter" => new SelectClauseColumn(new ParameterExpression("FOOBAR"), alias), _ => throw new ArgumentException($"Unknown column type: {columnType}") }; // Act var result = column.Accept(_sqlVisitor); // Assert Assert.That(result, Is.EqualTo(expectedSql)); } }