public async Task MergeSpecificationInformationMergesCreatesNewMissingProviderWithResultsForSpecificationsForSpecificProviderIdsWhenSupplied() { string jobId = NewRandomString(); string providerId = NewRandomString(); SpecificationInformation specificationInformation = NewSpecificationInformation(); MergeSpecificationInformationRequest mergeRequest = NewMergeSpecificationInformationRequest(_ => _.WithSpecificationInformation(specificationInformation) .WithProviderIds(providerId)); DateTimeOffset expectedFundingPeriodEndDate = NewRandomDateTime(); GivenTheFundingPeriodEndDate(specificationInformation.FundingPeriodId, expectedFundingPeriodEndDate); Message message = NewMessage(_ => _.WithUserProperty(JobId, jobId) .WithUserProperty(ProviderId, providerId) .WithMessageBody(mergeRequest.AsJsonBytes())); await WhenTheSpecificationInformationIsMerged(message); ThenTheJobTrackingWasStarted(jobId); SpecificationInformation expectedSpecificationInformation = specificationInformation.DeepCopy(); expectedSpecificationInformation.FundingPeriodEnd = expectedFundingPeriodEndDate; AndTheProviderWithResultsForSpecificationsWasUpserted(_ => _.Id == providerId && HasEquivalentSpecificationInformation(_, expectedSpecificationInformation)); AndTheJobTrackingWasCompleted(jobId); }
public override async Task Process(Message message) { Guard.ArgumentNotNull(message, nameof(message)); MergeSpecificationInformationRequest mergeRequest = message.GetPayloadAsInstanceOf <MergeSpecificationInformationRequest>(); await MergeSpecificationInformation(mergeRequest); }
public async Task MergeSpecificationInformationMergesForSpecificProviderIdsWhenSupplied() { string providerOneId = NewRandomString(); string providerTwoId = NewRandomString(); string jobId = NewRandomString(); string newFundingStreamIdOne = NewRandomString(); string newFundingStreamIdTwo = NewRandomString(); SpecificationInformation specificationInformation = NewSpecificationInformation(_ => _.WithFundingStreamIds(newFundingStreamIdOne, newFundingStreamIdTwo)); MergeSpecificationInformationRequest mergeRequest = NewMergeSpecificationInformationRequest(_ => _.WithSpecificationInformation(specificationInformation) .WithProviderIds(providerOneId, providerTwoId)); SpecificationInformation informationWithoutFundingStreams = specificationInformation.DeepCopy(); informationWithoutFundingStreams.FundingStreamIds = null; ProviderWithResultsForSpecifications providerWithResultsForSpecificationsOne = NewProviderWithResultsForSpecifications(_ => _.WithSpecifications(informationWithoutFundingStreams)); ProviderWithResultsForSpecifications providerWithResultsForSpecificationsTwo = NewProviderWithResultsForSpecifications(_ => _.WithSpecifications(informationWithoutFundingStreams)); GivenTheProviderWithResultsForSpecificationsByProviderId(providerWithResultsForSpecificationsOne, providerOneId); GivenTheProviderWithResultsForSpecificationsByProviderId(providerWithResultsForSpecificationsTwo, providerTwoId); Message message = NewMessage(_ => _.WithUserProperty(JobId, jobId) .WithMessageBody(mergeRequest.AsJsonBytes())); await WhenTheSpecificationInformationIsMerged(message); ThenTheJobTrackingWasStarted(jobId); AndTheProviderWithResultsForSpecificationsWereUpserted(providerWithResultsForSpecificationsOne); AndTheProviderWithResultsForSpecificationsWereUpserted(providerWithResultsForSpecificationsTwo); specificationInformation.IsDirty = true; providerWithResultsForSpecificationsOne .Specifications .Should() .BeEquivalentTo(specificationInformation); providerWithResultsForSpecificationsTwo .Specifications .Should() .BeEquivalentTo(specificationInformation); AndTheJobTrackingWasCompleted(jobId); }
public async Task QueueMergeSpecificationInformationForProviderJobForProvider() { MergeSpecificationInformationRequest mergeRequest = new MergeSpecificationInformationRequest { SpecificationInformation = new SpecificationInformation { Id = NewRandomString() } }; await AssertPutRequest("providers/specifications", mergeRequest, HttpStatusCode.OK, () => _client.QueueMergeSpecificationInformationJob(mergeRequest)); }
private void GivenTheJob(Job job, MergeSpecificationInformationRequest mergeRequest, Reference user, string correlationId, string providerId = null) { _jobs.Setup(_ => _.QueueJob(It.Is <JobCreateModel>(jb => (providerId == null || HasProviderIdInProperties(jb, providerId)) && jb.CorrelationId == correlationId && jb.InvokerUserId == user.Id && jb.InvokerUserDisplayName == user.Name && jb.MessageBody == mergeRequest.AsJson(true) && jb.JobDefinitionId == JobConstants.DefinitionNames.MergeSpecificationInformationForProviderJob))) .ReturnsAsync(job); }
public async Task MergeSpecificationInformation(MergeSpecificationInformationRequest mergeRequest, ConcurrentDictionary <string, FundingPeriod> fundingPeriods = null) { Guard.ArgumentNotNull(mergeRequest, nameof(mergeRequest)); if (mergeRequest.IsForAllProviders) { await MergeSpecificationInformationForAllProviders(mergeRequest.SpecificationInformation); } else { await MergeSpecificationInformationForProviderBatch(mergeRequest.SpecificationInformation, mergeRequest.ProviderIds, fundingPeriods); } }
public async Task QueueMergeSpecificationInformationJobCreatesNewJobWithSuppliedMergeRequest() { MergeSpecificationInformationRequest mergeRequest = NewMergeSpecificationInformationRequest(_ => _.WithSpecificationInformation(NewSpecificationInformation(si => si.WithName(NewRandomString()))) .WithProviderIds(NewRandomString())); Job expectedJob = NewJob(); Reference user = NewUser(); string correlationId = NewRandomString(); GivenTheJob(expectedJob, mergeRequest, user, correlationId); OkObjectResult okObjectResult = await WhenTheMergeSpecificationInformationJobIsQueued(mergeRequest, user, correlationId) as OkObjectResult; okObjectResult?.Value .Should() .BeSameAs(expectedJob); }
public async Task <IActionResult> QueueMergeSpecificationInformationJob(MergeSpecificationInformationRequest mergeRequest, Reference user, string correlationId) { Guard.ArgumentNotNull(mergeRequest, nameof(mergeRequest)); JobCreateModel job = new JobCreateModel { JobDefinitionId = JobConstants.DefinitionNames.MergeSpecificationInformationForProviderJob, InvokerUserId = user?.Id, InvokerUserDisplayName = user?.Name, CorrelationId = correlationId, Trigger = new Trigger { Message = "Specification or Results change require merging specification information for providers with results", EntityType = "Specification", EntityId = mergeRequest.SpecificationInformation.Id }, MessageBody = mergeRequest.AsJson() }; return(new OkObjectResult(await _jobsPolicy.ExecuteAsync(() => _jobs.QueueJob(job)))); }
public async Task <HttpStatusCode> QueueMergeSpecificationInformationJob(MergeSpecificationInformationRequest mergeRequest) { Guard.ArgumentNotNull(mergeRequest, nameof(mergeRequest)); return(await PutAsync($"{UrlRoot}/providers/specifications", mergeRequest)); }
private async Task WhenTheSpecificationInformationIsMerged(MergeSpecificationInformationRequest mergeRequest, ConcurrentDictionary <string, FundingPeriod> fundingPeriods = null) => await _service.MergeSpecificationInformation(mergeRequest, fundingPeriods);
private async Task <IActionResult> WhenTheMergeSpecificationInformationJobIsQueued(MergeSpecificationInformationRequest mergeRequest, Reference user, string correlationId) => await _service.QueueMergeSpecificationInformationJob(mergeRequest, user, correlationId);
public async Task MergeSpecificationInformationMergesForAllProviderWhenProviderIdNotSupplied() { string jobId = NewRandomString(); string specificationId = NewRandomString(); SpecificationInformation specificationInformation = NewSpecificationInformation(_ => _.WithId(specificationId)); MergeSpecificationInformationRequest mergeRequest = NewMergeSpecificationInformationRequest(_ => _.WithSpecificationInformation(specificationInformation)); ProviderWithResultsForSpecifications providerOne = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerTwo = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerThree = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerFour = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerFive = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerSix = NewProviderWithResultsForSpecifications(); ProviderWithResultsForSpecifications providerSeven = NewProviderWithResultsForSpecifications(); ProviderResult providerResultEight = NewProviderResult(); ProviderWithResultsForSpecifications providerEight = NewProviderWithResultsForSpecifications(providerInformation: new ProviderInformation { Id = providerResultEight.Provider.Id }); ProviderResult providerResultNine = NewProviderResult(); ProviderWithResultsForSpecifications providerNine = NewProviderWithResultsForSpecifications(providerInformation: new ProviderInformation { Id = providerResultNine.Provider.Id }); DateTimeOffset expectedFundingPeriodEndDate = NewRandomDateTime(); GivenTheFundingPeriodEndDate(specificationInformation.FundingPeriodId, expectedFundingPeriodEndDate); AndTheProviderWithResultsForSpecifications(specificationId, NewFeedIterator(AsArray(providerOne, providerTwo), AsArray(providerThree, providerFour), AsArray(providerFive, providerSix), AsArray(providerSeven, providerEight))); AndTheProviderResultsForSpecification(specificationId, new[] { providerResultEight, providerResultNine }); Message message = NewMessage(_ => _.WithUserProperty(JobId, jobId) .WithMessageBody(mergeRequest.AsJsonBytes())); await WhenTheSpecificationInformationIsMerged(message); ThenTheJobTrackingWasStarted(jobId); SpecificationInformation expectedSpecificationInformation = specificationInformation.DeepCopy(); expectedSpecificationInformation.FundingPeriodEnd = expectedFundingPeriodEndDate; AndTheProviderWithResultsForSpecificationsWereUpserted(providerOne, providerTwo); AndTheProviderWithResultsForSpecificationsWereUpserted(providerThree, providerFour); AndTheProviderWithResultsForSpecificationsWereUpserted(providerFive, providerSix); AndTheProviderWithResultsForSpecificationsWereUpserted(providerSeven, providerEight); //only upserts dirty records AndTheProviderWithResultsForSpecificationsWereNotUpserted(providerNine); expectedSpecificationInformation.IsDirty = true; AndTheProviderWithResultsForSpecificationsHaveTheEquivalentSpecificationInformation(expectedSpecificationInformation, providerOne, providerTwo, providerThree, providerFour, providerFive, providerSix, providerSeven); AndTheJobTrackingWasCompleted(jobId); }