Files
sql-utilities/tests/Strata.SqlTools.Tests/ExpressionTests/ExpressionTestsBase.cs
T

73 lines
2.9 KiB
C#

using Strata.SqlTools.SqlBreakdown.Classes;
using Strata.SqlTools.SqlBreakdown.Expressions;
using Strata.SqlTools.SqlBreakdown.Expressions.Conditional;
using Strata.SqlTools.SqlServer.ExpressionFactory.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;
/// <summary>
/// Test implementation of ExpressionFactory for unit testing.
/// Uses July 1 as the fiscal year start date.
/// </summary>
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);
}
/// <summary>
/// Base class for expression tests with common setup.
/// </summary>
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();
}
/// <summary>
/// Executes an expression test case with arrange, act, and assert phases.
/// </summary>
/// <param name="testCase">The test case to execute.</param>
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));
}
}