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
        }