public async Task WriteEventsAsync(IEnumerable <Envelope <IEvent> > events) { Guard.NotNull(events, nameof(events)); var eventArray = events.ToArray(); if (eventArray.Length > 0) { var expectedVersion = UseEventSourcing() ? version : EtagVersion.Any; var commitId = Guid.NewGuid(); foreach (var @event in eventArray) { eventEnricher.Enrich(@event, ownerKey); } var eventStream = GetStreamName(); var eventData = GetEventData(eventArray, commitId); try { await eventStore.AppendAsync(commitId, eventStream, expectedVersion, eventData); } catch (WrongEventVersionException ex) { throw new InconsistentStateException(ex.CurrentVersion, ex.ExpectedVersion, ex); } versionEvents += eventArray.Length; } UpdateVersion(); }
public async Task Should_write_to_store_with_previous_position() { SetupEventStore(3); var persistedEvents = new List <IEvent>(); var persistence = sut.WithEventSourcing(None.Type, key, x => persistedEvents.Add(x.Payload)); await persistence.ReadAsync(); await persistence.WriteEventAsync(Envelope.Create(new MyEvent())); await persistence.WriteEventAsync(Envelope.Create(new MyEvent())); A.CallTo(() => eventStore.AppendAsync(A <Guid> .Ignored, key, 2, A <ICollection <EventData> > .That.Matches(x => x.Count == 1))) .MustHaveHappened(); A.CallTo(() => eventStore.AppendAsync(A <Guid> .Ignored, key, 3, A <ICollection <EventData> > .That.Matches(x => x.Count == 1))) .MustHaveHappened(); A.CallTo(() => eventEnricher.Enrich(A <Envelope <IEvent> > .Ignored, key)) .MustHaveHappenedTwiceExactly(); }