コード例 #1
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #6
0
        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);
        }