Ejemplo n.º 1
0
        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>());
        }
Ejemplo n.º 2
0
        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>());
        }
Ejemplo n.º 3
0
        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>());
        }
Ejemplo n.º 4
0
        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);
        }