public async Task Should_start_after_stop_when_handling_failed() { var exception = new InvalidOperationException(); A.CallTo(() => eventConsumer.On(envelope)) .Throws(exception); var @event = new StoredEvent("Stream", Guid.NewGuid().ToString(), 123, eventData); await sut.OnActivateAsync(consumerName); await sut.ActivateAsync(); await OnEventAsync(eventSubscription, @event); await sut.StopAsync(); await sut.StartAsync(); await sut.StartAsync(); state.Should().BeEquivalentTo(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); A.CallTo(() => eventConsumer.On(envelope)) .MustHaveHappened(); A.CallTo(() => persistence.WriteSnapshotAsync(A <EventConsumerState> .Ignored)) .MustHaveHappened(Repeated.Exactly.Twice); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> .Ignored, A <string> .Ignored, A <string> .Ignored)) .MustHaveHappened(Repeated.Exactly.Twice); }
public async Task Should_start_after_stop_when_handling_failed() { var exception = new InvalidOperationException(); A.CallTo(() => eventConsumer.On(envelope)) .Throws(exception); var @event = new StoredEvent("Stream", Guid.NewGuid().ToString(), 123, eventData); await sut.ActivateAsync(consumerName); await sut.ActivateAsync(); await OnEventAsync(eventSubscription, @event); await sut.StopAsync(); await sut.StartAsync(); await sut.StartAsync(); AssetGrainState(new EventConsumerState { IsStopped = false, Position = initialPosition, Error = null }); A.CallTo(() => eventConsumer.On(envelope)) .MustHaveHappened(); A.CallTo(() => grainState.WriteAsync()) .MustHaveHappened(2, Times.Exactly); A.CallTo(() => eventSubscription.StopAsync()) .MustHaveHappened(1, Times.Exactly); A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, A <string> ._)) .MustHaveHappened(2, Times.Exactly); }