public void RescheduleTimerOnError()
            {
                eventPublisher.Setup(mock => mock.Publish(It.IsAny <IEnumerable <Header> >(), It.IsAny <EventEnvelope>())).Throws(new InvalidOperationException());

                timer.InvokeCallback();

                Assert.True(timer.Changed);
            }
            public void RescheduleTimer()
            {
                var dispatcher = new TimeoutDispatcher(new Lazy <IStoreSagas>(() => sagaStore.Object), new Lazy <IPublishEvents>(() => eventPublisher.Object), callback => timer = new FakeTimer(callback));

                sagaStore.Setup(mock => mock.GetScheduledTimeouts(It.IsAny <DateTime>())).Returns(new SagaTimeout[0]);
                eventPublisher.Setup(mock => mock.Publish(It.IsAny <IEnumerable <Header> >(), It.IsAny <EventEnvelope>())).Throws(new InvalidOperationException());
                dispatcher.EnsureElapsedTimeoutsDispatched();
                timer.InvokeCallback();

                Assert.True(timer.Changed);
                sagaStore.Verify(mock => mock.GetScheduledTimeouts(It.IsAny <DateTime>()), Times.Once());
            }
            public OnPostSave()
            {
                now               = DateTime.UtcNow;
                sagaStore         = new Mock <IStoreSagas>();
                eventPublisher    = new Mock <IPublishEvents>();
                timeoutDispatcher = new TimeoutDispatcher(new Lazy <IStoreSagas>(() => sagaStore.Object), new Lazy <IPublishEvents>(() => eventPublisher.Object), callback => timer = new FakeTimer(callback));
                sagaTimeout       = new SagaTimeout(typeof(FakeSaga), GuidStrategy.NewGuid(), now.AddMinutes(5));

                SystemTime.OverrideWith(() => now);

                sagaStore.Setup(mock => mock.GetScheduledTimeouts(It.IsAny <DateTime>())).Returns(new[] { sagaTimeout });

                timer.InvokeCallback();
                timer.Reset();
            }