using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Expressions; using Strata.SqlTools.SqlBreakdown.Expressions.Conditional; using Strata.SqlTools.Query; using Strata.SqlTools.SqlBreakdown.Tests.RegisteredTables; using Strata.SqlTools.Visitors.Snowflake; using ExpressionFactoryBase = Strata.SqlTools.SqlServer.ExpressionFactory.ExpressionFactory; namespace Strata.SqlTools.SqlBreakdown.Tests.ExpressionTests; /// /// Test implementation of ExpressionFactory for unit testing. /// Uses July 1 as the fiscal year start date. /// internal class TestExpressionFactory : ExpressionFactoryBase { protected override DateTime GetCurrentFiscalYearStart() { return new DateTime(DateTime.UtcNow.Year, 7, 1, 0, 0, 0, DateTimeKind.Utc); } protected override RegisteredTableColumnExpression GetColumnExpression(int dataColumnId) { return RegisteredTableColumns.GetColumn(dataColumnId); } // Public wrappers for testing protected methods public new BooleanExpression CreateBooleanExpression(Filter filter) => base.CreateBooleanExpression(filter); public static new Expression GetFiscalYearMonthExpression(Expression dateColumnExpr, int fiscalYearStartMonth, int fiscalYearStartDay) => ExpressionFactoryBase.GetFiscalYearMonthExpression(dateColumnExpr, fiscalYearStartMonth, fiscalYearStartDay); } /// /// Base class for expression tests with common setup. /// public abstract class ExpressionTestsBase { protected RegisteredTableSource _table = null!; protected RegisteredTableColumnExpression _nameColumnExp = null!; protected RegisteredTableColumnExpression _revenueColumnExp = null!; protected RegisteredTableColumnExpression _costColumnExp = null!; protected RegisteredTableColumnExpression _dischargeDateColumnExp = null!; protected CommandVisitor _sqlVisitor = null!; [SetUp] public void SetUp() { _table = new RegisteredTableSource(101, "CLIENT_DSS", "FACT_PATIENT_ENCOUNTER_SUMMARY", "PES"); _nameColumnExp = new RegisteredTableColumnExpression(1, "DEPARTMENT_NAME", _table); _revenueColumnExp = new RegisteredTableColumnExpression(2, "NET_REVENUE", _table); _costColumnExp = new RegisteredTableColumnExpression(3, "COST", _table); _dischargeDateColumnExp = new RegisteredTableColumnExpression(4, "DISCHARGE_DATE", _table); _sqlVisitor = new CommandVisitor(); } /// /// Executes an expression test case with arrange, act, and assert phases. /// /// The test case to execute. protected void ExecuteExpressionTest(ExpressionTestCase testCase) { // Arrange var visitor = new CommandVisitor(); var arrange = testCase.Arrange; // Act var result = testCase.Act(arrange, visitor); // Assert Assert.That(testCase.Assertions(result)); } }