Skip to content

Test a saga state machine

To test a saga state machine using the MassTransit Test Harness:

[Test]
public async Task ASampleTest()
{
await using var provider = new ServiceCollection()
.AddMassTransitTestHarness(cfg =>
{
cfg.AddSagaStateMachine<OrderStateMachine, OrderState>();
})
.BuildServiceProvider(true);
var harness = provider.GetRequiredService<ITestHarness>();
await harness.Start();
var sagaId = Guid.NewGuid();
var orderNumber = "ORDER123";
await harness.Bus.Publish(new OrderSubmitted
{
CorrelationId = sagaId,
OrderNumber = orderNumber
});
Assert.That(await harness.Consumed.Any<OrderSubmitted>());
var sagaHarness = harness.GetSagaStateMachineHarness<OrderStateMachine, OrderState>();
Assert.That(await sagaHarness.Consumed.Any<OrderSubmitted>());
Assert.That(await sagaHarness.Created.Any(x => x.CorrelationId == sagaId));
var instance = sagaHarness.Created.ContainsInState(sagaId, sagaHarness.StateMachine, sagaHarness.StateMachine.Submitted);
Assert.IsNotNull(instance, "Saga instance not found");
Assert.That(instance.OrderNumber, Is.EqualTo(orderNumber));
Assert.IsTrue(await harness.Published.Any<OrderApprovalRequired>());
// test side effects of OrderState here
}