Example #1
0
        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();
        }
Example #2
0
        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();
        }