public async Task QueueCsvGenerationMessages_GivenSpecificationSummariesFoundAndHasNewResults_CreatesNewMessage() { //Arrange IEnumerable <SpecModel.SpecificationSummary> specificationSummaries = new[] { new SpecModel.SpecificationSummary { Id = specificationId } }; ISpecificationsApiClient specificationsApiClient = CreateSpecificationsApiClient(); specificationsApiClient .GetSpecificationSummaries() .Returns(new ApiResponse <IEnumerable <SpecModel.SpecificationSummary> >(HttpStatusCode.OK, specificationSummaries)); ICalculationResultsRepository calculationResultsRepository = CreateResultsRepository(); calculationResultsRepository .CheckHasNewResultsForSpecificationIdAndTime( Arg.Is(specificationId), Arg.Any <DateTimeOffset>()) .Returns(true); ILogger logger = CreateLogger(); IJobManagement jobManagement = CreateJobManagement(); IBlobClient blobClient = CreateBlobClient(); blobClient .DoesBlobExistAsync($"{CalculationResultsReportFilePrefix}-{specificationId}", CalcsResultsContainerName) .Returns(true); ResultsService resultsService = CreateResultsService( logger, specificationsApiClient: specificationsApiClient, resultsRepository: calculationResultsRepository, jobManagement: jobManagement, blobClient: blobClient); //Act await resultsService.QueueCsvGenerationMessages(); //Assert await jobManagement .Received(1) .QueueJob( Arg.Is <JobCreateModel>(_ => _.JobDefinitionId == JobConstants.DefinitionNames.GenerateCalcCsvResultsJob && _.Properties["specification-id"] == specificationId)); logger .Received() .Information($"Found new calculation results for specification id '{specificationId}'"); }
public async Task <Job> QueueCsvGenerationMessageIfNewCalculationResults(string specificationId, string specificationName) { bool hasNewResults = false; bool blobExists = await _blobClientPolicy.ExecuteAsync(() => _blobClient.DoesBlobExistAsync($"{CalculationResultsReportFilePrefix}-{specificationId}", CalcsResultsContainerName)); if (blobExists) { ICloudBlob cloudBlob = await _blobClientPolicy.ExecuteAsync(() => _blobClient.GetBlobReferenceFromServerAsync( $"{CalculationResultsReportFilePrefix}-{specificationId}", CalcsResultsContainerName)); DateTimeOffset?lastModified = cloudBlob.Properties?.LastModified; hasNewResults = await _resultsRepositoryPolicy.ExecuteAsync( () => _resultsRepository.CheckHasNewResultsForSpecificationIdAndTime(specificationId, lastModified.GetValueOrDefault())); } else { // only queue the csv report job if there are calculation results for the specification hasNewResults = await _resultsRepositoryPolicy.ExecuteAsync( () => _resultsRepository.ProviderHasResultsBySpecificationId(specificationId)); } if (!hasNewResults) { _logger.Information( $"No new calculation results for specification id '{specificationId}'. Not queueing report job"); return(null); } _logger.Information($"Found new calculation results for specification id '{specificationId}'"); return(await QueueCsvGenerationMessage(specificationId, specificationName)); }