public async Task GetCurrentProviderMetadataForAllFundingStreams_FetchesTheMetadataForAllCurrentProviderVersions() { string fundingStreamId1 = NewRandomString(); string providerVersionId1 = NewRandomString(); int? providerSnapshotId1 = NewRandomNumber(); CurrentProviderVersion currentProviderVersion1 = NewCurrentProviderVersion(_ => _.ForFundingStreamId(fundingStreamId1) .WithProviderVersionId(providerVersionId1) .WithProviderSnapshotId(providerSnapshotId1)); string fundingStreamId2 = NewRandomString(); string providerVersionId2 = NewRandomString(); int? providerSnapshotId2 = NewRandomNumber(); CurrentProviderVersion currentProviderVersion2 = NewCurrentProviderVersion(_ => _.ForFundingStreamId(fundingStreamId2) .WithProviderVersionId(providerVersionId2) .WithProviderSnapshotId(providerSnapshotId2)); CurrentProviderVersionMetadata expectedMetadata1 = _mapper.Map <CurrentProviderVersionMetadata>(currentProviderVersion1); CurrentProviderVersionMetadata expectedMetadata2 = _mapper.Map <CurrentProviderVersionMetadata>(currentProviderVersion2); GivenAllCurrentProviderVersions(currentProviderVersion1, currentProviderVersion2); IActionResult result = await WhenGetCurrentProviderMetadataForAllFundingStreams(); IEnumerable <CurrentProviderVersionMetadata> actualMetadata = result .Should() .BeOfType <OkObjectResult>() .Which .Value.As <IEnumerable <CurrentProviderVersionMetadata> >(); actualMetadata.Count().Should().Be(2); actualMetadata.Single(x => x.FundingStreamId == fundingStreamId1) .Should().BeEquivalentTo(expectedMetadata1); actualMetadata.Single(x => x.FundingStreamId == fundingStreamId2) .Should().BeEquivalentTo(expectedMetadata2); }
public void SholdMapCurrentProviderVersionToCurrentProviderVersionMetadata() { // Arrange string fundingStreamId = NewRandomString(); CurrentProviderVersion currentProviderVersion = NewCurrentProviderVersion(_ => _.ForFundingStreamId(fundingStreamId)); MapperConfiguration config = new MapperConfiguration(c => c.AddProfile <ProviderVersionsMappingProfile>()); IMapper mapper = config.CreateMapper(); // Act CurrentProviderVersionMetadata metadata = mapper.Map <CurrentProviderVersionMetadata>(currentProviderVersion); // Assert metadata .FundingStreamId .Should() .Be(fundingStreamId); metadata .ProviderVersionId .Should() .Be(currentProviderVersion.ProviderVersionId); metadata .ProviderSnapshotId .Should() .Be(currentProviderVersion.ProviderSnapshotId); }
public async Task <IActionResult> GetCurrentProviderMetadataForFundingStream(string fundingStreamId) { Guard.IsNullOrWhiteSpace(fundingStreamId, nameof(fundingStreamId)); CurrentProviderVersion currentProviderVersion = await GetCurrentProviderVersion(fundingStreamId); if (currentProviderVersion == null) { LogError("Unable to get the current provider for funding stream. " + $"No current provider version information located for {fundingStreamId}"); return(new NotFoundResult()); } CurrentProviderVersionMetadata metadata = _mapper.Map <CurrentProviderVersionMetadata>(currentProviderVersion); return(new OkObjectResult(metadata)); }
public async Task GetCurrentProviderMetadataForFundingStream_FetchesTheMetadataForCurrentProviderVersion() { string fundingStreamId = NewRandomString(); string providerVersionId = NewRandomString(); int? providerSnapshotId = NewRandomNumber(); CurrentProviderVersion currentProviderVersion = NewCurrentProviderVersion(_ => _.ForFundingStreamId(fundingStreamId) .WithProviderVersionId(providerVersionId) .WithProviderSnapshotId(providerSnapshotId)); GivenTheCurrentProviderVersionForFundingStream(fundingStreamId, currentProviderVersion); IActionResult result = await WhenGetCurrentProviderMetadataForFundingStream(fundingStreamId); CurrentProviderVersionMetadata actualMetadata = result .Should() .BeOfType <OkObjectResult>() .Which .Value.As <CurrentProviderVersionMetadata>(); actualMetadata.FundingStreamId.Should().Be(fundingStreamId); actualMetadata.ProviderVersionId.Should().Be(providerVersionId); actualMetadata.ProviderSnapshotId.Should().Be(providerSnapshotId); }
public async Task CheckProviderVersionUpdate() { List <FundingConfiguration> fundingConfigurations = new List <FundingConfiguration>(); Dictionary <string, int> fundingStreamsLatestProviderSnapshotIds = new Dictionary <string, int>(); IEnumerable <FundingStream> fundingStreams = await GetFundingStreams(); IEnumerable <CurrentProviderVersionMetadata> metadataForAllFundingStreams = await GetMetadataForAllFundingStreams(); foreach (FundingStream fundingStream in fundingStreams) { if (fundingStream == null) { continue; } CurrentProviderVersionMetadata currentProviderVersionMetadata = metadataForAllFundingStreams.SingleOrDefault(_ => _.FundingStreamId == fundingStream.Id); if (currentProviderVersionMetadata == null) { string errorMessage = $"Unable to retrieve provider snapshots for funding stream with ID: {fundingStream?.Id}"; _logger.Error(errorMessage); continue; } IEnumerable <FundingConfiguration> fundingStreamConfigurations = await GetFundingConfigurationsByFundingStreamId(fundingStream.Id); fundingConfigurations.AddRange(fundingStreamConfigurations); IEnumerable <ProviderSnapshot> providerSnapshots = await GetLatestProviderSnapshots(); if (providerSnapshots.IsNullOrEmpty()) { continue; } ProviderSnapshot latestProviderSnapshot = providerSnapshots.FirstOrDefault(x => x.FundingStreamCode == fundingStream.Id); if (latestProviderSnapshot == null) { continue; } int latestProviderSnapshotId = latestProviderSnapshot.ProviderSnapshotId; int?currentProviderSnapshotId = currentProviderVersionMetadata.ProviderSnapshotId; if (currentProviderSnapshotId != latestProviderSnapshotId) { fundingStreamsLatestProviderSnapshotIds.Add(fundingStream.Id, latestProviderSnapshotId); _logger.Information( $"Triggering Update Specification Provider Version for funding stream ID: {fundingStream.Id}. " + $"Latest provider snapshot ID: {latestProviderSnapshotId} " + $"Current provider version snaphot ID: {currentProviderSnapshotId}"); } } if (!fundingStreamsLatestProviderSnapshotIds.Any()) { return; } IEnumerable <SpecificationSummary> specificationSummaries = await GetSpecificationsWithProviderVersionUpdatesAsUseLatest(); await EditSpecifications(fundingConfigurations, fundingStreamsLatestProviderSnapshotIds, specificationSummaries); }
public async Task EditSpecification_GivenChangesAndNoCurrentProviderVersionMetatdataForFundingStream_ReturnServerError() { //Arrange bool withRunCalculationEngineAfterCoreProviderUpdate = true; _specification.Current.CoreProviderVersionUpdates = CoreProviderVersionUpdates.Manual; SpecificationEditModel specificationEditModel = new SpecificationEditModel { FundingPeriodId = "fp10", Name = "new spec name", ProviderVersionId = _specification.Current.ProviderVersionId, AssignedTemplateIds = new Dictionary <string, string>(), CoreProviderVersionUpdates = CoreProviderVersionUpdates.UseLatest }; Reference user = new Reference(); SpecificationVersion newSpecVersion = _specification.Current.DeepCopy(useCamelCase: false); newSpecVersion.Name = specificationEditModel.Name; newSpecVersion.FundingPeriod.Id = specificationEditModel.FundingPeriodId; newSpecVersion.FundingStreams = new[] { new Reference { Id = "fs11" } }; newSpecVersion.FundingPeriod.Name = "p10"; newSpecVersion.Author = user; newSpecVersion.Description = specificationEditModel.Description; string specFundingStreamId = _specification.Current.FundingStreams.FirstOrDefault().Id; int providerSnapshotId = NewRandomInt(); CurrentProviderVersionMetadata currentProviderVersionMetadata = new CurrentProviderVersionMetadata { FundingStreamId = specFundingStreamId, ProviderSnapshotId = providerSnapshotId }; AndGetFundingConfiguration( specFundingStreamId, specificationEditModel.FundingPeriodId, withRunCalculationEngineAfterCoreProviderUpdate: withRunCalculationEngineAfterCoreProviderUpdate); _providersApiClient.GetCurrentProviderMetadataForFundingStream(specFundingStreamId) .Returns(new ApiResponse <CurrentProviderVersionMetadata>(HttpStatusCode.OK, currentProviderVersionMetadata)); SpecificationsService service = CreateSpecificationsService(newSpecVersion); string correlationId = NewRandomString(); SpecificationVersion previousSpecificationVersion = _specification.Current; //Act await service.EditSpecification(SpecificationId, specificationEditModel, user, correlationId); await _specificationIndexer .Received(1) .Index(Arg.Is <Specification>(_ => ReferenceEquals(_.Current, newSpecVersion))); await _cacheProvider .Received(1) .RemoveAsync <SpecificationSummary>(Arg.Is($"{CacheKeys.SpecificationSummaryById}{_specification.Id}")); await _messengerService .Received(1) .SendToTopic(Arg.Is(ServiceBusConstants.TopicNames.EditSpecification), Arg.Is <SpecificationVersionComparisonModel>( m => m.Id == SpecificationId && m.Current.Name == "new spec name" && m.Previous.Name == "Spec name" ), Arg.Any <IDictionary <string, string> >(), Arg.Is(true)); await _versionRepository .Received(1) .SaveVersion(Arg.Is(newSpecVersion)); await _templateVersionChangedHandler .Received(1) .HandleTemplateVersionChanged(Arg.Is(previousSpecificationVersion), Arg.Any <SpecificationVersion>(), Arg.Is(specificationEditModel.AssignedTemplateIds), Arg.Is(user), Arg.Is(correlationId)); await _editSpecificationJobActions .Received(1) .Run(Arg.Is <SpecificationVersion>( m => !string.IsNullOrWhiteSpace(m.EntityId) && m.Name == specificationEditModel.Name), Arg.Any <Reference>(), Arg.Any <string>(), true, withRunCalculationEngineAfterCoreProviderUpdate); }