Exemple #1
0
        public async Task SaveTestProviderResults_WhenNoItemsPasssed_ThenNothingSaved()
        {
            // Arrange
            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();
            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository();

            TestResultsService service = CreateTestResultsService(testResultsRepository, searchRepository);

            IEnumerable <TestScenarioResult> updateItems = Enumerable.Empty <TestScenarioResult>();

            IEnumerable <ProviderResult> providerResults = Enumerable.Empty <ProviderResult>();

            // Act
            HttpStatusCode result = await service.SaveTestProviderResults(updateItems, providerResults);

            // Assert
            result.Should().Be(HttpStatusCode.NotModified);

            await testResultsRepository
            .Received(0)
            .SaveTestProviderResults(Arg.Any <IEnumerable <TestScenarioResult> >());

            await searchRepository
            .Received(0)
            .Index(Arg.Any <IEnumerable <TestScenarioResultIndex> >());
        }
Exemple #2
0
        public async Task SaveTestProviderResults_WhenItemsPasssed_ThenItemsSaved()
        {
            // Arrange
            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();
            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository();

            TestResultsService service = CreateTestResultsService(testResultsRepository, searchRepository);

            List <TestScenarioResult> itemsToUpdate = new List <TestScenarioResult>
            {
                CreateTestScenarioResult()
            };

            testResultsRepository
            .SaveTestProviderResults(Arg.Any <IEnumerable <TestScenarioResult> >())
            .Returns(HttpStatusCode.Created);

            IEnumerable <ProviderResult> providerResults = Enumerable.Empty <ProviderResult>();

            // Act
            HttpStatusCode result = await service.SaveTestProviderResults(itemsToUpdate, providerResults);

            // Assert
            result.Should().Be(HttpStatusCode.Created);

            await testResultsRepository
            .Received(1)
            .SaveTestProviderResults(itemsToUpdate);

            await searchRepository
            .Received(1)
            .Index(Arg.Any <IEnumerable <TestScenarioResultIndex> >());
        }
Exemple #3
0
        public async Task UpdateTestResultsForSpecification_GivenNoChangesDetected_LogsAndReturns()
        {
            //Arrange
            const string specificationId = "spec-id";

            Models.Specs.SpecificationVersionComparisonModel specificationVersionComparison = new Models.Specs.SpecificationVersionComparisonModel()
            {
                Id      = specificationId,
                Current = new Models.Specs.SpecificationVersion {
                    Name = "any name"
                },
                Previous = new Models.Specs.SpecificationVersion {
                    Name = "any name"
                }
            };

            string json = JsonConvert.SerializeObject(specificationVersionComparison);

            Message message = new Message(Encoding.UTF8.GetBytes(json));

            ILogger logger = CreateLogger();

            TestResultsService service = CreateTestResultsService(logger: logger);

            //Act
            await service.UpdateTestResultsForSpecification(message);

            //Assert
            logger
            .Received(1)
            .Information(Arg.Is($"No changes detected"));
        }
Exemple #4
0
        public async Task SaveTestProviderResults_WhenItemsPasssedAndRepositoryFailed_ThenItemsNotSaved()
        {
            // Arrange
            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();

            testResultsRepository
            .SaveTestProviderResults(Arg.Any <IEnumerable <TestScenarioResult> >())
            .Returns(HttpStatusCode.BadRequest);

            TestResultsService service = CreateTestResultsService(testResultsRepository);

            IEnumerable <ProviderResult> providerResults = Enumerable.Empty <ProviderResult>();

            List <TestScenarioResult> itemsToUpdate = new List <TestScenarioResult>
            {
                CreateTestScenarioResult()
            };

            // Act
            HttpStatusCode result = await service.SaveTestProviderResults(itemsToUpdate, providerResults);

            // Assert
            result.Should().Be(HttpStatusCode.InternalServerError);

            await testResultsRepository
            .Received(1)
            .SaveTestProviderResults(itemsToUpdate);
        }
Exemple #5
0
        public async Task UpdateTestResultsForSpecification_GivenNoResultsFoundInSearch_DoesNotUpdateSearch()
        {
            //Arrange
            const string specificationId = "spec-id";

            Models.Specs.SpecificationVersionComparisonModel specificationVersionComparison = new Models.Specs.SpecificationVersionComparisonModel()
            {
                Id      = specificationId,
                Current = new Models.Specs.SpecificationVersion {
                    Name = "new name"
                },
                Previous = new Models.Specs.SpecificationVersion {
                    Name = "any name"
                }
            };

            string json = JsonConvert.SerializeObject(specificationVersionComparison);

            Message message = new Message(Encoding.UTF8.GetBytes(json));

            ILogger logger = CreateLogger();

            SearchResults <TestScenarioResultIndex> searchResult = new SearchResults <TestScenarioResultIndex>();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository();

            searchRepository
            .Search(Arg.Is(""), Arg.Any <SearchParameters>())
            .Returns(searchResult);

            TestResultsService service = CreateTestResultsService(logger: logger, searchRepository: searchRepository);

            //Act
            await service.UpdateTestResultsForSpecification(message);

            //Assert
            await
            searchRepository
            .Received(1)
            .Search(Arg.Is(""), Arg.Is <SearchParameters>(
                        m => m.Skip == 0 &&
                        m.Top == 1000 &&
                        m.SearchMode == SearchMode.Any &&
                        m.Filter == $"specificationId eq '{specificationVersionComparison.Id}' and specificationName ne '{specificationVersionComparison.Current.Name}'"
                        ));

            await
            searchRepository
            .DidNotReceive()
            .Index(Arg.Any <IEnumerable <TestScenarioResultIndex> >());
        }
Exemple #6
0
        public void UpdateTestResultsForSpecification_GivenInvalidModel_LogsDoesNotSave()
        {
            //Arrange
            dynamic anyObject = new { something = 1 };

            string json = JsonConvert.SerializeObject(anyObject);

            Message message = new Message(Encoding.UTF8.GetBytes(json));

            TestResultsService service = CreateTestResultsService();

            //Act
            Func <Task> test = async() => await service.UpdateTestResultsForSpecification(message);

            //Assert
            test
            .Should()
            .ThrowExactly <InvalidModelException>();
        }
Exemple #7
0
        public async Task DeleteTestResults_Deletes_Dependencies_Using_Correct_SpecificationId_And_DeletionType(string specificationId, DeletionType deletionType)
        {
            string jobId = "job-id";

            Message message = new Message
            {
                UserProperties =
                {
                    new KeyValuePair <string, object>("jobId",            jobId),
                    new KeyValuePair <string, object>("specification-id", specificationId),
                    new KeyValuePair <string, object>("deletion-type",    (int)deletionType)
                }
            };
            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();
            TestResultsService     service = CreateTestResultsService(testResultsRepository: testResultsRepository);

            await service.DeleteTestResults(message);

            await testResultsRepository.Received(1).DeleteTestResultsBySpecificationId(specificationId, deletionType);
        }
Exemple #8
0
        public async Task CleanupTestResultsForSpecificationProviders_GivenCurrentTestResults_ThenCallsDelete()
        {
            //Arrange
            TestScenarioResult testScenarioResult = CreateTestScenarioResult();

            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();

            testResultsRepository
            .GetCurrentTestResults(Arg.Any <IEnumerable <string> >(), Arg.Is <string>(testScenarioResult.Specification.Id))
            .Returns(new TestScenarioResult[] { testScenarioResult });

            TestResultsService service = CreateTestResultsService(testResultsRepository: testResultsRepository);

            SpecificationProviders specificationProviders = new SpecificationProviders {
                SpecificationId = testScenarioResult.Specification.Id, Providers = new string[] { testScenarioResult.Provider.Id }
            };

            Dictionary <string, string> properties = new Dictionary <string, string>
            {
                { "specificationId", testScenarioResult.Specification.Id },
                { "sfa-correlationId", Guid.NewGuid().ToString() }
            };

            Message message = new Message {
                Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(specificationProviders))
            };

            message.UserProperties["specificationId"] = testScenarioResult.Specification.Id;

            //Act
            await service.CleanupTestResultsForSpecificationProviders(message);

            //Assert
            await testResultsRepository
            .Received(1)
            .DeleteCurrentTestScenarioTestResults(Arg.Is <IEnumerable <TestScenarioResult> >(x => x.First().Provider.Id == testScenarioResult.Provider.Id));
        }
Exemple #9
0
        public async Task SaveTestProviderResults_WhenItemsPasssed_ThenSearchResultsMapped()
        {
            // Arrange
            ITestResultsRepository testResultsRepository = CreateTestResultsRepository();
            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository();

            TestResultsService service = CreateTestResultsService(testResultsRepository, searchRepository);

            IEnumerable <ProviderResult> providerResults = new[]
            {
                new ProviderResult
                {
                    Provider = new ProviderSummary
                    {
                        UKPRN = "111",
                        UPIN  = "222",
                        URN   = "333",
                        EstablishmentNumber = "123",
                        DateOpened          = DateTimeOffset.Now,
                        Authority           = "authority",
                        ProviderSubType     = "provider sub type",
                        ProviderType        = "provider type",
                        Id = "ProviderId"
                    }
                }
            };

            List <TestScenarioResult> itemsToUpdate      = new List <TestScenarioResult>();
            TestScenarioResult        testScenarioResult = CreateTestScenarioResult();

            itemsToUpdate.Add(testScenarioResult);

            testResultsRepository
            .SaveTestProviderResults(Arg.Any <IEnumerable <TestScenarioResult> >())
            .Returns(HttpStatusCode.Created);

            // Act
            HttpStatusCode result = await service.SaveTestProviderResults(itemsToUpdate, providerResults);

            // Assert
            result.Should().Be(HttpStatusCode.Created);

            await testResultsRepository
            .Received(1)
            .SaveTestProviderResults(itemsToUpdate);

            await searchRepository
            .Received(1)
            .Index(Arg.Is <IEnumerable <TestScenarioResultIndex> >(c =>
                                                                   c.First().Id == testScenarioResult.Id &&
                                                                   c.First().ProviderId == testScenarioResult.Provider.Id &&
                                                                   c.First().ProviderName == testScenarioResult.Provider.Name &&
                                                                   c.First().SpecificationId == testScenarioResult.Specification.Id &&
                                                                   c.First().SpecificationName == testScenarioResult.Specification.Name &&
                                                                   c.First().TestResult == Enum.GetName(typeof(Models.Results.TestResult), testScenarioResult.TestResult) &&
                                                                   c.First().TestScenarioId == testScenarioResult.TestScenario.Id &&
                                                                   c.First().TestScenarioName == testScenarioResult.TestScenario.Name &&
                                                                   c.First().LastUpdatedDate > DateTimeOffset.Now.AddDays(-1) &&
                                                                   c.First().EstablishmentNumber == "123" &&
                                                                   c.First().UKPRN == "111" &&
                                                                   c.First().UPIN == "222" &&
                                                                   c.First().URN == "333" &&
                                                                   c.First().LocalAuthority == "authority" &&
                                                                   c.First().ProviderType == "provider type" &&
                                                                   c.First().ProviderSubType == "provider sub type" &&
                                                                   c.First().OpenDate.HasValue
                                                                   ));
        }
Exemple #10
0
        public async Task UpdateTestResultsForSpecification_GivenResultsReturnedButIndexeingCausesErrors_LogsErrors()
        {
            //Arrange
            const string specificationId = "spec-id";

            Models.Specs.SpecificationVersionComparisonModel specificationVersionComparison = new Models.Specs.SpecificationVersionComparisonModel()
            {
                Id      = specificationId,
                Current = new Models.Specs.SpecificationVersion {
                    Name = "new name"
                },
                Previous = new Models.Specs.SpecificationVersion {
                    Name = "any name"
                }
            };

            string json = JsonConvert.SerializeObject(specificationVersionComparison);

            Message message = new Message(Encoding.UTF8.GetBytes(json));

            ILogger logger = CreateLogger();

            SearchResults <TestScenarioResultIndex> searchResult = new SearchResults <TestScenarioResultIndex>
            {
                Results = new List <CalculateFunding.Repositories.Common.Search.SearchResult <TestScenarioResultIndex> >
                {
                    new CalculateFunding.Repositories.Common.Search.SearchResult <TestScenarioResultIndex>
                    {
                        Result = new TestScenarioResultIndex()
                    },
                    new CalculateFunding.Repositories.Common.Search.SearchResult <TestScenarioResultIndex>
                    {
                        Result = new TestScenarioResultIndex()
                    },
                    new CalculateFunding.Repositories.Common.Search.SearchResult <TestScenarioResultIndex>
                    {
                        Result = new TestScenarioResultIndex()
                    }
                }
            };

            IEnumerable <IndexError> indexErrors = new[]
            {
                new IndexError {
                    ErrorMessage = "an error"
                }
            };

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRespository();

            searchRepository
            .Search(Arg.Is(""), Arg.Any <SearchParameters>())
            .Returns(searchResult);

            searchRepository
            .Index(Arg.Any <IEnumerable <TestScenarioResultIndex> >())
            .Returns(indexErrors);

            TestResultsService service = CreateTestResultsService(logger: logger, searchRepository: searchRepository);

            //Act
            await service.UpdateTestResultsForSpecification(message);

            //Assert
            await
            searchRepository
            .Received(1)
            .Search(Arg.Is(""), Arg.Is <SearchParameters>(
                        m => m.Skip == 0 &&
                        m.Top == 1000 &&
                        m.SearchMode == SearchMode.Any &&
                        m.Filter == $"specificationId eq '{specificationVersionComparison.Id}' and specificationName ne '{specificationVersionComparison.Current.Name}'"
                        ));

            await
            searchRepository
            .Received(1)
            .Index(Arg.Is <IEnumerable <TestScenarioResultIndex> >(m => m.Count() == 3));

            logger
            .Received(1)
            .Error($"The following errors occcurred while updating test results for specification id: {specificationId}, an error");
        }