using Moq; using Strata.DecisionSupport.Biz.Encounters; using Strata.DecisionSupport.Biz.Parameters; using Strata.DecisionSupport.Biz.Services; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using VerifyNUnit; namespace Strata.DecisionSupport.Biz.Test.Unit.Services { [TestFixture, Category("Unit"), Category("DSS")] public class EncounterInfoQueryTests : EncounterQueryServiceTests { [SetUp] public void Setup() { var encounterInfo = new List { new SnowflakeEncounterInfo { EncounterId = 123456789, EncounterRecordNumber = "123456789" } }.AsEnumerable(); Mock.Get(snowflakeDbContext) .Setup(x => x.QueryAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(() => Task.FromResult(encounterInfo)); } [TestCaseSource(nameof(EncounterInfoQueryTestCases))] public async Task EncounterInfoQueryTest(string globalId, params object[] args) { var query = globalId.EncounterInfoQuery(args); await Verifier.Verify(query, verifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } public static IEnumerable EncounterInfoQueryTestCases() { yield return new TestCaseData("", Array.Empty()) .SetName("{m} with no args"); yield return new TestCaseData("Location", Array.Empty()) .SetName("{m} Location with no args"); yield return new TestCaseData("DepartmentRollup1Id", Array.Empty()) .SetName("{m} Department Rollup with no args"); yield return new TestCaseData("", new[] { "PrimaryServiceLine", "INNER JOIN serviceLineTableName sl on sl.serviceLineIdAttribute = OBJ.serviceLineIdAttribute", "DepartmentRollup1Id", "OBJ.MSDRGCaseTypeFamilyID AS CaseTypeFamilyId\r\n\t,msdrg.CCMCCCategory", "INNER JOIN dss.dimMSDRG msdrg ON obj.ReportingDRGID = msdrg.MSDRGID \r\n AND ((msdrg.Type IN ('MED', 'SURG') AND ptr.Type = 'Inpatient')\r\n OR ptr.Type <> 'Inpatient')"}) .SetName("{m} Entity"); yield return new TestCaseData("Location", new[] { "PrimaryServiceLine", "INNER JOIN serviceLineTableName sl on sl.serviceLineIdAttribute = OBJ.serviceLineIdAttribute", "DepartmentRollup1Id", "OBJ.MSDRGCaseTypeFamilyID AS CaseTypeFamilyId\r\n\t,msdrg.CCMCCCategory", "INNER JOIN dss.dimMSDRG msdrg ON obj.ReportingDRGID = msdrg.MSDRGID\r\n AND ((msdrg.Type IN ('MED', 'SURG') AND ptr.Type = 'Inpatient')\r\n OR ptr.Type <> 'Inpatient')"}) .SetName("{m} Location"); yield return new TestCaseData("DepartmentRollup1Id", new[] { "PrimaryServiceLine", "INNER JOIN serviceLineTableName sl on sl.serviceLineIdAttribute = OBJ.serviceLineIdAttribute", "DepartmentRollup1Id", "OBJ.MSDRGCaseTypeFamilyID AS CaseTypeFamilyId\r\n\t,msdrg.CCMCCCategory", "INNER JOIN dss.dimMSDRG msdrg ON obj.ReportingDRGID = msdrg.MSDRGID\r\n AND ((msdrg.Type IN ('MED', 'SURG') AND ptr.Type = 'Inpatient')\r\n OR ptr.Type <> 'Inpatient')"}) .SetName("{m} Department Rollup"); } [TestCaseSource(nameof(EncounterInfoQueryTestCases1))] public async Task RunEncounterInfoQueryTest(Models.Queries.CaseTypeCategory caseTypeCategory, Guid serviceLineGuid) { var queryInfo = new EncounterQueryInfo(caseTypeCategory, 210, new DateTime(2023, 1, 1), new DateTime(2024, 1, 1), "", serviceLineGuid, 24, new[] { 2 }); var results = await service.RunEncounterInfoQuery(queryInfo, CancellationToken.None); await Verifier.Verify(results, verifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } public static IEnumerable EncounterInfoQueryTestCases1() { yield return new TestCaseData(Models.Queries.CaseTypeCategory.MSDRG, serviceLineDimensionGuid) .SetName("RunEncounterInfoQuery Msdrg ServiceLine"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.APRDRG, serviceLineDimensionGuid) .SetName("RunEncounterInfoQuery Aprdrg ServiceLine"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.CPTCode, serviceLineDimensionGuid) .SetName("RunEncounterInfoQuery CptCode ServiceLine"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.PatientPopulation, serviceLineDimensionGuid) .SetName("RunEncounterInfoQuery PatientPop ServiceLine"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.MSDRG, sg2DimensionGuid) .SetName("RunEncounterInfoQuery Msdrg Sg2"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.APRDRG, sg2DimensionGuid) .SetName("RunEncounterInfoQuery Aprdrg Sg2"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.CPTCode, sg2DimensionGuid) .SetName("RunEncounterInfoQuery CptCode Sg2"); yield return new TestCaseData(Models.Queries.CaseTypeCategory.PatientPopulation, sg2DimensionGuid) .SetName("RunEncounterInfoQuery PatientPop Sg2"); } } }