Пример #1
0
        public async Task <WeekendsLeftResponse> GetWeekendsLeftAsync(WeekendsLeftRequest weekendsLeftRequest)
        {
            var weekendsLeftResponse = new WeekendsLeftResponse();

            // Model Validation
            var validator = new WeekendsLeftRequestValidator();
            var results   = validator.Validate(weekendsLeftRequest);

            if (!results.IsValid)
            {
                weekendsLeftResponse.Errors  = results.Errors.Select(errors => errors.ErrorMessage).ToList();
                weekendsLeftResponse.Message = "Errors in request, please correct and resubmit";
                return(weekendsLeftResponse);
            }

            // County Code Validation
            if (!_countriesService.GetCountryData().ContainsKey(weekendsLeftRequest.Country.ToUpper()))
            {
                weekendsLeftResponse.Errors  = new[] { "Country Code is not valid" };
                weekendsLeftResponse.Message = "Errors in request, please correct and resubmit";
                return(weekendsLeftResponse);
            }

            // Life Expectancy Lookup
            var remainingLifeExpectancyYears = await _lifeExpectancyService.GetRemainingLifeExpectancyYearsAsync(weekendsLeftRequest);

            // Life Expectancy Calculations
            weekendsLeftResponse = _lifeExpectancyService.LifeExpectancyCalculations(weekendsLeftRequest.Age, remainingLifeExpectancyYears);

            return(weekendsLeftResponse);
        }
        public async Task <WeekendsLeftResponse> GetAsync([FromQuery] int age, string gender, string country)
        {
            Enum.TryParse(gender, true, out Gender gen);
            var weekendsLeftRequest = new WeekendsLeftRequest
            {
                Age     = age,
                Gender  = gen,
                Country = country
            };

            var weekendsLeftResponse = await _weekendsLeftService.GetWeekendsLeftAsync(weekendsLeftRequest);

            return(weekendsLeftResponse);
        }
        public async Task NotAllowNegativeAgesAsync()
        {
            // Arrange - done in constructor

            var weekendsLeftRequest = new WeekendsLeftRequest
            {
                Age = -5
            };

            // Act
            var weekendsLeftResponse = await weekendsLeftService.GetWeekendsLeftAsync(weekendsLeftRequest);

            // Assert
            Assert.Contains("'Age' must be between 1 and 120. You entered -5.", weekendsLeftResponse.Errors);
        }
        public async Task <double> GetRemainingLifeExpectancyYearsAsync(WeekendsLeftRequest weekendsLeftRequest)
        {
            // Build Url
            var uri           = _config.GetValue <string>("MwlConfiguration:LifeExpectancyApiUri");
            var formatGender  = weekendsLeftRequest.Gender.ToString().ToLower();
            var countryData   = _countriesService.GetCountryData();
            var formatCountry = Uri.EscapeDataString(countryData[weekendsLeftRequest.Country.ToUpper()]);
            var formatDate    = DateTime.Now.ToString("yyyy-MM-dd");
            var formatAge     = weekendsLeftRequest.Age;
            var fullUrl       = $"{uri}/{formatGender}/{formatCountry}/{formatDate}/{formatAge}y/";

            var response = await client.GetStringAsync(fullUrl);

            var responseDeserialize = Newtonsoft.Json.JsonConvert.DeserializeObject <dynamic>(response);

            return(responseDeserialize.remaining_life_expectancy);
        }
        public async Task HaveCorrectSummaryTextAsync()
        {
            // Arrange - done in constructor

            var weekendsLeftRequest = new WeekendsLeftRequest
            {
                Age     = 55,
                Gender  = Gender.Male,
                Country = "NZL"
            };

            // Act
            var weekendsLeftResponse = await weekendsLeftService.GetWeekendsLeftAsync(weekendsLeftRequest);

            // Assert
            Assert.StartsWith("You have an estimated", weekendsLeftResponse.Message);
            Assert.EndsWith("weekends left in your life, get out there and enjoy it!", weekendsLeftResponse.Message);
        }
        public async Task HaveEstimatedAgeOfDeathInRangeAsync()
        {
            // Arrange - done in constructor

            var weekendsLeftRequest = new WeekendsLeftRequest
            {
                Age     = 45,
                Gender  = Gender.Female,
                Country = "USA"
            };

            // Act
            var weekendsLeftResponse = await weekendsLeftService.GetWeekendsLeftAsync(weekendsLeftRequest);

            // Assert
            Assert.InRange(weekendsLeftResponse.EstimatedAgeOfDeath, weekendsLeftRequest.Age, MAXAGE);
            _output.WriteLine("HaveEstimatedAgeOfDeathInRange was tested");
        }
Пример #7
0
        public async void HaveRemainingLifeExpectancyYearsInRange()
        {
            var cache            = new MemoryCache(new MemoryCacheOptions());
            var countriesService = new CountriesService(cache);
            var configuration    = TestUtilities.ConfigurationRoot();
            var lifeExpectancyServiceIntegration = new LifeExpectancyService(configuration, countriesService);

            var wlr = new WeekendsLeftRequest
            {
                Age     = 82,
                Gender  = Gender.Male,
                Country = "USA"
            };

            // Act
            var remainingLifeExpectancyYears = await lifeExpectancyServiceIntegration.GetRemainingLifeExpectancyYearsAsync(wlr); //.Result;

            // Assert
            Assert.InRange(remainingLifeExpectancyYears, 2, 10); // 7.77 on 5/10/2020
        }