public async Task UpdateTestResultsForSpecification_GivenNoResultsFoundInSearch_DoesNotUpdateSearch() { //Arrange const string specificationId = "spec-id"; Models.Specs.SpecificationVersionComparisonModel specificationVersionComparison = new Models.Specs.SpecificationVersionComparisonModel() { Id = specificationId, Current = new Models.Specs.SpecificationVersion { Name = "new name" }, Previous = new Models.Specs.SpecificationVersion { Name = "any name" } }; string json = JsonConvert.SerializeObject(specificationVersionComparison); Message message = new Message(Encoding.UTF8.GetBytes(json)); ILogger logger = CreateLogger(); SearchResults <TestScenarioResultIndex> searchResult = new SearchResults <TestScenarioResultIndex>(); ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository(); searchRepository .Search(Arg.Is(""), Arg.Any <SearchParameters>()) .Returns(searchResult); TestResultsService service = CreateTestResultsService(logger: logger, searchRepository: searchRepository); //Act await service.UpdateTestResultsForSpecification(message); //Assert await searchRepository .Received(1) .Search(Arg.Is(""), Arg.Is <SearchParameters>( m => m.Skip == 0 && m.Top == 1000 && m.SearchMode == SearchMode.Any && m.Filter == $"specificationId eq '{specificationVersionComparison.Id}' and specificationName ne '{specificationVersionComparison.Current.Name}'" )); await searchRepository .DidNotReceive() .Index(Arg.Any <IEnumerable <TestScenarioResultIndex> >()); }
public async Task SaveProviderResults_WhenNoResults_ThenNoResultsSaved() { // Arrange ICosmosRepository cosmosRepository = CreateCosmosRepository(); ISearchRepository <CalculationProviderResultsIndex> searchRepository = CreateCalculationProviderResultsSearchRepository(); ProviderResultsRepository repo = CreateProviderResultsRepository(cosmosRepository, searchRepository); IEnumerable <ProviderResult> results = Enumerable.Empty <ProviderResult>(); // Act await repo.SaveProviderResults(results); // Assert await cosmosRepository.DidNotReceive().BulkCreateAsync(Arg.Any <IEnumerable <KeyValuePair <string, ProviderResult> > >()); await searchRepository.DidNotReceive().Index(Arg.Any <IList <CalculationProviderResultsIndex> >()); }
public async Task ReIndexAllocationNotificationFeeds_GivenPublishedProviderFoundButAllHeld_DoesNotIndexReturnsContentResult() { //Arrange Message message = new Message(); IPublishedProviderResultsRepository repository = CreatePublishedProviderResultsRepository(); repository .GetAllNonHeldPublishedProviderResults() .Returns(Enumerable.Empty <PublishedProviderResult>()); ILogger logger = CreateLogger(); ISearchRepository <AllocationNotificationFeedIndex> searchRepository = CreateAllocationNotificationFeedSearchRepository(); SpecificationCurrentVersion specification = CreateSpecification(specificationId); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetCurrentSpecificationById(Arg.Is("spec-1")) .Returns(specification); PublishedResultsService resultsService = CreateResultsService(logger, publishedProviderResultsRepository: repository, allocationNotificationFeedSearchRepository: searchRepository, specificationsRepository: specificationsRepository); //Act await resultsService.ReIndexAllocationNotificationFeeds(message); //Assert await searchRepository .DidNotReceive() .Index(Arg.Any <IEnumerable <AllocationNotificationFeedIndex> >()); logger .Received(1) .Warning(Arg.Is("No published provider results were found to index.")); await repository .Received(0) .GetAllNonHeldPublishedProviderResultVersions(Arg.Any <string>(), Arg.Any <string>()); }
public async Task ReIndex_GivenGetAllSpecificationDocumentsThrowsException_ReturnsInternalServerError() { //Arrange ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .When(x => x.GetSpecificationsByRawQuery <SpecificationSearchModel>(Arg.Any <SqlQuerySpec>())) .Do(x => { throw new Exception(); }); ILogger logger = CreateLogger(); ISpecificationsService service = CreateService(searchRepository: searchRepository, logs: logger, specificationsRepository: specificationsRepository); //Act IActionResult result = await service.ReIndex(); //Assert logger .Received(1) .Error(Arg.Any <Exception>(), Arg.Is("Failed re-indexing specifications")); result .Should() .BeOfType <StatusCodeResult>(); StatusCodeResult statusCodeResult = result as StatusCodeResult; statusCodeResult .StatusCode .Should() .Be(500); await searchRepository .DidNotReceive() .Index(Arg.Any <List <SpecificationIndex> >()); }
public async Task CreateCalculation_GivenValidCalculation_ButFailedToSave_DoesNotUpdateSearch() { //Arrange Calculation calculation = CreateCalculation(); IEnumerable <Calculation> calculations = new[] { calculation }; IEnumerable <Models.Specs.Calculation> calculationSpecifications = new[] { new Models.Specs.Calculation { Id = calculation.CalculationSpecification.Id } }; string json = JsonConvert.SerializeObject(calculation); Message message = new Message(Encoding.UTF8.GetBytes(json)); message.UserProperties.Add("user-id", UserId); message.UserProperties.Add("user-name", Username); ICalculationsRepository repository = CreateCalculationsRepository(); repository .CreateDraftCalculation(Arg.Any <Calculation>()) .Returns(HttpStatusCode.BadRequest); repository .GetCalculationsBySpecificationId(Arg.Is("any-spec-id")) .Returns(calculations); ILogger logger = CreateLogger(); ISearchRepository <CalculationIndex> searchRepository = CreateSearchRepository(); Models.Specs.SpecificationSummary specificationSummary = new Models.Specs.SpecificationSummary() { Id = calculation.SpecificationId, Name = "Test Spec Name", }; ISpecificationRepository specificationRepository = CreateSpecificationRepository(); specificationRepository .GetSpecificationSummaryById(Arg.Is(calculation.SpecificationId)) .Returns(specificationSummary); specificationRepository .GetCalculationSpecificationsForSpecification(Arg.Is(calculation.SpecificationId)) .Returns(calculationSpecifications); CalculationService service = CreateCalculationService(calculationsRepository: repository, logger: logger, searchRepository: searchRepository, specificationRepository: specificationRepository); //Act await service.CreateCalculation(message); //Assert logger .Received(1) .Error($"There was problem creating a new calculation with id {calculation.Id} in Cosmos Db with status code 400"); await repository .Received(1) .CreateDraftCalculation(Arg.Is <Calculation>(m => m.Id == CalculationId && m.Current.PublishStatus == PublishStatus.Draft && m.Current.Author.Id == UserId && m.Current.Author.Name == Username && m.Current.Date.Date == DateTimeOffset.Now.Date && m.Current.Version == 1 && m.Current.DecimalPlaces == 6 )); await searchRepository .DidNotReceive() .Index(Arg.Any <List <CalculationIndex> >()); }