예제 #1
0
        public async Task ShouldReturnValidCalculateGiftAidResponse()
        {
            var getGiftAidAmountRequest = new GiftAidRequest
            {
                Amount = 30
            };

            var expectedResponse = new GiftAidResponse
            {
                DonationAmount = 30,
                GiftAidAmount  = 7.5m
            };

            _optionsMonitorMock.Setup(o => o.CurrentValue).Returns(new AppSettings
            {
                TaxRatePercentage     = "20",
                MinimumDonationAmount = "20",
                MaximumDonationAmount = "50"
            });

            var controller      = new GiftAidController(_optionsMonitorMock.Object, _giftAidCalculatorMock.Object, _donationDeclarationServiceMock.Object);
            var response        = controller.GetGiftAidAmount(getGiftAidAmountRequest);
            var responseContext = response as ObjectResult;

            Assert.AreEqual(200, responseContext.StatusCode);
            Assert.AreEqual(expectedResponse.ToString(), responseContext.Value.ToString());
        }
예제 #2
0
        public async Task ShouldReturnBadRequestWhenAmountIsNotValid()
        {
            var getGiftAidAmountRequest = new GiftAidRequest
            {
                Amount = 10
            };

            _optionsMonitorMock.Setup(o => o.CurrentValue).Returns(new AppSettings
            {
                TaxRatePercentage     = "20",
                MinimumDonationAmount = "20",
                MaximumDonationAmount = "50"
            });

            var expectedResponse = new ObjectResult("Donation amount can not be smaller than 20 and can not be larger than 50");

            expectedResponse.StatusCode = 400;

            var controller      = new GiftAidController(_optionsMonitorMock.Object, _giftAidCalculatorMock.Object, _donationDeclarationServiceMock.Object);
            var response        = controller.GetGiftAidAmount(getGiftAidAmountRequest);
            var responseContext = response as ObjectResult;

            Assert.AreEqual(expectedResponse.StatusCode, responseContext.StatusCode);
            Assert.AreEqual(expectedResponse.Value.ToString(), responseContext.Value.ToString());
        }
예제 #3
0
        public void GetGiftAidValidRequestReturnsValidResponse()
        {
            // Arrange
            var request = new GiftAidRequest {
                Amount = 500
            };

            // Act
            var createdResponse = _giftAidController.GetGiftAid(request) as OkObjectResult;

            // Assert
            Assert.IsType <GiftAidResponse>(createdResponse.Value);
        }
예제 #4
0
        public void GetGiftAidReturnsOkResult()
        {
            // Arrange
            var request = new GiftAidRequest {
                Amount = 300
            };

            // Act
            var createdResponse = _giftAidController.GetGiftAid(request);

            // Assert
            Assert.IsType <OkObjectResult>(createdResponse);
        }
예제 #5
0
        public async Task <ActionResult <GiftAidResponse> > Get([FromQuery] GiftAidRequest request)
        {
            var response = await _mediator.Send(new CalculateGiftAidRequest
            {
                DonationAmount = request.Amount
            });

            _logger.LogDebug("Reclaim {GiftAidAmount} for a {DonationAmount} donation.", request.Amount, response.GiftAidAmount);

            return(new GiftAidResponse
            {
                GiftAidAmount = response.GiftAidAmount,
                DonationAmount = request.Amount
            });
        }
예제 #6
0
        public void GetGiftAidReturnCorrectGiftAid(decimal donationAmount, decimal expectedValue)
        {
            // Arrange
            var request = new GiftAidRequest {
                Amount = donationAmount
            };

            // Act
            var result = _giftAidController.GetGiftAid(request) as OkObjectResult;

            var response = (GiftAidResponse)result.Value;

            // Assert
            Assert.Equal(response.GiftAidAmount, expectedValue);
        }
예제 #7
0
        public async Task ShouldReturnInternalServerErrorWhenConfigurationIsNotValid()
        {
            var getGiftAidAmountRequest = new GiftAidRequest
            {
                Amount = 10
            };

            _optionsMonitorMock.Setup(o => o.CurrentValue).Returns(new AppSettings());

            var expectedResponse = new ObjectResult("Internal Server Error: Definition of one or more configuration settings of the application are invalid.");

            expectedResponse.StatusCode = 500;

            var controller      = new GiftAidController(_optionsMonitorMock.Object, _giftAidCalculatorMock.Object, _donationDeclarationServiceMock.Object);
            var response        = controller.GetGiftAidAmount(getGiftAidAmountRequest);
            var responseContext = response as ObjectResult;

            Assert.AreEqual(expectedResponse.StatusCode, responseContext.StatusCode);
            Assert.AreEqual(expectedResponse.Value.ToString(), responseContext.Value.ToString());
        }
예제 #8
0
        public ActionResult GetGiftAid([FromQuery] GiftAidRequest giftAidRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (giftAidRequest is null)
            {
                return(BadRequest("Invalid donation"));
            }

            var calculatedGiftAidAmount = _giftAidService.Calculate(giftAidRequest.Amount);

            var giftAidResponse = new GiftAidResponse
            {
                DonationAmount = giftAidRequest.Amount,
                GiftAidAmount  = calculatedGiftAidAmount
            };

            return(Ok(giftAidResponse));
        }