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> >()); }
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> >()); }
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")); }
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); }
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> >()); }
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>(); }
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); }
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)); }
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 )); }
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"); }