public async Task WHEN_exceptionAfterWhile_THEN_wholeWhileShouldBeCompensated() { // given ISaga saga = await sagaCoordinator.Publish(new CreateWhileSagaEvent()); // when await Assert.ThrowsAsync <Exception>(async() => await sagaCoordinator.Publish(new Test2Event() { ID = saga.Data.ID, Counter = 2 })); // then ISaga persistedSaga = await sagaPersistance.Get(saga.Data.ID); WhileSagaData data = persistedSaga.Data as WhileSagaData; data.Counter.ShouldBe(0); data.Value.ShouldBe(20); data.SecondValue.ShouldBe(1); persistedSaga.ExecutionState.History.Count.ShouldBe( 1 + // event handler 3 * 2 + // while + steps 1 + // last while check 1 + // then 1); // exception persistedSaga.ExecutionState.History. Where(s => s.CompensationData == null).Count().ShouldBe(0); persistedSaga.ExecutionState.History. Where(s => s.ResumeData != null).Count().ShouldBe(0); }
public async Task WHEN_whileIsUsed_THEN_shouldRunProperly() { // given ISaga saga = await sagaCoordinator.Publish(new CreateWhileSagaEvent()); // when await sagaCoordinator.Publish(new Test1Event() { ID = saga.Data.ID, Counter = 10 }); // then ISaga persistedSaga = await sagaPersistance.Get(saga.Data.ID); WhileSagaData data = persistedSaga.Data as WhileSagaData; data.Counter.ShouldBe(0); data.Value.ShouldBe(100); persistedSaga.ExecutionState.History.Count.ShouldBe( 1 + // event handler 3 * 10 + // while + steps 1 + // last while check 1); // transition to }