public async Task ReturnsChangesWhenPreviousProfileChanges() { string fundingLineName = "FundingLineName"; IEnumerable <FundingLineChange> actualFundingLineChanges = new List <FundingLineChange> { new FundingLineChange { FundingLineName = fundingLineName } }; GivenProviderExists(); GivenSpecificationExists(); GivenGetPreviousProfilesForSpecificationForProviderForFundingLine( HttpStatusCode.OK, actualFundingLineChanges); IActionResult actualResult = await WhenGetPreviousProfilesForSpecificationForProviderForFundingLine(); actualResult.Should().BeOfType <OkObjectResult>(); OkObjectResult okObjectResult = actualResult as OkObjectResult; okObjectResult.Should().NotBeNull(); okObjectResult.Value.Should().NotBeNull(); okObjectResult.Value.Should().BeOfType <FundingLineChangesViewModel>(); FundingLineChangesViewModel viewModel = okObjectResult.Value as FundingLineChangesViewModel; viewModel.ProviderName.Should().Be("Provider name"); viewModel.SpecificationName.Should().Be("Spec name"); viewModel.FundingPeriodName.Should().Be("Funding period name"); IEnumerable <FundingLineChange> fundingLineChanges = viewModel.FundingLineChanges; fundingLineChanges.Count().Should().Be(1); FundingLineChange fundingLineChange = fundingLineChanges.FirstOrDefault(); fundingLineChange.Should().NotBeNull(); fundingLineChange.FundingLineName.Should().Be(fundingLineName); }
public async Task <IActionResult> GetPreviousProfilesForSpecificationForProviderForFundingLine( string specificationId, string providerId, string fundingStreamId, string fundingLineCode) { List <FundingLineChange> fundingLineChanges = new List <FundingLineChange>(); IEnumerable <PublishedProviderVersion> publishedProviderVersions = await _resilience.ExecuteAsync(() => _publishedFunding.GetPublishedProviderVersionsForApproval( specificationId, fundingStreamId, providerId)); PublishedProviderVersion latestPublishedProviderVersion = publishedProviderVersions.FirstOrDefault(); if (latestPublishedProviderVersion == null) { return(new NotFoundResult()); } IEnumerable <PublishedProviderVersion> historyPublishedProviderVersions = publishedProviderVersions.Except(new[] { latestPublishedProviderVersion }); IEnumerable <FundingStream> fundingStreams = await _policiesService.GetFundingStreams(); foreach (PublishedProviderVersion publishedProviderVersion in historyPublishedProviderVersions) { if (publishedProviderVersion.GetFundingLineTotal(fundingLineCode) != latestPublishedProviderVersion.GetFundingLineTotal(fundingLineCode) || publishedProviderVersion.GetCarryOverTotalForFundingLine(fundingLineCode) != latestPublishedProviderVersion.GetCarryOverTotalForFundingLine(fundingLineCode)) { TemplateMetadataDistinctFundingLinesContents templateMetadataDistinctFundingLinesContents = await _policiesService.GetDistinctTemplateMetadataFundingLinesContents( fundingStreamId, latestPublishedProviderVersion.FundingPeriodId, latestPublishedProviderVersion.TemplateVersion); FundingLineChange fundingLineChange = new FundingLineChange { FundingLineTotal = latestPublishedProviderVersion.GetFundingLineTotal(fundingLineCode), PreviousFundingLineTotal = publishedProviderVersion.GetFundingLineTotal(fundingLineCode), FundingStreamName = fundingStreams.SingleOrDefault(_ => _.Id == latestPublishedProviderVersion.FundingStreamId)?.Name, FundingLineName = templateMetadataDistinctFundingLinesContents?.FundingLines? .FirstOrDefault(_ => _.FundingLineCode == fundingLineCode)?.Name, CarryOverAmount = latestPublishedProviderVersion.GetCarryOverTotalForFundingLine(fundingLineCode), LastUpdatedUser = latestPublishedProviderVersion.GetLatestFundingLineUser(fundingLineCode), LastUpdatedDate = latestPublishedProviderVersion.GetLatestFundingLineDate(fundingLineCode), }; ProfileTotal[] profileTotals = new PaymentFundingLineProfileTotals(latestPublishedProviderVersion, fundingLineCode).ToArray(); FundingDate fundingDate = await _policiesService.GetFundingDate( fundingStreamId, latestPublishedProviderVersion.FundingPeriodId, fundingLineCode); for (int index = 0; index < profileTotals.Count(); index++) { ProfileTotal profileTotal = profileTotals[index]; profileTotal.InstallmentNumber = index + 1; profileTotal.ActualDate = fundingDate?.Patterns?.SingleOrDefault(_ => _.Occurrence == profileTotal.Occurrence && _.Period == profileTotal.TypeValue && _.PeriodYear == profileTotal.Year)?.PaymentDate; } fundingLineChange.ProfileTotals = profileTotals; fundingLineChanges.Add(fundingLineChange); } latestPublishedProviderVersion = publishedProviderVersion; } return(new OkObjectResult(fundingLineChanges)); }