public async Task GetTestScenariosBySpecificationId_WhenGivenASpecificationIdInValidFormat_ShouldReturnFail() { // Arrange string _specificationId = "specificationId"; IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> testScenarios = new List <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario>() { new CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario() { SpecificationId = _specificationId } }; IScenariosApiClient scenariosApiClient = Substitute.For <IScenariosApiClient>(); scenariosApiClient .GetTestScenariosBySpecificationId(Arg.Any <string>()) .Returns(new ApiResponse <IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> >(HttpStatusCode.NotFound, testScenarios)); ScenariosRepository scenariosRepository = new ScenariosRepository(scenariosApiClient, CreateCacheProvider(), CreateMapper()); string errorMessage = $"No Test Scenario found for specificationId '{_specificationId}'."; // Act Func <Task> result = async() => await scenariosRepository.GetTestScenariosBySpecificationId(_specificationId); // Assert result .Should() .Throw <RetriableException>() .WithMessage(errorMessage); await scenariosApiClient.Received(1).GetTestScenariosBySpecificationId(Arg.Any <string>()); }
public async Task GetTestScenariosBySpecificationId_WhenGivenASpecificationIdInValidFormat_ShouldReturnResult() { // Arrange IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> testScenarios = new List <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario>() { new CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario() { SpecificationId = "Test" } }; IScenariosApiClient scenariosApiClient = Substitute.For <IScenariosApiClient>(); scenariosApiClient .GetTestScenariosBySpecificationId(Arg.Any <string>()) .Returns(new ApiResponse <IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> >(HttpStatusCode.OK, testScenarios)); ScenariosRepository scenariosRepository = new ScenariosRepository(scenariosApiClient, CreateCacheProvider(), CreateMapper()); // Act IEnumerable <TestScenario> result = await scenariosRepository.GetTestScenariosBySpecificationId("Test"); // Assert result.Should().NotBeNull(); result.Should().HaveCount(testScenarios.Count()); result.First().SpecificationId.Should().Be(testScenarios.First().SpecificationId); await scenariosApiClient.Received(1).GetTestScenariosBySpecificationId(Arg.Any <string>()); }
public async Task GetTestScenariosBySpecificationId_WhenGivenApiResponseIsEmpty_ShouldReturnEmptyResult() { // Arrange IScenariosApiClient scenariosApiClient = Substitute.For <IScenariosApiClient>(); scenariosApiClient .GetTestScenariosBySpecificationId(Arg.Any <string>()) .Returns(new ApiResponse <IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> >(HttpStatusCode.OK, null)); ScenariosRepository scenariosRepository = new ScenariosRepository(scenariosApiClient, CreateCacheProvider(), CreateMapper()); // Act IEnumerable <TestScenario> result = await scenariosRepository.GetTestScenariosBySpecificationId("Test"); // Assert result.Should().NotBeNull(); result.Should().HaveCount(0); await scenariosApiClient.Received(1).GetTestScenariosBySpecificationId(Arg.Any <string>()); }
public async Task <IEnumerable <TestScenario> > GetTestScenariosBySpecificationId(string specificationId) { if (string.IsNullOrWhiteSpace(specificationId)) { throw new ArgumentNullException(nameof(specificationId)); } IEnumerable <TestScenario> testScenarios = await _cacheProvider.GetAsync <List <TestScenario> >($"{CacheKeys.TestScenarios}{specificationId}"); if (testScenarios.IsNullOrEmpty()) { ApiResponse <IEnumerable <CalculateFunding.Common.ApiClient.Scenarios.Models.TestScenario> > apiClientResponse = await _apiClient.GetTestScenariosBySpecificationId(specificationId); if (!apiClientResponse.StatusCode.IsSuccess()) { string message = $"No Test Scenario found for specificationId '{specificationId}'."; throw new RetriableException(message); } testScenarios = _mapper.Map <IEnumerable <TestScenario> >(apiClientResponse.Content); if (!testScenarios.IsNullOrEmpty()) { await _cacheProvider.SetAsync <List <TestScenario> >($"{CacheKeys.TestScenarios}{specificationId}", testScenarios.ToList(), TimeSpan.FromHours(1), false); } } return(testScenarios); }