public void SetVersion_GivenResultIsInUpdatedStatusAndPublished_IncreasesMajorResetsMinor() { //Arrange PublishedAllocationLineResultVersion allocationLineResultVersion = new PublishedAllocationLineResultVersion { Status = AllocationLineStatus.Published, Major = 1, Minor = 5 }; PublishedAllocationLineLogicalResultVersionService service = new PublishedAllocationLineLogicalResultVersionService(); //Act service.SetVersion(allocationLineResultVersion); //Assert allocationLineResultVersion .Major .Should() .Be(2); allocationLineResultVersion .Minor .Should() .Be(0); }
public void SetVersion_GivenNewlyHeldResult_IncreasesMinorVesionToOne() { //Arrange PublishedAllocationLineResultVersion allocationLineResultVersion = new PublishedAllocationLineResultVersion { Status = AllocationLineStatus.Held, Major = 0, Minor = 0 }; PublishedAllocationLineLogicalResultVersionService service = new PublishedAllocationLineLogicalResultVersionService(); //Act service.SetVersion(allocationLineResultVersion); //Assert allocationLineResultVersion .Major .Should() .Be(0); allocationLineResultVersion .Minor .Should() .Be(1); }
public void SetVersion_GivenResultIsInApprovedStatus_IncreasesMinorVesion() { //Arrange PublishedAllocationLineResultVersion allocationLineResultVersion = new PublishedAllocationLineResultVersion { Status = AllocationLineStatus.Approved, Major = 0, Minor = 5 }; PublishedAllocationLineLogicalResultVersionService service = new PublishedAllocationLineLogicalResultVersionService(); //Act service.SetVersion(allocationLineResultVersion); //Assert allocationLineResultVersion .Major .Should() .Be(0); allocationLineResultVersion .Minor .Should() .Be(6); }
public void GetPublishedProviderResultByVersionId_GivenVersionFoundButResultCanbnotBeFound_ReturnsNull() { //Arrange string id = "id-1"; string entityId = "entity-id-1"; PublishedAllocationLineResultVersion version = new PublishedAllocationLineResultVersion { PublishedProviderResultId = entityId, FeedIndexId = id }; IPublishedProviderResultsRepository publishedProviderResultsRepository = CreatePublishedProviderResultsRepository(); publishedProviderResultsRepository .GetPublishedProviderResultVersionForFeedIndexId(Arg.Is(id)) .Returns(version); publishedProviderResultsRepository .GetPublishedProviderResultForId(Arg.Is(entityId)) .Returns((PublishedProviderResult)null); PublishedResultsService publishedResultsService = CreateResultsService(publishedProviderResultsRepository: publishedProviderResultsRepository); //Act PublishedProviderResult result = publishedResultsService.GetPublishedProviderResultByVersionId(id); //Assert result .Should() .BeNull(); }
public void SetVersion_GivenResultHasBeenSetToPublish_IncreasesMajorVesionandSetsMinorToZero() { //Arrange PublishedAllocationLineResultVersion allocationLineResultVersion = new PublishedAllocationLineResultVersion { Status = AllocationLineStatus.Published, Major = 0, Minor = 5 }; PublishedAllocationLineLogicalResultVersionService service = new PublishedAllocationLineLogicalResultVersionService(); //Act service.SetVersion(allocationLineResultVersion); //Assert allocationLineResultVersion .Major .Should() .Be(1); allocationLineResultVersion .Minor .Should() .Be(0); }
public void GetPublishedProviderResultVersionById_GivenVersionWasFound_ReturnsVersion() { //Arrange string feedIndexId = "id-1"; PublishedAllocationLineResultVersion publishedAllocationLineResultVersion = new PublishedAllocationLineResultVersion(); IPublishedProviderResultsRepository publishedProviderResultsRepository = CreatePublishedProviderResultsRepository(); publishedProviderResultsRepository .GetPublishedProviderResultVersionForFeedIndexId(Arg.Is(feedIndexId)) .Returns(publishedAllocationLineResultVersion); PublishedResultsService publishedResultsService = CreateResultsService(publishedProviderResultsRepository: publishedProviderResultsRepository); //Act PublishedAllocationLineResultVersion result = publishedResultsService.GetPublishedProviderResultVersionById(feedIndexId); //Assert result .Should() .NotBeNull(); result .Should() .Be(publishedAllocationLineResultVersion); }
public void SetVersion(PublishedAllocationLineResultVersion allocationLineResultVersion) { Guard.ArgumentNotNull(allocationLineResultVersion, nameof(allocationLineResultVersion)); int major = allocationLineResultVersion.Major; int minor = allocationLineResultVersion.Minor; AllocationLineStatus allocationLineStatus = allocationLineResultVersion.Status; if (allocationLineStatus == AllocationLineStatus.Published && major == 0) { major = 1; minor = 0; } else if (allocationLineStatus == AllocationLineStatus.Published && major > 0) { major += 1; minor = 0; } else { minor += 1; } allocationLineResultVersion.Major = major; allocationLineResultVersion.Minor = minor; }
public async Task GetPublishedProviderResultByAllocationResultId_GivenVersionAndFoundInHistory_ReturnsResult() { //Arrange string allocationResultId = "12345"; int version = 5; PublishedProviderResult publishedProviderResult = new PublishedProviderResult { FundingStreamResult = new PublishedFundingStreamResult { AllocationLineResult = new PublishedAllocationLineResult { Current = new PublishedAllocationLineResultVersion { Version = 2 } } } }; PublishedAllocationLineResultVersion publishedAllocationLineResultVersion = new PublishedAllocationLineResultVersion { Version = 5 }; IPublishedProviderResultsRepository publishedProviderResultsRepository = CreatePublishedProviderResultsRepository(); publishedProviderResultsRepository .GetPublishedProviderResultForIdInPublishedState(Arg.Is(allocationResultId)) .Returns(publishedProviderResult); IVersionRepository <PublishedAllocationLineResultVersion> versionRepository = CreatePublishedProviderResultsVersionRepository(); versionRepository .GetVersion(Arg.Is(allocationResultId), Arg.Is(version)) .Returns(publishedAllocationLineResultVersion); PublishedResultsService service = CreateResultsService(publishedProviderResultsRepository: publishedProviderResultsRepository, publishedProviderResultsVersionRepository: versionRepository); //Act PublishedProviderResult result = await service.GetPublishedProviderResultByAllocationResultId(allocationResultId, version); //Assert result .Should() .NotBeNull(); result .FundingStreamResult .AllocationLineResult .Current .Version .Should() .Be(5); }
public void GetPublishedProviderResultByVersionId_GivenResultFound_ReturnsResult() { //Arrange string id = "id-1"; string entityId = "entity-id-1"; PublishedAllocationLineResultVersion version = new PublishedAllocationLineResultVersion { PublishedProviderResultId = entityId, FeedIndexId = id }; PublishedProviderResult publishedProviderResult = new PublishedProviderResult { FundingStreamResult = new PublishedFundingStreamResult { AllocationLineResult = new PublishedAllocationLineResult() } }; IPublishedProviderResultsRepository publishedProviderResultsRepository = CreatePublishedProviderResultsRepository(); publishedProviderResultsRepository .GetPublishedProviderResultVersionForFeedIndexId(Arg.Is(id)) .Returns(version); publishedProviderResultsRepository .GetPublishedProviderResultForId(Arg.Is(entityId)) .Returns(publishedProviderResult); PublishedResultsService publishedResultsService = CreateResultsService(publishedProviderResultsRepository: publishedProviderResultsRepository); //Act PublishedProviderResult result = publishedResultsService.GetPublishedProviderResultByVersionId(id); //Assert result .Should() .NotBeNull(); result .FundingStreamResult .AllocationLineResult .Current .Should() .Be(version); }
private IEnumerable <PublishedFundingStreamResult> AssembleFundingStreamResults(ProviderResult providerResult, SpecificationCurrentVersion specificationCurrentVersion, Reference author, IEnumerable <FundingStream> allFundingStreams) { IList <PublishedFundingStreamResult> publishedFundingStreamResults = new List <PublishedFundingStreamResult>(); Dictionary <string, PublishedAllocationLineDefinition> publishedAllocationLines = new Dictionary <string, PublishedAllocationLineDefinition>(); foreach (Reference fundingStreamReference in specificationCurrentVersion.FundingStreams) { FundingStream fundingStream = allFundingStreams.FirstOrDefault(m => m.Id == fundingStreamReference.Id); if (fundingStream == null) { throw new NonRetriableException($"Failed to find a funding stream for id: {fundingStreamReference.Id}"); } PublishedFundingStreamDefinition publishedFundingStreamDefinition = _mapper.Map <PublishedFundingStreamDefinition>(fundingStream); List <PublishedProviderCalculationResult> publishedProviderCalculationResults = new List <PublishedProviderCalculationResult>(providerResult.CalculationResults.Count()); foreach (CalculationResult calculationResult in providerResult.CalculationResults) { (Policy policy, Policy parentPolicy, Calculation calculation) = FindPolicy(calculationResult.CalculationSpecification?.Id, specificationCurrentVersion.Policies); if (calculation == null) { throw new NonRetriableException($"Calculation specification not found in specification. Calculation Spec Id ='{calculationResult?.CalculationSpecification?.Id}'"); } if (calculation.CalculationType == CalculationType.Number && !calculation.IsPublic) { continue; } PublishedProviderCalculationResult publishedProviderCalculationResult = new PublishedProviderCalculationResult() { CalculationSpecification = calculationResult.CalculationSpecification, AllocationLine = calculationResult.AllocationLine, IsPublic = calculation.IsPublic, CalculationType = ConvertCalculationType(calculationResult.CalculationType), Value = calculationResult.Value, CalculationVersion = calculationResult.Version }; if (policy != null) { publishedProviderCalculationResult.Policy = new PolicySummary(policy.Id, policy.Name, policy.Description); } if (parentPolicy != null) { publishedProviderCalculationResult.ParentPolicy = new PolicySummary(parentPolicy.Id, parentPolicy.Name, parentPolicy.Description); } publishedProviderCalculationResults.Add(publishedProviderCalculationResult); } IEnumerable <IGrouping <string, CalculationResult> > allocationLineGroups = providerResult .CalculationResults .Where(c => c.CalculationType == Models.Calcs.CalculationType.Funding && c.Value.HasValue && c.AllocationLine != null && !string.IsNullOrWhiteSpace(c.AllocationLine.Id)) .GroupBy(m => m.AllocationLine.Id); foreach (IGrouping <string, CalculationResult> allocationLineResultGroup in allocationLineGroups) { PublishedAllocationLineDefinition publishedAllocationLine; if (!publishedAllocationLines.TryGetValue(allocationLineResultGroup.Key, out publishedAllocationLine)) { AllocationLine allocationLine = fundingStream.AllocationLines.FirstOrDefault(m => m.Id == allocationLineResultGroup.Key); if (allocationLine != null) { publishedAllocationLine = _mapper.Map <PublishedAllocationLineDefinition>(allocationLine); publishedAllocationLines.Add(allocationLineResultGroup.Key, publishedAllocationLine); } } if (publishedAllocationLine != null) { PublishedFundingStreamResult publishedFundingStreamResult = new PublishedFundingStreamResult { FundingStream = publishedFundingStreamDefinition, FundingStreamPeriod = $"{fundingStream.Id}{specificationCurrentVersion.FundingPeriod.Id}", DistributionPeriod = $"{fundingStream.PeriodType.Id}{specificationCurrentVersion.FundingPeriod.Id}" }; PublishedAllocationLineResultVersion publishedAllocationLineResultVersion = new PublishedAllocationLineResultVersion { Author = author, Date = DateTimeOffset.Now, Status = AllocationLineStatus.Held, Value = allocationLineResultGroup.Sum(m => m.Value), Provider = providerResult.Provider, SpecificationId = specificationCurrentVersion.Id, ProviderId = providerResult.Provider.Id, Calculations = publishedProviderCalculationResults.Where(c => c.AllocationLine == null || string.Equals(c.AllocationLine.Id, publishedAllocationLine.Id, StringComparison.InvariantCultureIgnoreCase)), }; publishedFundingStreamResult.AllocationLineResult = new PublishedAllocationLineResult { AllocationLine = publishedAllocationLine, Current = publishedAllocationLineResultVersion }; publishedFundingStreamResults.Add(publishedFundingStreamResult); } } } return(publishedFundingStreamResults); }