public async Task POST_Should_call_save()
        {
            const decimal rate           = 20;
            const decimal donationAmount = 100M;
            var           donationReq    = MakeDonationRequest(donationAmount);

            _taxRateStorage.CurrentRate.Returns(rate);

            await _sut.Donate(donationReq, CancellationToken.None);

            var donation = Donation.MakeNew(donationReq.Name,
                                            donationReq.PostCode,
                                            donationReq.Amount,
                                            0);

            await _repository.Received(1).Save(donation, CancellationToken.None);
        }
        public async Task <ActionResult <DonationResponse> > Donate(DonationRequest model, CancellationToken cancellationToken)
        {
            if (!ModelState.IsValid)
            {
                var error = BuildErrorMessage();
                return(BadRequest(error));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var giftAid = _calculator.Calculate(model.Amount);

            var donation = Donation.MakeNew(model.Name,
                                            model.PostCode,
                                            model.Amount,
                                            giftAid);
            var id = await _repository.Save(donation, cancellationToken);

            return(Ok(new DonationResponse(id, giftAid)));
        }