public async Task Can_retrieve_payment_details_using_BankPaymentId(BankPaymentStatus paymentBankStatus, PaymentGateway.Domain.PaymentStatus expectedStatusInPaymentDetails) { var requestId = Guid.NewGuid(); var paymentRequest = new PaymentRequest(requestId, MerchantsRepository.Amazon, new Money("EUR", 42.66), new PaymentGateway.Infrastructure.Card("4524 4587 5698 1200", "05/19", "321")); var gatewayPaymentId = Guid.NewGuid(); IGenerateGuid guidGenerator = new GuidGeneratorForTesting(gatewayPaymentId); var bankPaymentId = Guid.Parse("3ec8c76c-7dc2-4769-96f8-7e0649ecdfc0"); var cqrs = await PaymentCQRS.Build(paymentBankStatus, new BankPaymentIdGeneratorForTests(bankPaymentId), new AlwaysSuccessBankConnectionBehavior(), new DelayProviderForTesting(TimeSpan.FromMilliseconds(1)), PaymentCQRS.TimeoutProviderForBankResponseWaiting(TimeSpan.FromMilliseconds(200)), Substitute.For <IKnowBufferAndReprocessPaymentRequest>(), Substitute.For <IAmCircuitBreakers>()); await cqrs.RequestsController.ProceedPaymentRequest(paymentRequest, guidGenerator, cqrs.PaymentRequestsMemory, cqrs.PaymentProcessor); var payment = (await cqrs.PaymentReadController.GetPaymentInfo(gatewayPaymentId)).Value; Check.That(payment.AcquiringBankPaymentId).HasAValue(); var paymentDetails = (await cqrs.PaymentDetailsReadController.GetPaymentDetails(payment.AcquiringBankPaymentId.Value)).Value; // The response should include a masked card number and card details along with a // status code which indicates the result of the payment. Check.That(paymentDetails.Card.Number).IsEqualTo("4524 XXXX XXXX XXXX"); Check.That(paymentDetails.Card.Expiry).IsEqualTo("05/19"); Check.That(paymentDetails.Card.Cvv).IsEqualTo("321"); Check.That(paymentDetails.Status).IsEqualTo(expectedStatusInPaymentDetails); Check.That(paymentDetails.Approved).IsEqualTo(expectedStatusInPaymentDetails == PaymentStatus.Success); Check.That(paymentDetails.AcquiringBankPaymentId).IsEqualTo(bankPaymentId); }
internal static async Task <PaymentCQRS> Build(BankPaymentStatus paymentStatus, IGenerateBankPaymentId bankPaymentIdGenerator, IConnectToAcquiringBanks bankConnectionBehavior, IProvideBankResponseTime delayProvider, IProvideTimeout providerForBankResponseWaiting, IKnowBufferAndReprocessPaymentRequest knowBufferAndReprocessPaymentRequest, IAmCircuitBreakers circuitBreakers, IThrowsException gatewayExceptionSimulator = null, IPublishEvents eventsPublisher = null) { var bus = eventsPublisher ?? new InMemoryBus(); var eventSourcedRepository = new EventSourcedRepository <Payment>(new InMemoryEventStore(bus)); var appSettingsAccessor = Substitute.For <IOptionsMonitor <AppSettings> >(); appSettingsAccessor.CurrentValue.Returns(new AppSettings { Executor = ExecutorType.Tests }); var random = Substitute.For <IGenerateAcquiringBankPaymentStatus>(); random.GeneratePaymentStatus().Returns(paymentStatus); var paymentsIdsMemory = new PaymentIdsMemory(); var bankAdapterSelector = new BankAdapterSelector(random, bankPaymentIdGenerator, delayProvider, bankConnectionBehavior, paymentsIdsMemory, NullLogger <BankAdapterSelector> .Instance); var merchantToBankAdapterMapper = new MerchantToBankAdapterMapper(bankAdapterSelector); var paymentRequestsMemory = new PaymentRequestsMemory(); var paymentProcessor = new PaymentProcessor(eventSourcedRepository, NullLogger <PaymentProcessor> .Instance, providerForBankResponseWaiting, knowBufferAndReprocessPaymentRequest, circuitBreakers, gatewayExceptionSimulator); var optionMonitor = Substitute.For <IOptionsMonitor <AppSettings> >(); optionMonitor.CurrentValue.Returns(new AppSettings { Executor = ExecutorType.Tests }); var paymentRequestCommandHandler = new PaymentRequestCommandHandler(eventSourcedRepository, paymentRequestsMemory, paymentProcessor, merchantToBankAdapterMapper, new RequestBankSynchronyMaster(optionMonitor), NullLogger <PaymentRequestCommandHandler> .Instance); var requestController = new PaymentRequestsController(paymentRequestCommandHandler, NullLogger <PaymentRequestsController> .Instance); var readController = new PaymentReadController(eventSourcedRepository); var paymentDetailsRepository = new PaymentDetailsRepository(NullLogger <PaymentDetailsRepository> .Instance); var paymentDetailsReadController = new PaymentsDetailsController(paymentsIdsMemory, paymentDetailsRepository); var readProjections = new ReadProjections(bus, paymentDetailsRepository); await readProjections.StartAsync(new CancellationToken(false)); var gatewayPaymentsIdsController = new GatewayPaymentsIdsController(paymentsIdsMemory); var acquiringBankPaymentsIdsController = new AcquiringBankPaymentsIdsController(paymentsIdsMemory); return(new PaymentCQRS(requestController, readController, paymentDetailsReadController, paymentRequestsMemory, paymentProcessor, gatewayPaymentsIdsController, acquiringBankPaymentsIdsController, readProjections)); }
public void OpenBanking_BankPaymentList_EmptyList() { const BankPaymentStatus status = BankPaymentStatus.REQUEST_CONSUMER_CONSENT; var result = ReportingService.FindBankPaymentTransactions(1, 10) .Where(SearchCriteria.StartDate, DateTime.Now.AddDays(-5)) .And(SearchCriteria.EndDate, DateTime.Now) .And(SearchCriteria.BankPaymentStatus, status) .Execute(); Assert.IsNotNull(result); Assert.AreEqual(0, result.Results.Count); }
public BankResponse(Guid bankPaymentId, Guid gatewayPaymentId, BankPaymentStatus paymentStatus) { BankPaymentId = bankPaymentId; GatewayPaymentId = gatewayPaymentId; PaymentStatus = paymentStatus; }
public async Task Return_proper_payment_status_When_AcquiringBank_accepts_or_reject_payment(BankPaymentStatus bankPaymentStatus, PaymentStatus expectedPaymentStatusReturnedByGateway) { var requestId = Guid.NewGuid(); var paymentRequest = TestsUtils.BuildPaymentRequest(requestId, MerchantsRepository.Apple); var gatewayPaymentId = Guid.NewGuid(); IGenerateGuid guidGenerator = new GuidGeneratorForTesting(gatewayPaymentId); var bankPaymentId = Guid.Parse("3ec8c76c-7dc2-4769-96f8-7e0649ecdfc0"); var cqrs = await PaymentCQRS.Build(bankPaymentStatus, new BankPaymentIdGeneratorForTests(bankPaymentId), new AlwaysSuccessBankConnectionBehavior(), new DelayProviderForTesting(TimeSpan.FromMilliseconds(1)), PaymentCQRS.TimeoutProviderForBankResponseWaiting(TimeSpan.FromMilliseconds(200)), Substitute.For <IKnowBufferAndReprocessPaymentRequest>(), Substitute.For <IAmCircuitBreakers>()); await cqrs.RequestsController.ProceedPaymentRequest(paymentRequest, guidGenerator, cqrs.PaymentRequestsMemory, cqrs.PaymentProcessor); var payment = (await cqrs.PaymentReadController.GetPaymentInfo(gatewayPaymentId)).Value; Check.That(payment.RequestId).IsEqualTo(requestId); Check.That(payment.GatewayPaymentId).IsEqualTo(gatewayPaymentId); Check.That(payment.Status).IsEqualTo(expectedPaymentStatusReturnedByGateway); Check.That(payment.Approved).IsEqualTo(payment.Status == PaymentGateway.Domain.PaymentStatus.Success); Check.That(payment.AcquiringBankPaymentId).IsEqualTo(bankPaymentId); }
public async Task Return_InternalServerEror_When_AcquiringBank_sent_duplicated_PaymentId_Using_StupidBank(BankPaymentStatus bankPaymentStatus, PaymentStatus expectedPaymentStatusReturnedByGateway) { var requestId = Guid.Parse("9cb25b95-45ba-4100-a180-deb13259d0e1"); var paymentRequest = TestsUtils.BuildPaymentRequest(requestId, MerchantsRepository.FailFromThe2ndPaymentMerchant); var secondRequestId = Guid.Parse("9c940897-b1c4-4598-96a7-82502ca51845"); var secondPaymentRequest = TestsUtils.BuildPaymentRequest(secondRequestId, MerchantsRepository.FailFromThe2ndPaymentMerchant); var gatewayPaymentId = Guid.Parse("002ee45f-fdfb-4666-b504-70aa26ecf646"); var secondGatewayPaymentId = Guid.Parse("4cc3dd04-b3d8-4be4-8c68-e744c387fb6c"); IGenerateGuid gatewayPaymentIdGenerator = Substitute.For <IGenerateGuid>(); gatewayPaymentIdGenerator.Generate().Returns(gatewayPaymentId, secondGatewayPaymentId); var cqrs = await PaymentCQRS.Build(bankPaymentStatus, new DefaultBankPaymentIdGenerator(), new AlwaysSuccessBankConnectionBehavior(), new DelayProviderForTesting(TimeSpan.FromMilliseconds(1)), PaymentCQRS.TimeoutProviderForBankResponseWaiting(TimeSpan.FromMilliseconds(200)), Substitute.For <IKnowBufferAndReprocessPaymentRequest>(), Substitute.For <IAmCircuitBreakers>()); await cqrs.RequestsController.ProceedPaymentRequest(paymentRequest, gatewayPaymentIdGenerator, cqrs.PaymentRequestsMemory, cqrs.PaymentProcessor); await cqrs.RequestsController.ProceedPaymentRequest(secondPaymentRequest, gatewayPaymentIdGenerator, cqrs.PaymentRequestsMemory, cqrs.PaymentProcessor); var secondFailedPayment = (await cqrs.PaymentReadController.GetPaymentInfo(secondGatewayPaymentId)).Value; Check.That(secondFailedPayment.RequestId).IsEqualTo(secondRequestId); Check.That(secondFailedPayment.GatewayPaymentId).IsEqualTo(secondGatewayPaymentId); Check.That(secondFailedPayment.Status).IsEqualTo(expectedPaymentStatusReturnedByGateway); Check.That(secondFailedPayment.Approved).IsEqualTo(secondFailedPayment.Status == PaymentGateway.Domain.PaymentStatus.Success); Check.That(secondFailedPayment.AcquiringBankPaymentId).IsNull(); }
public SocieteGeneraleResponse(Guid bankPaymentId, Guid gatewayPaymentId, BankPaymentStatus paymentStatus) { BankPaymentId = bankPaymentId; GatewayPaymentId = gatewayPaymentId; PaymentStatus = paymentStatus; }