using NUnit.Framework; using Strata.ContinuousImprovement.Biz.Shared; using Strata.ContinuousImprovement.Biz.StrategicOpportunities.DistributionProcess.ChargeCode; using Strata.ContinuousImprovement.Biz.StrategicOpportunities.Enums; using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using VerifyNUnit; using VerifyTests; namespace Strata.ContinuousImprovement.Biz.Test.Unit.StrategicOpportunities.DistributionProcess { public class DistributionProcessChargeCodeSqlBuilderTests : StrategicOpportunityTestsBase { private readonly long _testOpportunityId = 0; private readonly Period _baselinePeriod; private readonly Period _goalPeriod; private readonly Period _trackingPeriod; private readonly double[] _rampUps; public DistributionProcessChargeCodeSqlBuilderTests() { _baselinePeriod = new Period(new DateOnly(2024, 1, 1), new DateOnly(2024, 12, 31)); _goalPeriod = new Period(new DateOnly(2025, 1, 1), new DateOnly(2025, 12, 31)); _trackingPeriod = new Period(new DateOnly(2026, 1, 1), new DateOnly(2026, 12, 31)); _rampUps = [0.1, 0.2, 0.3, 0.4]; } [TestCaseSource(nameof(BuildInsertDistributedSqlTestCases))] public async Task BuildInsertDistributedSqlTest(DistributionMethod methodType, DistributionStage stage) { // Arrange var builder = new DistributionProcessChargeCodeSqlBuilder( _testOpportunityId, _baselinePeriod, _goalPeriod, _trackingPeriod, _rampUps); // Act var result = builder.BuildInsertDistributedSql(methodType, stage); // Assert await Verifier.Verify(result.Sql, VerifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } [TestCase(true)] [TestCase(false)] public async Task BuildDistributionSummarySqlTest(bool isInitiative) { // Arrange var builder = new DistributionProcessChargeCodeSqlBuilder( _testOpportunityId, _baselinePeriod, _goalPeriod, _trackingPeriod, _rampUps); // Act var result = builder.BuildDistributionSummarySql(isInitiative); // Assert await Verifier.Verify(result.Sql, VerifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } [Test] public async Task BuildUpdateDetailCommittedByRampUpSqlTest() { // Arrange var builder = new DistributionProcessChargeCodeSqlBuilder( _testOpportunityId, _baselinePeriod, _goalPeriod, _trackingPeriod, _rampUps); // Act var result = builder.BuildUpdateDetailCommittedByRampUpSql(_rampUps.Reverse().ToArray()); // Assert await Verifier.Verify(result.Sql, VerifySettings) .UseFileName(TestContext.CurrentContext.TestName()); } public static IEnumerable BuildInsertDistributedSqlTestCases() { var distributionMethods = new[] { DistributionMethod.Average, DistributionMethod.Monthly }; var distributionStages = new[] { DistributionStage.FromSourceToOpportunity, DistributionStage.OpportunityChangeGoalPeriod, DistributionStage.FromInitiativeToOpportunity, DistributionStage.FromOpportunityToInitiative, DistributionStage.InitiativeChangeTrackingPeriod }; foreach (var method in distributionMethods) { foreach (var stage in distributionStages) { yield return new TestCaseData(method, stage); } } } } }