public async Task <decimal> CalculateTrolleyTotal([FromBody] TrolleyInfoModel trolleyInfoModel)
        {
            if (trolleyInfoModel == null)
            {
                throw new BadApiRequestException($"{nameof(trolleyInfoModel)} is required.");
            }
            var trolleyInfo = _mapper.Map <TrolleyInfoModel, TrolleyInfo>(trolleyInfoModel);
            var total       = await _TrolleyCalculator.CalculateTrolley(trolleyInfo);

            return(total);
        }
        public void CalculateTrolleyTotal_WhenInputIsNull_ThrowsBadRequestException()
        {
            // Arrange
            var sutFactory = new SutTrolleyTotalControllerFactory();
            TrolleyInfoModel trolleyInfoModel = null;

            var sutTrolleyTotalController = sutFactory.Create();

            // Act
            Func <Task> action = async() => await sutTrolleyTotalController.CalculateTrolleyTotal(trolleyInfoModel);

            // Assert
            action.Should()
            .ThrowExactly <BadApiRequestException>()
            .WithMessage("trolleyInfoModel is required.");
        }
        public async void CalculateTrolleyTotal_WhenInputIsValid_ReturnsCorrectResultFromService()
        {
            // Arrange
            var sutFactory = new SutTrolleyTotalControllerFactory();
            var valueReturnedFromService = 12.3m;
            var trolleyInfoModel         = new TrolleyInfoModel();
            var trolleyInfo = new TrolleyInfo();

            sutFactory.MockMapper
            .Setup(o => o.Map <TrolleyInfoModel, TrolleyInfo>(trolleyInfoModel))
            .Returns(trolleyInfo);

            sutFactory.MockTrolleyCalculator
            .Setup(o => o.CalculateTrolley(trolleyInfo))
            .Returns(Task.FromResult(valueReturnedFromService));

            var sutTrolleyTotalController = sutFactory.Create();

            // Act
            var result = await sutTrolleyTotalController.CalculateTrolleyTotal(trolleyInfoModel);

            // Assert
            result.Should().Be(valueReturnedFromService);
        }