public async Task <OrderInsuranceResponseDto> GetOrderInsuranceAsync(OrderInsuranceRequestDto request)
        {
            var productsInsuranceTasks = new List <Task <ProductInsurance> >();

            foreach (var productId in request.ProductsIds)
            {
                productsInsuranceTasks.Add(_productInsuranceService.GetProductInsuranceDetailsAsync(productId));
            }
            var productsInsurance = await Task.WhenAll(productsInsuranceTasks);

            if (productsInsurance.IsEmpty())
            {
                _logger.LogInformation($"Could not proceed with Get order insurance; products' insurance were null/empty.");
                return(null);
            }
            var order = new Order()
            {
                Products = productsInsurance.ToList()
            };

            var totalInsurance = _orderInsuranceManager.CalculateInsurance(order);

            return(new OrderInsuranceResponseDto()
            {
                TotalInsuranceValue = totalInsurance
            });
        }
        public async Task <IActionResult> GetOrderInsuranceAsync([FromBody] OrderInsuranceRequestDto request)
        {
            var productsInsurance = await _orderInsuranceService.GetOrderInsuranceAsync(request);

            if (productsInsurance == null)
            {
                return(NoContent());
            }
            return(Ok(productsInsurance));
        }
        public async Task GetOrderInsurance_ProductsLaptops_Above2000_ExpectedInsurance0(OrderInsuranceRequestDto request, float expectedOrderInsuranceValue)
        {
            var result = await _orderInsuranceController.GetOrderInsuranceAsync(request);

            Assert.IsType <OkObjectResult>(result);
            Assert.Equal(
                expected: expectedOrderInsuranceValue,
                actual: ((OrderInsuranceResponseDto)((OkObjectResult)result).Value).TotalInsuranceValue
                );
        }
        public async Task GetOrderInsurance_ProductsPriceBetween500And2000_ExpectedInsuranceEach1500Euros(OrderInsuranceRequestDto request, float expectedOrderInsuranceValue)
        {
            var result = await _orderInsuranceController.GetOrderInsuranceAsync(request);

            Assert.IsType <OkObjectResult>(result);
            Assert.Equal(
                expected: expectedOrderInsuranceValue,
                actual: ((OrderInsuranceResponseDto)((OkObjectResult)result).Value).TotalInsuranceValue
                );
        }