public EventConsumerGrainTests()
        {
            grainState.Value.Position = initialPosition;

            consumerName = eventConsumer.GetType().Name;

            A.CallTo(() => eventStore.CreateSubscription(A <IEventSubscriber> ._, A <string> ._, A <string> ._))
            .Returns(eventSubscription);

            A.CallTo(() => eventConsumer.Name)
            .Returns(consumerName);

            A.CallTo(() => eventConsumer.Handles(A <StoredEvent> ._))
            .Returns(true);

            A.CallTo(() => eventConsumer.On(A <IEnumerable <Envelope <IEvent> > > ._))
            .Invokes((IEnumerable <Envelope <IEvent> > events) =>
            {
                foreach (var @event in events)
                {
                    eventConsumer.On(@event).Wait();
                }
            });

            A.CallTo(() => eventSubscription.Sender)
            .Returns(eventSubscription);

            A.CallTo(() => formatter.Parse(eventData))
            .Returns(envelope);

            sut = new MyEventConsumerGrain(
                x => eventConsumer,
                grainState,
                eventStore,
                formatter,
                log);
        }
        public void Should_subscribe_to_consumer_and_handle_events()
        {
            consumerInfo.Position = "2";

            sut.Subscribe(eventConsumer);
            sut.Refresh();
            sut.Dispose();

            A.CallTo(() => eventConsumer.On(envelope1)).MustHaveHappened();
            A.CallTo(() => eventConsumer.On(envelope2)).MustHaveHappened();
            A.CallTo(() => eventConsumer.On(envelope3)).MustHaveHappened();
        }