public async Task should_start() { var(message, _) = await MessageInitializerCache <BatchReceived> .InitializeMessage( new { BatchId = NewId.NextGuid(), Timestamp = DateTime.UtcNow, BatchAction = BatchAction.CancelOrders, ActiveThreshold = 5, OrderIds = new Guid[] { Guid.NewGuid(), Guid.NewGuid() } }); await _testHarness.InputQueueSendEndpoint.Send(message); var sagaId = await _sagaRepository.ShouldContainSagaInState(message.BatchId, _stateMachine, x => x.Started, _testHarness.TestTimeout); sagaId.HasValue.Should().BeTrue(); var saga = _sagaRepository[sagaId.Value]; saga.Instance.CorrelationId.Should().Be(message.BatchId); saga.Instance.CreateTimestamp.Should().Be(message.Timestamp); saga.Instance.UpdateTimestamp.Should().Be(message.Timestamp); saga.Instance.Action.Should().Be(message.Action); saga.Instance.ProcessingOrderIds.Values.Should().BeEquivalentTo(message.OrderIds); }
private async Task SetupStateMachine( Guid sagaId, Guid customerId, String toState) { if (String.IsNullOrEmpty(toState)) { return; } await MoveStateMachineForward(BuildStartMessage(), x => x.AwaitingDetails); var awaitingDetailsId = await _Repository.ShouldContainSagaInState( sagaId, _Machine, x => x.AwaitingDetails, _TestTimeout); Assert.IsNotNull(awaitingDetailsId, "Error, expected state machine in AwaitingDetails state"); if (toState == _Machine.AwaitingDetails.Name) { return; } // ...and more stuff to move to later states, depending on // where I want my test's starting point to be... async Task MoveStateMachineForward <T>( T message, Func <ProcessStateMachine, Automatonymous.State> targetState) where T : class { await InputQueueSendEndpoint.Send(message); var foundSagaId = await _Repository.ShouldContainSagaInState( sagaId, _Machine, targetState, _TestTimeout); Assert.IsTrue(foundSagaId.HasValue); } IStartProcess BuildStartMessage() { return(new StartProcessMessage(sagaId, customerId)); } }