public async Task Return_Error_Result_If_Payment_NotFound()
        {
            var paymentId             = Guid.NewGuid().ToString();
            var mockPaymentRepository = new Mock <IPaymentRepository>();

            mockPaymentRepository.Setup(x => x.FindBy(It.IsAny <string>()))
            .ReturnsAsync(null as Payment);
            var mockCyptoService = new Mock <ICryptoService>();
            var sut = new GetPaymentQueryHandler(mockPaymentRepository.Object, mockCyptoService.Object);

            var result = await sut.HandleAsync(new GetPaymentQuery { PaymentId = paymentId }) as ErrorResult;

            result.Message.Should().Be($"There is no payment with id: {paymentId}");
        }
        public async Task Get_Payment_Details()
        {
            var paymentId             = Guid.NewGuid().ToString();
            var payment               = GivenPayment(paymentId);
            var mockPaymentRepository = new Mock <IPaymentRepository>();

            mockPaymentRepository.Setup(x => x.FindBy(It.IsAny <string>()))
            .ReturnsAsync(payment);
            var mockCyptoService = new Mock <ICryptoService>();

            mockCyptoService.Setup(x => x.Decrypt(payment.CardNumber, It.IsAny <string>()))
            .Returns(cardNumber);
            var sut = new GetPaymentQueryHandler(mockPaymentRepository.Object, mockCyptoService.Object);

            var result = await sut.HandleAsync(new GetPaymentQuery { PaymentId = paymentId }) as SuccessResult;

            result.Amount.Should().Be(payment.Amount);
            result.PaymentDate.Should().Be(payment.CreatedDate);
            result.Currency.Should().Be(payment.Currency);
            result.CardNumber.Should().Be(cardNumber.Mask());
        }