コード例 #1
0
        public void ThenTheUpsertedProviderVersionForHasTheFollowingFundingLineProfilePeriods(string providerId,
                                                                                              IEnumerable <ExpectedFundingLineProfileValues> expectedFundingLineProfileValues)
        {
            PublishedProviderVersion publishedProviderVersion = GetUpsertedPublishedProviderVersion(providerId);

            foreach (ExpectedFundingLineProfileValues expectedFundingLineProfileValue in expectedFundingLineProfileValues)
            {
                FundingLine fundingLine = publishedProviderVersion.FundingLines.SingleOrDefault(_ =>
                                                                                                _.FundingLineCode == expectedFundingLineProfileValue.FundingLineCode);

                fundingLine
                .Should()
                .NotBeNull();

                foreach (ExpectedDistributionPeriod expectedDistributionPeriod in expectedFundingLineProfileValue.ExpectedDistributionPeriods)
                {
                    DistributionPeriod distributionPeriod = fundingLine.DistributionPeriods.SingleOrDefault(_ =>
                                                                                                            _.DistributionPeriodId == expectedDistributionPeriod.DistributionPeriodId);

                    distributionPeriod
                    .Should()
                    .NotBeNull();

                    foreach (ExpectedProfileValue expectedProfileValue in expectedDistributionPeriod.ExpectedProfileValues)
                    {
                        ProfilePeriod profilePeriod = distributionPeriod
                                                      .ProfilePeriods.SingleOrDefault(
                            _ => _.Type == expectedProfileValue.Type &&
                            _.TypeValue == expectedProfileValue.TypeValue &&
                            _.Year == expectedProfileValue.Year &&
                            _.Occurrence == expectedProfileValue.Occurrence);

                        profilePeriod
                        .Should()
                        .NotBeNull();

                        profilePeriod
                        .ProfiledValue
                        .Should()
                        .Be(expectedProfileValue.ProfiledValue);
                    }
                }
            }
        }
        public void OverridesDistributionPeriodsOnFundingLinesWhereThereIsACustomProfileOnThePublishedProviderVersionAndChecksForErrors()
        {
            string fundingLineWithCustomProfile = NewRandomString();
            string fundingLineCodeTwo           = NewRandomString();

            DistributionPeriod customProfile = NewDistributionPeriod(dp =>
                                                                     dp.WithProfilePeriods(NewProfilePeriod(), NewProfilePeriod()));

            DistributionPeriod profiledDistributionPeriod = NewDistributionPeriod(dp =>
                                                                                  dp.WithProfilePeriods(NewProfilePeriod()));

            FundingLine fundingLineForCustomProfile = NewFundingLine(fl => fl.WithFundingLineCode(fundingLineWithCustomProfile)
                                                                     .WithFundingLineType(FundingLineType.Payment)
                                                                     .WithDistributionPeriods(NewDistributionPeriod(dp =>
                                                                                                                    dp.WithProfilePeriods(NewProfilePeriod()))));
            FundingLine fundingLineWithProfiling = NewFundingLine(fl => fl.WithFundingLineCode(fundingLineCodeTwo)
                                                                  .WithDistributionPeriods(profiledDistributionPeriod)
                                                                  .WithFundingLineType(FundingLineType.Payment));

            PublishedProviderVersion publishedProviderVersion = NewPublishedProviderVersion(_ =>
                                                                                            _.WithCustomProfiles(NewFundingLineOverrides(fl =>
                                                                                                                                         fl.WithFundingLineCode(fundingLineWithCustomProfile)
                                                                                                                                         .WithDistributionPeriods(customProfile)))
                                                                                            .WithFundingLines(fundingLineForCustomProfile,
                                                                                                              fundingLineWithProfiling));

            WhenThePublishedProviderIsProcessed(publishedProviderVersion);

            fundingLineForCustomProfile
            .DistributionPeriods
            .Should()
            .BeEquivalentTo(customProfile);

            fundingLineWithProfiling
            .DistributionPeriods
            .Should()
            .BeEquivalentTo(profiledDistributionPeriod);
        }
コード例 #3
0
 public override int GetHashCode()
 {
     unchecked
     {
         return((AllocationValue.GetHashCode() * 397) ^ (DistributionPeriod != null ? DistributionPeriod.GetHashCode() : 0));
     }
 }
        public async Task AssignProfilePatternKeyForFundingLineWithAlreadyPaidProfilePeriodsUsesReProfileResponseResultsFromApi()
        {
            string fundingLineCode            = NewRandomString();
            string existingProfilePatternKey  = NewRandomString();
            string newProfilePatterFundingKey = NewRandomString();
            string specificationId            = NewRandomString();

            int occurence = NewRandomNumberBetween(1, 100);
            ProfilePeriodType profilePeriodType = NewRandomEnum <ProfilePeriodType>();
            string            typeValue         = NewRandomString();
            int     year = NewRandomNumberBetween(2019, 2021);
            string  distributionPeriodId = NewRandomString();
            decimal carryOverAmount      = NewRandomNumberBetween(1, int.MaxValue);

            GivenTheFundingConfiguration(true);
            ProfilePatternKey profilePatternKey = NewProfilePatternKey(_ => _.WithFundingLineCode(fundingLineCode).WithKey(newProfilePatterFundingKey));
            ProfilePeriod     paidProfilePeriod = NewProfilePeriod(pp => pp
                                                                   .WithDistributionPeriodId(distributionPeriodId)
                                                                   .WithType(profilePeriodType)
                                                                   .WithTypeValue(typeValue)
                                                                   .WithYear(year)
                                                                   .WithOccurence(occurence));

            FundingLine fundingLine = NewFundingLine(_ => _
                                                     .WithFundingLineCode(fundingLineCode)
                                                     .WithDistributionPeriods(
                                                         NewDistributionPeriod(dp => dp
                                                                               .WithDistributionPeriodId(distributionPeriodId)
                                                                               .WithProfilePeriods(paidProfilePeriod))
                                                         ));
            PublishedProviderVersion existingPublishedProviderVersion =
                NewPublishedProviderVersion(ppv => ppv
                                            .WithFundingStreamId(_fundingStreamId)
                                            .WithFundingPeriodId(_fundingPeriodId)
                                            .WithSpecificationId(specificationId)
                                            .WithProfilePatternKeys(
                                                NewProfilePatternKey(_ => _.WithFundingLineCode(fundingLineCode)
                                                                     .WithKey(existingProfilePatternKey)))
                                            .WithFundingLines(fundingLine)
                                            );

            PublishedProvider publishedProvider = NewPublishedProvider(_ => _.WithCurrent(existingPublishedProviderVersion));
            PublishedProviderCreateVersionRequest publishedProviderCreateVersionRequest = NewPublishedProviderCreateVersionRequest(_ =>
                                                                                                                                   _.WithPublishedProvider(publishedProvider)
                                                                                                                                   .WithNewVersion(existingPublishedProviderVersion));
            IEnumerable <ProfileVariationPointer> profileVariationPointers =
                NewProfileVariationPointers(_ => _
                                            .WithFundingLineId(fundingLineCode)
                                            .WithFundingStreamId(_fundingStreamId)
                                            .WithOccurence(occurence)
                                            .WithPeriodType(profilePeriodType.ToString())
                                            .WithTypeValue(typeValue)
                                            .WithYear(year));

            ReProfileRequest  reProfileRequest  = NewReProfileRequest();
            ReProfileResponse reProfileResponse = NewReProfileResponse(_ => _.WithCarryOverAmount(carryOverAmount)
                                                                       .WithDeliveryProfilePeriods(NewDeliveryProfilePeriod(dpp => dpp.WithOccurrence(1)
                                                                                                                            .WithValue(10)
                                                                                                                            .WithYear(2021)
                                                                                                                            .WithTypeValue("JANUARY")
                                                                                                                            .WithPeriodType(PeriodType.CalendarMonth)
                                                                                                                            .WithDistributionPeriod("dp1")),
                                                                                                   NewDeliveryProfilePeriod(dpp => dpp.WithOccurrence(1)
                                                                                                                            .WithValue(20)
                                                                                                                            .WithYear(2022)
                                                                                                                            .WithTypeValue("JANUARY")
                                                                                                                            .WithPeriodType(PeriodType.CalendarMonth)
                                                                                                                            .WithDistributionPeriod("dp2"))));

            GivenThePublishedProvider(publishedProvider);
            AndThePublishedProviderCreateVersionRequest(publishedProvider, publishedProviderCreateVersionRequest);
            AndTheNewCreatedPublishedProvider(publishedProvider, publishedProviderCreateVersionRequest);
            AndTheProfileVariationPointers(profileVariationPointers, specificationId);
            AndTheReProfileRequest(existingPublishedProviderVersion.SpecificationId,
                                   existingPublishedProviderVersion.FundingStreamId,
                                   existingPublishedProviderVersion.FundingPeriodId,
                                   existingPublishedProviderVersion.ProviderId,
                                   profilePatternKey.FundingLineCode,
                                   profilePatternKey.Key,
                                   ProfileConfigurationType.Custom,
                                   fundingLine.Value,
                                   reProfileRequest);
            AndTheReProfileResponse(reProfileRequest, reProfileResponse);
            AndTheProfileFundingLines(profilePatternKey);
            AndTheSavePublishedProviderVersionResponse(HttpStatusCode.OK, existingPublishedProviderVersion);
            AndTheUpsertPublishedProviderResponse(HttpStatusCode.OK, publishedProvider);

            IActionResult result = await WhenProfilePatternKeyIsAssigned(_fundingStreamId, _fundingPeriodId, _providerId, profilePatternKey);

            ThenResultShouldBe(result, HttpStatusCode.OK);
            AndProfilePatternKeyWasUpdated(existingPublishedProviderVersion, profilePatternKey);

            fundingLine.DistributionPeriods
            .Count()
            .Should()
            .Be(2);

            DistributionPeriod firstDistributionPeriod = fundingLine.DistributionPeriods.SingleOrDefault(_ => _.DistributionPeriodId == "dp1");

            firstDistributionPeriod.ProfilePeriods
            .Should()
            .BeEquivalentTo(NewProfilePeriod(_ => _.WithAmount(10)
                                             .WithTypeValue("JANUARY")
                                             .WithDistributionPeriodId("dp1")
                                             .WithType(ProfilePeriodType.CalendarMonth)
                                             .WithOccurence(1)
                                             .WithYear(2021)));

            DistributionPeriod secondDistributionPeriod = fundingLine.DistributionPeriods.SingleOrDefault(_ => _.DistributionPeriodId == "dp2");

            secondDistributionPeriod.ProfilePeriods
            .Should()
            .BeEquivalentTo(NewProfilePeriod(_ => _.WithAmount(20)
                                             .WithTypeValue("JANUARY")
                                             .WithDistributionPeriodId("dp2")
                                             .WithType(ProfilePeriodType.CalendarMonth)
                                             .WithOccurence(1)
                                             .WithYear(2022)));

            existingPublishedProviderVersion.CarryOvers
            .Should()
            .BeEquivalentTo(NewCarryOver(_ => _.WithAmount(carryOverAmount)
                                         .WithFundingLineCode(fundingLineCode)
                                         .WithType(ProfilingCarryOverType.CustomProfile)));

            AndThePublishedProviderWasProcessed(publishedProvider);
            AndTheProfilingAuditWasUpdatedForTheFundingLine(publishedProvider, profilePatternKey.FundingLineCode, _author);
        }
コード例 #5
0
        private void SetProfilePeriodsOnPublishedProvider(string fundingLineCode, Table table, PublishedProvider publishedProvider)
        {
            publishedProvider
            .Should()
            .NotBeNull();

            FundingLine fundingLine =
                publishedProvider.Current.FundingLines.SingleOrDefault(f =>
                                                                       f.FundingLineCode == fundingLineCode && f.Type == FundingLineType.Payment);

            fundingLine
            .Should()
            .NotBeNull($"funding line should exist with code '{fundingLineCode}'");

            Dictionary <string, DistributionPeriod> distributionPeriods = new Dictionary <string, DistributionPeriod>();

            if (fundingLine.DistributionPeriods.AnyWithNullCheck())
            {
                foreach (DistributionPeriod distributionPeriod in fundingLine.DistributionPeriods)
                {
                    distributionPeriods.Add(distributionPeriod.DistributionPeriodId, distributionPeriod);
                }
            }

            IEnumerable <ProfilePeriod> profilePeriods = table.CreateSet <ProfilePeriod>();

            foreach (ProfilePeriod profilePeriod in profilePeriods)
            {
                distributionPeriods
                .Should()
                .ContainKey(profilePeriod.DistributionPeriodId, "expected distribution period to exist to add profile to");

                DistributionPeriod distributionPeriod = distributionPeriods[profilePeriod.DistributionPeriodId];

                List <ProfilePeriod> profilePeriodsForDistributionPeriod = new List <ProfilePeriod>();
                if (distributionPeriod.ProfilePeriods.AnyWithNullCheck())
                {
                    profilePeriodsForDistributionPeriod.AddRange(distributionPeriod.ProfilePeriods);
                }

                profilePeriodsForDistributionPeriod.Add(profilePeriod);

                distributionPeriod.ProfilePeriods = profilePeriodsForDistributionPeriod;
            }

            _publishFundingStepContext.ProfilingInMemoryClient.AddFundingValueProfileSplit(
                (fundingLine.Value,
                 publishedProvider.Current.FundingStreamId,
                 publishedProvider.Current.FundingPeriodId,
                 fundingLine.FundingLineCode,
                 profilePeriods.Select(_ =>
                                       new Common.ApiClient.Profiling.Models.ProfilingPeriod
            {
                DistributionPeriod = _.DistributionPeriodId,
                Occurrence = _.Occurrence,
                Type = _.Type.ToString(),
                Period = _.TypeValue,
                Value = _.ProfiledValue,
                Year = _.Year
            }),
                 distributionPeriods.Values.Select(_ =>
                                                   new Common.ApiClient.Profiling.Models.DistributionPeriods
            {
                DistributionPeriodCode = _.DistributionPeriodId,
                Value = _.Value
            })));
        }