public void TestBaseSetUp()
        {
            _validationResult = new ValidationResult();

            SpecificationId = NewRandomString();
            string providerId = NewRandomString();

            ProviderIds = new[] { providerId };

            FundingStreamId          = NewRandomString();
            FundingPeriodId          = NewRandomString();
            CorrelationId            = NewRandomString();
            User                     = NewUser();
            Jobs                     = Substitute.For <TJobCreation>();
            SpecificationIdValidator = Substitute.For <ISpecificationIdServiceRequestValidator>();
            ProviderIdsValidator     = Substitute.For <IPublishedProviderIdsServiceRequestValidator>();

            SpecificationIdValidator.Validate(SpecificationId)
            .Returns(_validationResult);
            ProviderIdsValidator.Validate(Arg.Is <string[]>(_ => _.SequenceEqual(ProviderIds)))
            .Returns(_validationResult);

            Specifications  = Substitute.For <ISpecificationsApiClient>();
            ProviderService = Substitute.For <IProviderService>();

            ResiliencePolicies = new ResiliencePolicies
            {
                SpecificationsRepositoryPolicy = Polly.Policy.NoOpAsync(),
                PublishedFundingRepository     = Polly.Policy.NoOpAsync()
            };

            FundingConfigurationService = Substitute.For <IFundingConfigurationService>();
        }
Esempio n. 2
0
        public async Task <IActionResult> PublishBatchProvidersFunding(string specificationId,
                                                                       PublishedProviderIdsRequest publishedProviderIdsRequest,
                                                                       Reference user,
                                                                       string correlationId)
        {
            ValidationResult specificationIdValidationResult = SpecificationIdValidator.Validate(specificationId);

            if (!specificationIdValidationResult.IsValid)
            {
                return(specificationIdValidationResult.AsBadRequest());
            }

            ValidationResult publishedProviderIdsValidationResult = PublishedProviderIdsValidator.Validate(publishedProviderIdsRequest.PublishedProviderIds.ToArray());

            if (!publishedProviderIdsValidationResult.IsValid)
            {
                return(publishedProviderIdsValidationResult.AsBadRequest());
            }

            IActionResult actionResult = await IsSpecificationReadyForPublish(specificationId, ApprovalMode.Batches);

            if (!actionResult.IsOk())
            {
                return(actionResult);
            }

            await FilterOutPublishedProvidersInError(publishedProviderIdsRequest);

            ApiJob job = await _createBatchPublishProviderFundingJobs.CreateJob(specificationId, user, correlationId, messageBody : JsonExtensions.AsJson(publishedProviderIdsRequest), compress : true);

            return(ProcessJobResponse(job, specificationId, JobConstants.DefinitionNames.PublishBatchProviderFundingJob));
        }
        public async Task <IActionResult> CreateRefreshFundingJob(string specificationId,
                                                                  Reference user,
                                                                  string correlationId)
        {
            ValidationResult validationResult = SpecificationIdValidator.Validate(specificationId);

            if (!validationResult.IsValid)
            {
                return(validationResult.AsBadRequest());
            }

            ApiResponse <ApiSpecificationSummary> specificationIdResponse =
                await ResiliencePolicy.ExecuteAsync(() => Specifications.GetSpecificationSummaryById(specificationId));

            ApiSpecificationSummary specificationSummary = specificationIdResponse.Content;

            if (specificationSummary == null)
            {
                return(new NotFoundResult());
            }

            SpecificationFundingStatus chooseCheck = await _specificationFundingStatusService.CheckChooseForFundingStatus(specificationSummary);

            if (chooseCheck == SpecificationFundingStatus.SharesAlreadyChosenFundingStream)
            {
                return(new ConflictResult());
            }

            IDictionary <string, Provider> scopedProviders = await _providerService.GetScopedProvidersForSpecification(specificationSummary.Id, specificationSummary.ProviderVersionId);

            // Check prerequisites for this specification to be chosen/refreshed
            IPrerequisiteChecker prerequisiteChecker = _prerequisiteCheckerLocator.GetPreReqChecker(PrerequisiteCheckerType.Refresh);

            try
            {
                await prerequisiteChecker.PerformChecks(
                    specificationSummary,
                    null,
                    Array.Empty <PublishedProvider>(),
                    scopedProviders?.Values);
            }
            catch (JobPrereqFailedException ex)
            {
                return(new BadRequestObjectResult(new [] { $"Prerequisite check for refresh failed {ex.Message}" }.ToModelStateDictionary()));
            }

            ApiJob refreshFundingJob = await _refreshFundingJobs.CreateJob(specificationId, user, correlationId);

            Guard.ArgumentNotNull(refreshFundingJob, nameof(refreshFundingJob), "Failed to create RefreshFundingJob");

            JobCreationResponse jobCreationResponse = new JobCreationResponse()
            {
                JobId = refreshFundingJob.Id,
            };

            return(new OkObjectResult(jobCreationResponse));
        }
        public async Task <IActionResult> ValidateSpecificationForRefresh(string specificationId)
        {
            List <string> prereqErrors = new List <string>();

            ValidationResult validationResult = SpecificationIdValidator.Validate(specificationId);

            if (!validationResult.IsValid)
            {
                return(validationResult.AsBadRequest());
            }

            ApiResponse <ApiSpecificationSummary> specificationIdResponse =
                await ResiliencePolicy.ExecuteAsync(() => Specifications.GetSpecificationSummaryById(specificationId));

            ApiSpecificationSummary specificationSummary = specificationIdResponse.Content;

            if (specificationSummary == null)
            {
                return(new NotFoundResult());
            }

            IDictionary <string, Provider> scopedProviders = await _providerService.GetScopedProvidersForSpecification(specificationSummary.Id, specificationSummary.ProviderVersionId);

            IPrerequisiteChecker prerequisiteChecker = _prerequisiteCheckerLocator.GetPreReqChecker(PrerequisiteCheckerType.Refresh);

            try
            {
                await prerequisiteChecker.PerformChecks(
                    specificationSummary,
                    null,
                    Array.Empty <PublishedProvider>(),
                    scopedProviders?.Values);
            }
            catch (JobPrereqFailedException ex)
            {
                return(new BadRequestObjectResult(ex.Errors.ToArray().ToModelStateDictionary()));
            }

            return(new NoContentResult());
        }
Esempio n. 5
0
        public async Task <IActionResult> PublishAllProvidersFunding(string specificationId,
                                                                     Reference user,
                                                                     string correlationId)
        {
            ValidationResult validationResult = SpecificationIdValidator.Validate(specificationId);

            if (!validationResult.IsValid)
            {
                return(validationResult.AsBadRequest());
            }

            IActionResult actionResult = await IsSpecificationReadyForPublish(specificationId, ApprovalMode.All);

            if (!actionResult.IsOk())
            {
                return(actionResult);
            }

            ApiJob job = await _createAllPublishProviderFundingJobs.CreateJob(specificationId, user, correlationId);

            return(ProcessJobResponse(job, specificationId, JobConstants.DefinitionNames.PublishAllProviderFundingJob));
        }
Esempio n. 6
0
        public async Task <IActionResult> PublishIntegrityCheck(string specificationId,
                                                                Reference user,
                                                                string correlationId,
                                                                bool publishAll = false)
        {
            ValidationResult validationResult = SpecificationIdValidator.Validate(specificationId);

            if (!validationResult.IsValid)
            {
                return(validationResult.AsBadRequest());
            }

            ApiJob job = await _createPublishIntegrityJob.CreateJob(specificationId,
                                                                    user,
                                                                    correlationId,
                                                                    publishAll?new Dictionary <string, string>
            {
                { "publish-all", "True" }
            } :
                                                                    null);

            return(ProcessJobResponse(job, specificationId, JobConstants.DefinitionNames.PublishIntegrityCheckJob));
        }