示例#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>();
        }
        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>();
        }