async public Task SaveFundingPeriods_GivenValidYamlButSavingToDatabaseThrowsException_ReturnsInternalServerError() { // Arrange string yaml = CreateRawFundingPeriods(); byte[] byteArray = Encoding.UTF8.GetBytes(yaml); MemoryStream stream = new MemoryStream(byteArray); IHeaderDictionary headerDictionary = new HeaderDictionary(); headerDictionary .Add("yaml-file", new StringValues(yamlFile)); HttpRequest request = Substitute.For <HttpRequest>(); request .Headers .Returns(headerDictionary); request .Body .Returns(stream); ILogger logger = CreateLogger(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .When(x => x.SavePeriods(Arg.Any <Period[]>())) .Do(x => { throw new Exception(); }); IFundingService fundingService = CreateService(logger: logger, specificationsRepository: specificationsRepository); // Act IActionResult result = await fundingService.SaveFundingPeriods(request); // Assert result .Should() .BeOfType <StatusCodeResult>(); StatusCodeResult statusCodeResult = (StatusCodeResult)result; statusCodeResult .StatusCode .Should() .Be(500); logger .Received(1) .Error(Arg.Any <Exception>(), Arg.Is($"Exception occurred writing to yaml file: {yamlFile} to cosmos db")); }
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> >()); }