Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
 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;
        }
Ejemplo n.º 8
0
        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>();
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        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> >());
        }
Ejemplo n.º 13
0
        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()
            });
        }
Ejemplo n.º 14
0
 public SpecificationsController(ISpecificationsService service)
 {
     this.service = service;
 }