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(); }
private void ClearingApiAuthorizesSettlement() { _clearingApi.ProcessRequest(Arg.Any <SettlementRequest>()) .Returns(new SettlementResponse { TransactionId = transactionId, AccountNumber = 1234, ProviderTransactionId = $"{Guid.NewGuid()}", ClearingStatus = ClearingStatus.Authorized }); }
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>()); }