public async System.Threading.Tasks.Task WhenPremiumQuoteIsNull_ThenResultShouldBeNull()
        {
            PremiumQuoteModel premiumQuote = null;
            var result = await _premiumCalculationService.CalculatePremiumAsync(premiumQuote);

            result.Should().BeNull();
        }
        public async System.Threading.Tasks.Task WhenPremiumQuoteValuesAreZero_ThenPremiumShouldBeZero()
        {
            var premiumQuote = new PremiumQuoteModel();
            var result       = await _premiumCalculationService.CalculatePremiumAsync(premiumQuote);

            result.Should().NotBeNull();
            result.Premium.Should().Be(0);
        }
        public async System.Threading.Tasks.Task WhenPremiumQuoteRatingIsInvalid_ThenPremiumShouldBeZero()
        {
            var premiumQuote = new PremiumQuoteModel()
            {
                Amount = 10, DOB = "01/01/2000", OccupationRating = 0
            };
            var result = await _premiumCalculationService.CalculatePremiumAsync(premiumQuote);

            premiumQuote.OccupationRating = 10;
            var result2 = await _premiumCalculationService.CalculatePremiumAsync(premiumQuote);

            result.Should().NotBeNull();
            result.Premium.Should().Be(0);

            result2.Should().NotBeNull();
            result2.Premium.Should().Be(0);
        }
        public async Task <PremiumQuoteModel> CalculatePremiumAsync(PremiumQuoteModel premiumQuote)
        {
            if (premiumQuote is null)
            {
                return(await Task.FromResult(premiumQuote));
            }

            premiumQuote.Premium = 0;
            premiumQuote.Msg     = string.Empty;

            var age = 0;

            if (DateTime.TryParseExact(premiumQuote.DOB, "dd/MM/yyyy",
                                       System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None,
                                       out var value))
            {
                age = (DateTime.Today - value).Days / 365;
            }
            else
            {
                age = premiumQuote.Age;
            }

            premiumQuote.Age = age;
            if (age < 18 || age > 100)
            {
                premiumQuote.Msg = "Invalid age";
                return(await Task.FromResult(premiumQuote));
            }

            var rating = await _occupationRatingService.OccupationRatingFactorAsync(premiumQuote.OccupationRating);

            var premium = (premiumQuote.Amount * rating * age) / 1000 * 12;

            premiumQuote.Premium = premium;

            return(await Task.FromResult(premiumQuote));
        }
Ejemplo n.º 5
0
        public Task <PremiumQuoteModel> CalculatePremiumAsync(PremiumQuoteModel premiumQuote)
        {
            var age = 0;

            if (DateTime.TryParseExact(premiumQuote.DOB, "dd/MM/yyyy",
                                       System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None,
                                       out var value))
            {
                age = (DateTime.Today - value).Days / 365;
            }
            else
            {
                age = premiumQuote.Age;
            }

            var rating = premiumQuote.OccupationRating >= 1 && premiumQuote.OccupationRating <= 4 ?
                         OccupationRatingFactor[premiumQuote.OccupationRating - 1] : 0;
            var premium = (premiumQuote.Amount * rating * age) / 1000 * 12;

            premiumQuote.Age     = age;
            premiumQuote.Premium = premium;

            return(Task.FromResult <PremiumQuoteModel>(premiumQuote));
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> Get([FromQuery] PremiumQuoteModel premiumQuote)
        {
            var premium = await _premiumCalculationService.CalculatePremiumAsync(premiumQuote);

            return(Ok(premium));
        }