chore: initial git load of code space
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
using Strata.SqlTools.SqlBreakdown.Classes;
|
||||
using Strata.SqlTools.SqlBreakdown.Expressions;
|
||||
using Strata.SqlTools.SqlBreakdown.Expressions.Functions.Aggregate;
|
||||
using Strata.SqlTools.SqlBreakdown.Expressions.Functions.Conditional;
|
||||
|
||||
namespace Strata.SqlTools.SqlBreakdown.Tests.ExpressionTests;
|
||||
|
||||
[TestFixture]
|
||||
public class ConditionalExpressionTests : ExpressionTestsBase
|
||||
{
|
||||
private static IEnumerable<TestCaseData> ConditionalExpressionTestCases()
|
||||
{
|
||||
var testCases = new[]
|
||||
{
|
||||
new ExpressionTestCase
|
||||
{
|
||||
Name = "CaseExpression_{m}",
|
||||
Arrange = new Dictionary<string, Expression>(),
|
||||
Act = (columns, visitor) =>
|
||||
{
|
||||
var table = new RegisteredTableSource(101, "CLIENT_DSS", "DEPT", "PES");
|
||||
var nameCol = new RegisteredTableColumnExpression(1, "DEPARTMENT_NAME", table);
|
||||
var revenueCol = new RegisteredTableColumnExpression(2, "NET_REVENUE", table);
|
||||
var caseExp = new CaseExpression(nameCol == "department 1", revenueCol, 0);
|
||||
return caseExp.Accept(visitor);
|
||||
},
|
||||
Assertions = result =>
|
||||
{
|
||||
var sql = (string)result;
|
||||
Assert.That(sql, Does.Contain("CASE"));
|
||||
Assert.That(sql, Does.Contain("WHEN"));
|
||||
Assert.That(sql, Does.Contain("THEN"));
|
||||
Assert.That(sql, Does.Contain("ELSE"));
|
||||
Assert.That(sql, Does.Contain("END"));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
new ExpressionTestCase
|
||||
{
|
||||
Name = "CaseExpressionWithSum_{m}",
|
||||
Arrange = new Dictionary<string, Expression>(),
|
||||
Act = (columns, visitor) =>
|
||||
{
|
||||
var table = new RegisteredTableSource(101, "CLIENT_DSS", "DEPT", "PES");
|
||||
var nameCol = new RegisteredTableColumnExpression(1, "DEPARTMENT_NAME", table);
|
||||
var revenueCol = new RegisteredTableColumnExpression(2, "NET_REVENUE", table);
|
||||
var caseExp = new CaseExpression(nameCol == "department 1", revenueCol, 0);
|
||||
var sumCaseExp = new SumFunction(caseExp);
|
||||
return sumCaseExp.Accept(visitor);
|
||||
},
|
||||
Assertions = result =>
|
||||
{
|
||||
var sql = (string)result;
|
||||
Assert.That(sql, Does.Contain("SUM"));
|
||||
Assert.That(sql, Does.Contain("CASE"));
|
||||
Assert.That(sql, Does.Contain("WHEN"));
|
||||
Assert.That(sql, Is.EqualTo("SUM(CASE\n WHEN PES.DEPARTMENT_NAME = 'department 1' THEN PES.NET_REVENUE\n ELSE 0\nEND)"));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
new ExpressionTestCase
|
||||
{
|
||||
Name = "CaseExpressionWithSumInSelectColumn_{m}",
|
||||
Arrange = new Dictionary<string, Expression>(),
|
||||
Act = (columns, visitor) =>
|
||||
{
|
||||
var table = new RegisteredTableSource(101, "CLIENT_DSS", "DEPT", "PES");
|
||||
var nameCol = new RegisteredTableColumnExpression(1, "DEPARTMENT_NAME", table);
|
||||
var revenueCol = new RegisteredTableColumnExpression(2, "NET_REVENUE", table);
|
||||
var caseExp = new CaseExpression(nameCol == "department 1", revenueCol, 0);
|
||||
var sumCaseExp = new SumFunction(caseExp);
|
||||
var column = new SelectClauseColumn(sumCaseExp, "mySumCaseCol");
|
||||
return column.Accept(visitor);
|
||||
},
|
||||
Assertions = result =>
|
||||
{
|
||||
var sql = (string)result;
|
||||
Assert.That(sql, Does.Contain("SUM"));
|
||||
Assert.That(sql, Does.Contain("CASE"));
|
||||
Assert.That(sql, Does.Contain("mySumCaseCol"));
|
||||
Assert.That(sql, Is.EqualTo("SUM(CASE\n WHEN PES.DEPARTMENT_NAME = 'department 1' THEN PES.NET_REVENUE\n ELSE 0\nEND) AS mySumCaseCol"));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
new ExpressionTestCase
|
||||
{
|
||||
Name = "IfThenElseExpression_{m}",
|
||||
Arrange = new Dictionary<string, Expression>(),
|
||||
Act = (columns, visitor) =>
|
||||
{
|
||||
var table = new RegisteredTableSource(101, "CLIENT_DSS", "DEPT", "PES");
|
||||
var nameCol = new RegisteredTableColumnExpression(1, "DEPARTMENT_NAME", table);
|
||||
var revenueCol = new RegisteredTableColumnExpression(2, "NET_REVENUE", table);
|
||||
var costCol = new RegisteredTableColumnExpression(3, "COST", table);
|
||||
var ifElseExp = new IfThenElseExpression(nameCol == "myDeptName", revenueCol, costCol);
|
||||
return ifElseExp.Accept(visitor);
|
||||
},
|
||||
Assertions = result =>
|
||||
{
|
||||
var sql = (string)result;
|
||||
Assert.That(sql, Does.Contain("IFF"));
|
||||
Assert.That(sql, Is.EqualTo("IFF(PES.DEPARTMENT_NAME = 'myDeptName', PES.NET_REVENUE, PES.COST)"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
foreach (var testCase in testCases)
|
||||
{
|
||||
yield return new TestCaseData(testCase).SetName(testCase.Name);
|
||||
}
|
||||
}
|
||||
|
||||
[TestCaseSource(nameof(ConditionalExpressionTestCases))]
|
||||
public void ConditionalExpression_GeneratesCorrectSql(ExpressionTestCase testCase)
|
||||
=> ExecuteExpressionTest(testCase);
|
||||
}
|
||||
Reference in New Issue
Block a user