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); }
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); }
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 }))); }