public List <CalculationResponseModel> CalculatePremiums([FromBody] CalculationRequestModel model)
        {
            model.Tariff.InsuranceEndDate = model.Tariff.FullYear ? null : model.Tariff.InsuranceEndDate;
            List <CalculationRequestModel>  requestModels = PrepareDataForCalculation(model);
            List <CalculationResponseModel> result        = new List <CalculationResponseModel>();

            foreach (CalculationRequestModel requestModel in requestModels)
            {
                string requestString              = JsonConvert.SerializeObject(requestModel);
                string responseString             = ApiHelper.MakeRequest(_apiConfiguration.Url + "travel/calculation", _apiConfiguration.Username, _apiConfiguration.Password, "POST", requestString);
                CalculationResponseModel response = JsonConvert.DeserializeObject <CalculationResponseModel>(responseString);
                response.ProductVariant = requestModel.Tariff.ProductVariant;
                response.AmountInsured  = requestModel.Tariff.AmountInsured;

                result.Add(response);
            }


            return(result);
        }
        async public Task GetCalculationCurrentVersion_GivenCalculationExistsAndWasWasFoundInCache_ReturnsOK()
        {
            //Arrange
            const string   specificationId  = "specId";
            DateTimeOffset lastModifiedDate = DateTimeOffset.Now;

            CalculationResponseModel calculation = new CalculationResponseModel
            {
                Author          = new Reference(UserId, Username),
                LastUpdated     = lastModifiedDate,
                SourceCode      = "source code",
                Version         = 1,
                Name            = "any name",
                Id              = CalculationId,
                FundingStreamId = "18/19",
                CalculationType = CalculationType.Additional,
                SpecificationId = specificationId,
            };

            ILogger logger = CreateLogger();

            ICalculationsRepository calculationsRepository = CreateCalculationsRepository();

            ICacheProvider cacheProvider = CreateCacheProvider();

            cacheProvider
            .GetAsync <CalculationResponseModel>(Arg.Is($"{CacheKeys.CurrentCalculation}{CalculationId}"))
            .Returns(calculation);

            CalculationService service = CreateCalculationService(logger: logger, calculationsRepository: calculationsRepository, cacheProvider: cacheProvider);

            //Act
            IActionResult result = await service.GetCalculationById(CalculationId);

            //Assert
            result
            .Should()
            .BeOfType <OkObjectResult>()
            .Which
            .Value
            .Should().BeEquivalentTo(new CalculationResponseModel
            {
                Author          = new Reference(UserId, Username),
                LastUpdated     = lastModifiedDate,
                SourceCode      = "source code",
                Version         = 1,
                Name            = "any name",
                Id              = CalculationId,
                FundingStreamId = "18/19",
                CalculationType = CalculationType.Additional,
                SpecificationId = specificationId,
            });

            await calculationsRepository
            .Received(0)
            .GetCalculationById(Arg.Any <string>());

            await cacheProvider
            .Received(1)
            .GetAsync <CalculationResponseModel>(Arg.Is($"{CacheKeys.CurrentCalculation}{CalculationId}"));
        }
Пример #3
0
 private async Task UpdateCalculationInCache(CalculationResponseModel currentVersion)
 {
     // Set current version in cache
     await _cachePolicy.ExecuteAsync(() => _cacheProvider.SetAsync($"{CacheKeys.CurrentCalculation}{currentVersion.Id}", currentVersion, TimeSpan.FromDays(7), true));
 }