public async Task MakePaymentRequestCallsThroughToMediator()
        {
            MakePaymentCommand command = new MakePaymentCommand();
            var mediator = new Mock <IMediator>();
            var sut      = new PaymentsController(mediator.Object);

            await sut.MakePayment(command);

            mediator.Verify(x => x.Send(It.Is <MakePaymentCommand>(y => y == command), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task MakePayment_Returns201CreatedWithResponse_WhenPaymentMadeSuccessfully()
        {
            // Arrange
            var(makePaymentCommandDto, makePaymentCommand) = CreateFakeMakePaymentCommandAndDto();

            var fakeSuccessPaymentResponse = CreateFakeSuccessPaymentResponse();


            A.CallTo(() => _mapper.Map <MakePaymentCommand>(makePaymentCommandDto)).Returns(makePaymentCommand);

            A.CallTo(() => _mediator.Send(A <IRequest <PaymentResponse> > ._, A <CancellationToken> ._))
            .Returns(Task.FromResult(fakeSuccessPaymentResponse));

            // Act
            var action            = _sut.MakePayment(makePaymentCommandDto);
            var actionResult      = (CreatedResult)action.Result;
            var paymentResponseId = actionResult.Value
                                    .GetType().GetProperty("Id").GetValue(actionResult.Value).ToString();

            // Assert
            Assert.AreEqual(actionResult.StatusCode, 201);
            Assert.AreEqual(paymentResponseId, fakeSuccessPaymentResponse.Id.ToString());
        }