public async Task ReIndex_GivenNoDocumentsReturnedFromCosmos_ReturnsNoContent() { //Arrange IEnumerable <SpecificationSearchModel> specifications = new SpecificationSearchModel[0]; ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationsByRawQuery <SpecificationSearchModel>(Arg.Any <SqlQuerySpec>()) .Returns(specifications); ILogger logger = CreateLogger(); ISpecificationsService service = CreateService(searchRepository: searchRepository, logs: logger, specificationsRepository: specificationsRepository); //Act IActionResult result = await service.ReIndex(); //Assert logger .Received(1) .Warning(Arg.Is("No specification documents were returned from cosmos db")); result .Should() .BeOfType <NoContentResult>(); }
public async Task ReIndex_GivenIndexingThrowsException_ReturnsInternalServerError() { //Arrange IEnumerable <SpecificationSearchModel> specifications = new[] { new SpecificationSearchModel { Id = SpecificationId, Name = SpecificationName, FundingStreams = new List <Reference> { new Reference("fs-id", "fs-name") }, FundingPeriod = new Reference("18/19", "2018/19"), UpdatedAt = DateTime.Now } }; // ISearchRepository<SpecificationIndex> searchRepository = CreateSearchRepository(); // searchRepository // .When(x => x.Index(Arg.Any<List<SpecificationIndex>>())) // .Do(x => { throw new Exception(); }); _specificationIndexer .When(_ => _.Index(Arg.Any <IEnumerable <SpecificationSearchModel> >())) .Throw(new Exception()); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationsByRawQuery <SpecificationSearchModel>(Arg.Any <CosmosDbQuery>()) .Returns(specifications); ILogger logger = CreateLogger(); ISpecificationsService service = CreateService(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); }
public async Task ReIndex_GivenDocumentsReturnedFromCosmos_ReturnsNoContent() { //Arrange IEnumerable <SpecificationSearchModel> specifications = new[] { new SpecificationSearchModel { Id = SpecificationId, Name = SpecificationName, FundingStreams = new List <Reference>() { new Reference("fs-id", "fs-name") }, FundingPeriod = new Reference("18/19", "2018/19"), UpdatedAt = DateTime.Now } }; ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetSpecificationsByRawQuery <SpecificationSearchModel>(Arg.Any <CosmosDbQuery>()) .Returns(specifications); ILogger logger = CreateLogger(); ISpecificationsService service = CreateService(searchRepository: searchRepository, logs: logger, specificationsRepository: specificationsRepository); //Act IActionResult result = await service.ReIndex(); //Assert await _specificationIndexer .Received(1) .Index(Arg.Is <IEnumerable <SpecificationSearchModel> >(_ => _.SequenceEqual(specifications))); // logger // .Received(1) // .Information(Arg.Is($"Successfully re-indexed 1 documents")); result .Should() .BeOfType <NoContentResult>(); }