using Microsoft.Data.SqlClient; using Moq; using NUnit.Framework; using Strata.ContinuousImprovement.Biz.ChargeCode.Opportunities; using Strata.ContinuousImprovement.Biz.Shared; using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities; using System; using System.Collections.Generic; using System.Threading.Tasks; using VerifyNUnit; using VerifyTests; namespace Strata.ContinuousImprovement.Biz.Test.Unit.ChargeCode.Opportunities { [TestFixture, Category("Unit")] public class OpportunityDetailLevelQueryTests { private VerifySettings _verifySettings; [SetUp] public void TestSetup() { _verifySettings = TestExtensions.TestSettings(); } [TestCaseSource(nameof(OpportunityDetailLevelQueryTestCases))] public async Task OpportunityDetailLevelQueryTest(OpportunityLevel opportunityLevel, QueryHelper encounterQueryHelper, QueryHelper opportunityLevelQueryHelper) { var query = new OpportunityDetailLevelQuery(opportunityLevel, encounterQueryHelper, opportunityLevelQueryHelper); var result = query.GetQuery(); await Verifier.Verify(result, _verifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } public static IEnumerable OpportunityDetailLevelQueryTestCases() { var configuration = Mock.Of(); configuration.DepartmentRollupGlobalId = ""; var sqlParameters = new SqlParameter[] { new SqlParameter("@chargeCodeIds", new List { 1, 2, 3 }), new SqlParameter("@caseTypeIds", new List { 1, 2, 3 }), new SqlParameter("@startDate", new DateTime(2023,1,1)), new SqlParameter("@endDate", new DateTime(2024,1,1)), new SqlParameter("@isBaseline", true) }; foreach (var parameterName in new[] { "@caseTypeIds", "@indicatorIds" }) { sqlParameters[1].ParameterName = parameterName; foreach (var isUsingSnowflake in new[] { true, false }) { foreach (var oppLevel in Enum.GetValues()) { switch (oppLevel) { case OpportunityLevel.ServiceLine: foreach (var serviceLine in new[] { "Sg2 Service Line Crosswalk", "Service Line" }) { yield return new TestCaseData(oppLevel, new EncounterGroupQueryHelper(sqlParameters), new OpportunityLevelQueryHelper(oppLevel, configuration, serviceLine, $"{(serviceLine.Replace(" ", ""))}Id")) .SetName($"{{m}} {Enum.GetName(oppLevel)} {parameterName.Substring(1)} {serviceLine} {(isUsingSnowflake ? "Snowflake" : "")}"); } break; default: yield return new TestCaseData(oppLevel, new EncounterGroupQueryHelper(sqlParameters), new OpportunityLevelQueryHelper(oppLevel, configuration, "", "")) .SetName($"{{m}} {Enum.GetName(oppLevel)} {parameterName.Substring(1)} Default {(isUsingSnowflake ? "Snowflake" : "")}"); break; } } } } } } }