Exemple #1
0
        protected async Task Given_The_Correct_Expected_Stream_Revision_When_Multiple_Events_Are_Written_In_Separate_Commits_To_The_Store_Then_The_Events_Are_Saved_Successfully(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            EventStoreMessage eventStoreMessage1 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            EventStoreMessage eventStoreMessage2 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage2);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, 1).ConfigureAwait(false);

            EventStoreMessage eventStoreMessage3 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage3);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, 2).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            Assert.Equal(3, eventStoreMessages.Count());
        }
Exemple #2
0
        protected async Task Given_Multiple_Events_In_The_Event_Store_When_Retrieved_Using_A_Maximum_Revision_Lower_Than_Actual_Revision_Then_A_Truncated_List_Of_Events_Is_Returned(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            EventStoreMessage eventStoreMessage1 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            EventStoreMessage eventStoreMessage2 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage2);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, 1).ConfigureAwait(false);

            EventStoreMessage eventStoreMessage3 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage3);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, 2).ConfigureAwait(false);

            EventStoreMessage eventStoreMessage4 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage4);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, 3).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId, 2).ConfigureAwait(false);

            Assert.Equal(2, eventStoreMessages.Count());
        }
Exemple #3
0
        public async Task Given_An_Uncommitted_Event_For_The_Aggregate_When_Save_Is_Called_Then_The_Event_Is_Added_To_The_Event_Store_With_Correct_Headers()
        {
            // Arrange
            IEventStoreProvider eventStoreProvider         = GetEventStoreProvider();
            IDomainRepository   eventStoreDomainRepository = new EventStoreDomainRepository(eventStoreProvider);
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            TestAggregate testAggregate = new TestAggregate(eventStreamId);

            testAggregate.BusinessLogicThatResultsInEventA(string.Empty);
            await eventStoreDomainRepository.SaveAsync(testAggregate).ConfigureAwait(false);

            IEnumerable <EventStoreMessage> messages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            EventStoreMessage[] eventStoreMessages = messages.ToArray();

            // Assert
            Assert.Single(eventStoreMessages);
            Assert.Equal(3, eventStoreMessages[0].Headers.Count);
            object headerValue = eventStoreMessages[0].Headers[EventStoreMessageHeaderKey.EventStreamId];

            Assert.NotNull(headerValue);
            Assert.Equal(eventStreamId, headerValue);
        }
Exemple #4
0
 protected async Task Given_An_Id_For_A_Stream_That_Does_Not_Exist_When_ReadEvents_Is_Called_Then_An_Error_Is_Raised(IEventStoreProvider eventStoreProvider)
 {
     // Arrange
     // Act
     // Assert
     await AssertExtensions.ThrowsAsync <EventStreamNotFoundException>(
         async() => await eventStoreProvider.ReadEventsAsync(Guid.NewGuid().ToEventStreamIdFormattedString()).ConfigureAwait(false)).ConfigureAwait(false);
 }
Exemple #5
0
        protected async Task Given_Uncommitted_Events_When_AppendEvents_Is_Used_Then_The_Resulting_Event_Stream_Should_Not_Exist(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId      = Guid.NewGuid().ToEventStreamIdFormattedString();
            object eventStoreMessage1 = new object();
            object eventStoreMessage2 = new object();

            // Act
            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1, eventStoreMessage2);

            // Assert
            await AssertExtensions.ThrowsAsync <EventStreamNotFoundException>(
                async() => await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false)).ConfigureAwait(false);
        }
Exemple #6
0
        protected async Task Given_An_Appended_Event_When_CommitEvents_Is_Used_Then_The_Resulting_Event_Stream_Should_Contain_One_Event(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            EventStoreMessage eventStoreMessage = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            Assert.Single(eventStoreMessages);
        }
Exemple #7
0
        protected async Task Given_Committed_Events_When_AppendEvents_Is_Used_Then_The_Resulting_Event_Stream_Should_Not_Be_Empty(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId      = Guid.NewGuid().ToEventStreamIdFormattedString();
            object eventStoreMessage1 = new object();
            object eventStoreMessage2 = new object();

            // Act
            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1, eventStoreMessage2);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            Assert.Equal(2, eventStoreMessages.Count());
        }
Exemple #8
0
        protected async Task Given_Multiple_Events_In_The_Event_Store_When_Retrieved_Using_A_Maximum_Revision_Greater_Than_Actual_Revision_Then_The_Full_List_Of_Events_Is_Returned_And_No_Error_Is_Raised(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            EventStoreMessage eventStoreMessage1 = new EventStoreMessage(Guid.NewGuid(), new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            Assert.Single(eventStoreMessages);
        }
Exemple #9
0
        protected async Task Given_Two_Events_With_The_Same_Event_Id_When_Adding_Them_To_The_Stream_In_The_Same_Commit_Then_Only_One_Event_Is_Added(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string            eventStreamId      = Guid.NewGuid().ToEventStreamIdFormattedString();
            Guid              eventId            = Guid.NewGuid();
            EventStoreMessage eventStoreMessage1 = new EventStoreMessage(eventId, new object());
            EventStoreMessage eventStoreMessage2 = new EventStoreMessage(eventId, new object());

            // Act
            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage1);
            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage2);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            IEnumerable <EventStoreMessage> messages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            // Assert
            Assert.Single(messages);
        }
Exemple #10
0
        public async Task Given_An_Uncommitted_Event_For_The_Aggregate_When_Save_Is_Called_Then_The_Event_Is_Added_To_The_Event_Store()
        {
            // Arrange
            IEventStoreProvider eventStoreProvider         = GetEventStoreProvider();
            IDomainRepository   eventStoreDomainRepository = new EventStoreDomainRepository(eventStoreProvider);
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            TestAggregate testAggregate = new TestAggregate(eventStreamId);

            testAggregate.BusinessLogicThatResultsInEventA(string.Empty);
            await eventStoreDomainRepository.SaveAsync(testAggregate).ConfigureAwait(false);

            IEnumerable <EventStoreMessage> eventStoreMessages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            // Assert
            Assert.Single(eventStoreMessages);
        }
Exemple #11
0
        protected async Task Given_A_Stream_Of_10_Events_When_Reading_Events_From_Three_To_Nine_Then_Six_Events_Should_Be_Returned(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            for (int i = 0; i < 10; i++)
            {
                Guid eventId = Guid.NewGuid();
                EventStoreMessage eventStoreMessage = new EventStoreMessage(eventId, new object());
                eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage);
            }

            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            // Assert
            IEventStoreStream eventStoreStream = await eventStoreProvider.ReadEventsAsync(eventStreamId, 3, 9).ConfigureAwait(false);

            Assert.Equal(6, eventStoreStream.Count);
        }
Exemple #12
0
        protected async Task Given_An_Appended_Event_When_CommitEvents_Is_Used_Then_The_Resulting_Event_Stream_Should_Contain_One_Event_And_The_Retrieved_Event_Has_The_Correct_Metadata(IEventStoreProvider eventStoreProvider)
        {
            // Arrange
            string eventStreamId = Guid.NewGuid().ToEventStreamIdFormattedString();

            // Act
            Guid eventId = Guid.NewGuid();
            EventStoreMessage eventStoreMessage = new EventStoreMessage(eventId, new object());

            eventStoreProvider.AppendEvents(eventStreamId, eventStoreMessage);
            await eventStoreProvider.CommitEventsAsync(eventStreamId, ExpectedStreamRevision.New).ConfigureAwait(false);

            // Assert
            IEnumerable <EventStoreMessage> messages = await eventStoreProvider.ReadEventsAsync(eventStreamId).ConfigureAwait(false);

            EventStoreMessage[] eventStoreMessages = messages.ToArray();
            Assert.Single(eventStoreMessages);
            Assert.Equal(eventId, eventStoreMessages[0].EventId);
            Assert.Equal(2, eventStoreMessages[0].Headers.Count);
        }