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