//[Repeat(10)] public async Task Return_AcceptedAtRouteResult_And_have_correct_PaymentStatus_When_Processing_PaymentRequest_timeout() { var requestId = Guid.NewGuid(); var paymentRequest = TestsUtils.BuildPaymentRequest(requestId, MerchantsRepository.Amazon); var gatewayPaymentId = Guid.NewGuid(); IGenerateGuid guidGenerator = new GuidGeneratorForTesting(gatewayPaymentId); var bankPaymentId = Guid.Parse("3ec8c76c-7dc2-4769-96f8-7e0649ecdfc0"); var timeoutTolerance = TimeSpan.FromMilliseconds(80); var delayBiggerThanTolerance = timeoutTolerance * 5; var delayProvider = Substitute.For <IProvideBankResponseTime>(); delayProvider.Delays().Returns(delayBiggerThanTolerance, //timeout delayBiggerThanTolerance, //timeout delayBiggerThanTolerance, //timeout timeoutTolerance.Divide(20) // NO TIMEOUT ); var knowBufferAndReprocessPaymentRequest = Substitute.For <IKnowBufferAndReprocessPaymentRequest>(); var circuitBreakerRepository = new CircuitBreakerRepository(); var cqrs = await PaymentCQRS.Build(BankPaymentStatus.Accepted, new BankPaymentIdGeneratorForTests(bankPaymentId), new AlwaysSuccessBankConnectionBehavior(), delayProvider, PaymentCQRS.TimeoutProviderForBankResponseWaiting(timeoutTolerance), knowBufferAndReprocessPaymentRequest, circuitBreakerRepository); var actionResult = await cqrs.RequestsController.ProceedPaymentRequest(paymentRequest, guidGenerator, cqrs.PaymentRequestsMemory, cqrs.PaymentProcessor); Check.That(actionResult).IsInstanceOf <AcceptedAtRouteResult>(); PaymentDto payment = (await cqrs.PaymentReadController.GetPaymentInfo(gatewayPaymentId)).Value; Check.That(payment.RequestId).IsEqualTo(requestId); Check.That(payment.GatewayPaymentId).IsEqualTo(gatewayPaymentId); Check.That(payment.Status).IsEqualTo(PaymentStatus.Pending); // circuit breaker should open Check.That(payment.Approved).IsNull(); Check.That(payment.AcquiringBankPaymentId).IsNull(); knowBufferAndReprocessPaymentRequest.ReceivedWithAnyArgs(1).Buffer(default, default);
public CircuitBreakerMessageReceivedTrigger(CircuitBreakerRepository circuitBreakerRepository) { _circuitBreakerRepository = circuitBreakerRepository; }
public CircuitBreakerOpenTimeoutTimerTrigger(ICircuitBreakerStateService circuitBreakerStateService, CircuitBreakerRepository circuitBreakerRepository) { _circuitBreakerStateService = circuitBreakerStateService; _circuitBreakerRepository = circuitBreakerRepository; }