Пример #1
0
        public ClearingSaga(IClearingApi clearingApi)
        {
            _clearingApi = clearingApi;
            InstanceState(x => x.CurrentState);

            Initially(When(Authorization)
                      .TransitionTo(Authorizing)
                      .Then(context => context.GetOrAddPayload(() => _clearingApi.ProcessRequest(context.Data)))
                      .Respond(context => context.GetPayload <AuthorizationResponse>())
                      .Then(context =>
            {
                AuthorizationResponse response;
                if (context.TryGetPayload(out response) && response.ClearingStatus == ClearingStatus.Rejected)
                {
                    this.RaiseEvent(context.Instance, Rejected);
                }
            }));

            During(Authorizing,
                   When(Rejected)
                   .Finalize(),
                   When(Settlement)
                   .TransitionTo(Settling)
                   .Respond(context => _clearingApi.ProcessRequest(context.Data))
                   .Finalize());

            SetCompletedWhenFinalized();
        }
Пример #2
0
 private void ClearingApiAuthorizesSettlement()
 {
     _clearingApi.ProcessRequest(Arg.Any <SettlementRequest>())
     .Returns(new SettlementResponse
     {
         TransactionId         = transactionId,
         AccountNumber         = 1234,
         ProviderTransactionId = $"{Guid.NewGuid()}",
         ClearingStatus        = ClearingStatus.Authorized
     });
 }
Пример #3
0
        public async Task Calls_clearingApi()
        {
            var sagaId = Guid.NewGuid();

            _clearingApi.ProcessRequest(Arg.Any <AuthorizationRequest>()).Returns(new AuthorizationResponse());
            var req = await Bus.Request(InputQueueAddress, new AuthorizationRequest { TransactionId = sagaId }, x =>
            {
                x.Handle <AuthorizationResponse>();
                x.Timeout = TestTimeout;
            }, TestCancellationToken);

            await req.Task;

            var saga = await _repository.ShouldContainSaga(x => x.CorrelationId == sagaId, TestTimeout);

            Assert.IsTrue(saga.HasValue);

            _clearingApi.Received().ProcessRequest(Arg.Any <AuthorizationRequest>());
        }