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}