Files
continuousimprovement/tests/Strata.ContinuousImprovement.Biz.Test.Unit/Encounter/EncounterOpportunityMetricTest.cs
T

186 lines
9.0 KiB
C#

using FluentAssertions;
using NUnit.Framework;
using Strata.ContinuousImprovement.Biz.Dtos;
using Strata.ContinuousImprovement.Biz.Encounter.Opportunities;
using Strata.ContinuousImprovement.Biz.Mappers;
using Strata.ContinuousImprovement.Biz.Shared;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Strata.ContinuousImprovement.Biz.Test.Unit.Encounter
{
[TestFixture, Category("Unit")]
public class EncounterOpportunityMetricTest
{
private ENOpportunityDto opportunity;
private ENOpportunityDataModelWithFilters model;
[SetUp]
public void TestSetup()
{
opportunity = new ENOpportunityDto
{
ConfigurationGuid = Guid.NewGuid(),
Name = "Test Encounter Opportunity",
EncounterGroup = 0,
OpportunityLevel = 1,
EncounterGroups = new List<string>
{
"CaseType|CaseType|1"
},
OpportunityLevels = new List<string>()
{
"ENT|ENT|1"
},
IsBaseline = true
};
model = opportunity.MapToDataModel(null);
model.OpportunityGuid = Guid.NewGuid();
model.AuthorGuid = Guid.NewGuid();
model.AuthorName = "Someones Name";
model.DateCreated = DateTime.Today;
}
[Test]
public void TestENOpportunityDataModel()
{
var data = opportunity.MapToDataModel(null);
data.ConfigurationGuid.Should().NotBe(Guid.Empty)
.And.Be(opportunity.ConfigurationGuid);
data.EncounterGroup.Should().Be(opportunity.EncounterGroup);
data.OpportunityLevel.Should().Be(Enum.GetName(typeof(OpportunityLevel), opportunity.OpportunityLevel));
data.EncounterOpportunityLevel.Should().Be((OpportunityLevel)opportunity.OpportunityLevel);
data.CaseTypes.Should().NotBeEmpty()
.And.Contain(ct => opportunity.EncounterGroups.Select(x => x).Contains(ct.Id));
data.IsSeasonal.Should().Be(opportunity.IsSeasonal);
data.IsBaseline.Should().Be(opportunity.IsBaseline);
}
[Test]
public void TestEncounterOpportunityMetric()
{
var metric = model.MapFromDataModel();
metric.OpportunityGuid.Should().Be(model.OpportunityGuid);
metric.ConfigurationGuid.Should().Be(model.ConfigurationGuid);
metric.AuthorName.Should().Be(model.AuthorName);
metric.AuthorGuid.Should().Be(model.AuthorGuid);
metric.Name.Should().Be(model.Name);
metric.EncounterOpportunityLevel.Should().Be(model.EncounterOpportunityLevel);
metric.EncounterGroup.Should().Be(model.EncounterGroup);
metric.CaseTypes.Should().NotBeEmpty()
.And.Contain(ct => opportunity.EncounterGroups.Select(x => x).Contains(ct.Id));
var filter = opportunity.EncounterGroups.First().MapToFilterHelper();
metric.CaseTypes.First().GetHashCode().Equals(filter.GetHashCode());
metric.PatientPopulations.Should().BeEmpty();
metric.Entities.Should().NotBeEmpty()
.And.Contain(ct => opportunity.OpportunityLevels.Select(x => x).Contains(ct.Id));
metric.ServiceLines.Should().BeEmpty();
metric.Specialties.Should().BeEmpty();
metric.Providers.Should().BeEmpty();
metric.IsBaseline.Should().Be(opportunity.IsBaseline);
metric.ConfigurationGuid.Should().NotBe(Guid.Empty);
metric.IsSeasonal.Should().Be(opportunity.IsSeasonal);
metric.IsBaseline.Should().Be(opportunity.IsBaseline);
}
[TestCaseSource(nameof(GetEncounterOpportunityMetricTests))]
public void TestEncounterOpportunityMetric(ENOpportunityDto enOpportunity)
{
var dataModel = opportunity.MapToDataModel(null);
var metric = dataModel.MapFromDataModel();
metric.OpportunityGuid.Should().Be(dataModel.OpportunityGuid);
metric.ConfigurationGuid.Should().Be(dataModel.ConfigurationGuid);
metric.AuthorName.Should().Be(dataModel.AuthorName);
metric.AuthorGuid.Should().Be(dataModel.AuthorGuid);
metric.Name.Should().Be(dataModel.Name);
metric.EncounterOpportunityLevel.Should().Be(dataModel.EncounterOpportunityLevel);
metric.EncounterGroup.Should().Be(dataModel.EncounterGroup);
switch ((EncounterGroup)metric.EncounterGroup)
{
case EncounterGroup.CaseType:
metric.CaseTypes.Should().NotBeEmpty()
.And.Contain(ct => opportunity.EncounterGroups.Select(x => x).Contains(ct.Id));
var filter = opportunity.EncounterGroups.First().MapToFilterHelper();
metric.CaseTypes.First().GetHashCode().Equals(filter.GetHashCode());
break;
case EncounterGroup.PatientPopulation:
metric.PatientPopulations.Should().NotBeEmpty()
.And.Contain(ct => opportunity.EncounterGroups.Select(x => x).Contains(ct.Id));
var filter1 = opportunity.EncounterGroups.First().MapToFilterHelper();
metric.PatientPopulations.First().GetHashCode().Equals(filter1.GetHashCode());
break;
}
metric.PatientPopulations.Should().BeEmpty();
switch (metric.EncounterOpportunityLevel)
{
case OpportunityLevel.Organization:
metric.Entities.Should().BeEmpty();
metric.ServiceLines.Should().BeEmpty();
metric.Specialties.Should().BeEmpty();
metric.Providers.Should().BeEmpty();
break;
case OpportunityLevel.Entity:
metric.Entities.Should().NotBeEmpty()
.And.Contain(ct => opportunity.OpportunityLevels.Select(x => x).Contains(ct.Id));
metric.ServiceLines.Should().BeEmpty();
metric.Specialties.Should().BeEmpty();
metric.Providers.Should().BeEmpty();
break;
case OpportunityLevel.ServiceLine:
metric.ServiceLines.Should().NotBeEmpty()
.And.Contain(ct => opportunity.OpportunityLevels.Select(x => x).Contains(ct.Id));
metric.Entities.Should().BeEmpty();
metric.Specialties.Should().BeEmpty();
metric.Providers.Should().BeEmpty();
break;
case OpportunityLevel.Specialty:
metric.Specialties.Should().NotBeEmpty()
.And.Contain(ct => opportunity.OpportunityLevels.Select(x => x).Contains(ct.Id));
metric.Entities.Should().BeEmpty();
metric.ServiceLines.Should().BeEmpty();
metric.Providers.Should().BeEmpty();
break;
case OpportunityLevel.Provider:
metric.Providers.Should().NotBeEmpty()
.And.Contain(ct => opportunity.OpportunityLevels.Select(x => x).Contains(ct.Id));
metric.Entities.Should().BeEmpty();
metric.ServiceLines.Should().BeEmpty();
metric.Specialties.Should().BeEmpty();
break;
}
metric.IsBaseline.Should().Be(opportunity.IsBaseline);
metric.ConfigurationGuid.Should().NotBe(Guid.Empty);
metric.IsSeasonal.Should().Be(opportunity.IsSeasonal);
metric.IsBaseline.Should().Be(opportunity.IsBaseline);
}
public static IEnumerable<TestCaseData> GetEncounterOpportunityMetricTests()
{
foreach (EncounterGroup encounterGroup in Enum.GetValues(typeof(EncounterGroup)))
{
if (encounterGroup == EncounterGroup.Both) continue;
foreach (OpportunityLevel oppLevel in Enum.GetValues(typeof(OpportunityLevel)))
{
yield return new TestCaseData(new ENOpportunityDto
{
ConfigurationGuid = Guid.NewGuid(),
Name = "Test Encounter Opportunity",
EncounterGroup = (int)encounterGroup,
OpportunityLevel = (int)oppLevel,
EncounterGroups = new List<string>
{
"CaseType|CaseType|1"
},
OpportunityLevels = new List<string>()
{
"ENT|ENT|1"
},
IsBaseline = true
}).SetName($"TestEncounterOpportunityMetric {encounterGroup} {oppLevel}");
}
}
}
}
}