public void Pipeline_state_is_persisted()
        {
            string pipelineName = Guid.NewGuid().ToString();
            var    emptyState   = _sut.GetLastProcessedSequentialNumber(pipelineName);

            emptyState.Should().Be(0);
            var headers = new Dictionary <string, object>();
            var commit  = new Commit(Guid.NewGuid(), 1, Guid.NewGuid(), 1, DateTime.UtcNow, headers, new List <EventMessage>()
            {
                new EventMessage()
            });

            _sut.Commit(commit);
            _sut.MarkLastProcessed(pipelineName, commit.StreamId, commit.CommitId);
            var setState = _sut.GetLastProcessedSequentialNumber(pipelineName);

            setState.Should().NotBe(0);
        }
        public IEnumerable <IProcessingElement> Fetch(string pipelineName, int maxCount)
        {
            if (_lastCommitSequentialId == EmtpySequentialIdValue)
            {
                _lastCommitSequentialId = _streamStore.GetLastProcessedSequentialNumber(pipelineName);
            }
            var commits = _streamStore.Fetch(_lastCommitSequentialId, maxCount);

            foreach (var commit in commits)
            {
                var thisCommitSequentialId = (long)commit.Headers["SequentialId"];
                if (_firstCommitFetched && _lastCommitSequentialId == thisCommitSequentialId)
                {
                    continue;
                }
                _lastCommitSequentialId = thisCommitSequentialId;
                foreach (EventMessage eventMessage in commit.Events)
                {
                    var storedEvent = (StoredEvent)eventMessage.Body;
                    yield return(new SourcedEventProcessingElement(storedEvent.Convert(commit.StreamId)));
                }
                _firstCommitFetched = true;
            }
        }