public async Task Handle_ShouldSavePayment_WhenPaymentProcessCompleted()
        {
            var request = new PaymentProcessCommand();
            var paymentProcessHandler = CreatePaymentProcessHandler();

            var expectedResponse = new PaymentProcessResponse {
                TransactionId = "123456789", Status = "Completed"
            };

            mockBank.Setup(x => x.ProcessPayment(It.IsAny <Payment>()))
            .ReturnsAsync(expectedResponse);
            mockEfRepository.Setup(x => x.AddAsync(It.IsAny <Payment>())).ReturnsAsync(new Payment
            {
                Id                = Guid.NewGuid(),
                CardNumber        = "1234-1234-1234-4568",
                TransactionId     = expectedResponse.TransactionId,
                TransactionStatus = expectedResponse.Status
            });

            var response = await paymentProcessHandler.Handle(request, default);

            response.ShouldNotBeNull();
            response.ShouldBeOfType <PaymentProcessResponse>();
            mockBank.Verify(x => x.ProcessPayment(It.IsAny <Payment>()), Times.AtLeastOnce());
            mockEfRepository.Verify(x => x.AddAsync(It.IsAny <Payment>()),
                                    Times.AtLeastOnce);
        }
Пример #2
0
        public async Task Post_ShouldReturnSuccessfulPaymentResponse_WhenPaymentIsProcessed()
        {
            var expectedResponse = new PaymentProcessResponse
            {
                TransactionId = new Guid().ToString(),
                Status        = "Success"
            };
            var paymentsController = CreatePaymentsController();

            mockMediator.Setup(x => x.Send(It.IsAny <PaymentProcessCommand>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(expectedResponse);

            var response = await paymentsController.Post(new PaymentProcessCommand());

            response.ShouldNotBeNull();
            var result          = response.ShouldBeOfType <OkObjectResult>();
            var paymentResponse = result.Value.ShouldBeOfType <PaymentProcessResponse>();

            paymentResponse.ShouldBeSameAs(expectedResponse);
        }