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_GivenDeleteIndexThrowsException_ReturnsInternalServerError() { //Arrange ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); searchRepository .When(x => x.DeleteIndex()) .Do(x => { throw new Exception(); }); ILogger logger = CreateLogger(); ISpecificationsService service = CreateService(searchRepository: searchRepository, logs: logger); //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 FundingStructureService( ICacheProvider cacheProvider, ISpecificationsService specificationsService, ICalculationsApiClient calculationsApiClient, IGraphApiClient graphApiClient, Common.ApiClient.Policies.IPoliciesApiClient policiesApiClient, IValidator <UpdateFundingStructureLastModifiedRequest> validator, ISpecificationsResiliencePolicies resiliencePolicies) { Guard.ArgumentNotNull(specificationsService, nameof(specificationsService)); Guard.ArgumentNotNull(policiesApiClient, nameof(policiesApiClient)); Guard.ArgumentNotNull(calculationsApiClient, nameof(calculationsApiClient)); Guard.ArgumentNotNull(graphApiClient, nameof(graphApiClient)); Guard.ArgumentNotNull(cacheProvider, nameof(cacheProvider)); Guard.ArgumentNotNull(validator, nameof(validator)); Guard.ArgumentNotNull(resiliencePolicies, nameof(resiliencePolicies)); Guard.ArgumentNotNull(resiliencePolicies?.PoliciesApiClient, nameof(resiliencePolicies.PoliciesApiClient)); Guard.ArgumentNotNull(resiliencePolicies?.CacheProvider, nameof(resiliencePolicies.CacheProvider)); Guard.ArgumentNotNull(resiliencePolicies?.CalcsApiClient, nameof(resiliencePolicies.CalcsApiClient)); _specificationsService = specificationsService; _policiesApiClient = policiesApiClient; _calculationsApiClient = calculationsApiClient; _graphApiClient = graphApiClient; _cacheProvider = cacheProvider; _validator = validator; _policiesResilience = resiliencePolicies.PoliciesApiClient; _cacheResilience = resiliencePolicies.CacheProvider; _calculationsResilience = resiliencePolicies.CalcsApiClient; }
public OnAddRelationshipEvent( ILogger logger, ISpecificationsService specificationsService, IMessengerService messengerService, IUserProfileProvider userProfileProvider, bool useAzureStorage = false) : base(logger, messengerService, FunctionName, QueueName, useAzureStorage, userProfileProvider, specificationsService) { }
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 static void SetupTests(TestContext tc) { SetupTests("specs"); _logger = CreateLogger(); _specificationsService = CreateSpecificationService(); _userProfileProvider = CreateUserProfileProvider(); _specificationIndexerService = CreateSpecificationIndexerService(); }
public OnDeleteSpecifications( ILogger logger, ISpecificationsService specificationsService, IMessengerService messengerService, IUserProfileProvider userProfileProvider, bool useAzureStorage = false) : base(logger, messengerService, FunctionName, QueueName, useAzureStorage, userProfileProvider, specificationsService) { Guard.ArgumentNotNull(specificationsService, nameof(specificationsService)); _specificationsService = specificationsService; }
public OnAddRelationshipEvent( ILogger logger, ICorrelationIdProvider correlationIdProvider, ISpecificationsService specificationsService) { Guard.ArgumentNotNull(logger, nameof(logger)); Guard.ArgumentNotNull(correlationIdProvider, nameof(correlationIdProvider)); Guard.ArgumentNotNull(specificationsService, nameof(specificationsService)); _logger = logger; _correlationIdProvider = correlationIdProvider; _specificationsService = specificationsService; }
public SpecificationsController( ISpecificationsService specService, ISpecificationsSearchService specSearchService, IFundingService fundingService) { Guard.ArgumentNotNull(specService, nameof(specService)); Guard.ArgumentNotNull(specSearchService, nameof(specSearchService)); Guard.ArgumentNotNull(fundingService, nameof(fundingService)); _specService = specService; _specSearchService = specSearchService; _fundingService = fundingService; }
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>(); }
public SpecificationsController( ISpecificationsService specService, ISpecificationsSearchService specSearchService, IWebHostEnvironment hostingEnvironment, ISpecificationsReportService specificationsReportService, ISpecificationIndexingService specificationIndexingService) { Guard.ArgumentNotNull(specService, nameof(specService)); Guard.ArgumentNotNull(specSearchService, nameof(specSearchService)); Guard.ArgumentNotNull(hostingEnvironment, nameof(hostingEnvironment)); Guard.ArgumentNotNull(specificationsReportService, nameof(specificationsReportService)); Guard.ArgumentNotNull(specificationIndexingService, nameof(specificationIndexingService)); _specService = specService; _specSearchService = specSearchService; _hostingEnvironment = hostingEnvironment; _specificationsReportService = specificationsReportService; _specificationIndexingService = specificationIndexingService; }
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 void SetUp() { _specificationsService = Substitute.For <ISpecificationsService>(); _calculationsApiClient = Substitute.For <ICalculationsApiClient>(); _graphApiClient = Substitute.For <IGraphApiClient>(); _cacheProvider = Substitute.For <ICacheProvider>(); _policiesApiClient = Substitute.For <Common.ApiClient.Policies.IPoliciesApiClient>(); _validator = Substitute.For <IValidator <UpdateFundingStructureLastModifiedRequest> >(); _service = new FundingStructureService( _cacheProvider, _specificationsService, _calculationsApiClient, _graphApiClient, _policiesApiClient, _validator, new SpecificationsResiliencePolicies { CacheProvider = Polly.Policy.NoOpAsync(), CalcsApiClient = Polly.Policy.NoOpAsync(), PoliciesApiClient = Polly.Policy.NoOpAsync() }); }
public SpecificationsController(ISpecificationsService service) { this.service = service; }