Ejemplo n.º 1
0
    public void AggregateStream_ShouldReturnSpecifiedVersionOfTheStream()
    {
        var streamId             = Guid.NewGuid();
        var userCreated          = new UserCreated(streamId, "John Doe");
        var userNameUpdated      = new UserNameUpdated(streamId, "Adam Smith");
        var userNameUpdatedAgain = new UserNameUpdated(streamId, "Michael Newman");

        eventStore.AppendEvent <User>(streamId, userCreated);
        eventStore.AppendEvent <User>(streamId, userNameUpdated);
        eventStore.AppendEvent <User>(streamId, userNameUpdatedAgain);

        var aggregateAtVersion1 = eventStore.AggregateStream <User>(streamId, 1);

        aggregateAtVersion1.Id.Should().Be(streamId);
        aggregateAtVersion1.Name.Should().Be(userCreated.UserName);
        aggregateAtVersion1.Version.Should().Be(1);

        var aggregateAtVersion2 = eventStore.AggregateStream <User>(streamId, 2);

        aggregateAtVersion2.Id.Should().Be(streamId);
        aggregateAtVersion2.Name.Should().Be(userNameUpdated.UserName);
        aggregateAtVersion2.Version.Should().Be(2);

        var aggregateAtVersion3 = eventStore.AggregateStream <User>(streamId, 3);

        aggregateAtVersion3.Id.Should().Be(streamId);
        aggregateAtVersion3.Name.Should().Be(userNameUpdatedAgain.UserName);
        aggregateAtVersion3.Version.Should().Be(3);
    }
    public void GivenAggregateWithCompositeId_WhenAppendedEvent_LiveAndInlineAggregationWorks()
    {
        var seatId     = new SeatId(Guid.NewGuid());
        var customerId = new CustomerId(Guid.NewGuid());

        var reservation = Reservation.CreateTentative(seatId, customerId);
        var @event      = reservation.DequeueUncommittedEvents().Single();

        //1. Create events
        EventStore.Append(reservation.AggregateId, @event);

        Session.SaveChanges();

        //2. Get live aggregation
        var issuesListFromLiveAggregation = EventStore.AggregateStream <Reservation>(reservation.AggregateId);

        //3. Get inline aggregation
        var issuesListFromInlineAggregation = Session.Load <Reservation>(reservation.AggregateId);

        //4. Get inline aggregation through linq
        var reservationId = reservation.Id;

        var issuesListFromInlineAggregationFromLinq = Session.Query <Reservation>().SingleOrDefault(r => r.Id.Value == reservationId.Value);
        var issuesListFromInlineAggregationFromLinqWithAggregateId = Session.Query <Reservation>().SingleOrDefault(r => r.AggregateId == reservationId.Value);

        issuesListFromLiveAggregation.Should().NotBeNull();
        issuesListFromInlineAggregation.Should().NotBeNull();
        issuesListFromInlineAggregationFromLinq.Should().NotBeNull();
        issuesListFromInlineAggregationFromLinqWithAggregateId.Should().NotBeNull();

        issuesListFromLiveAggregation !.AggregateId.Should().Be(reservationId.Value);
        issuesListFromLiveAggregation !.AggregateId.Should().Be(reservationId.Value);
        issuesListFromInlineAggregationFromLinq !.AggregateId.Should().Be(reservationId.Value);
        issuesListFromInlineAggregationFromLinqWithAggregateId !.AggregateId.Should().Be(reservationId.Value);
    }
        public void GivenStreamOfEvents_WhenAggregateStreamIsCalled_ThenChangesAreAppliedProperly()
        {
            var streamId = EventStore.StartStream <TaskList>();

            //1. First Task Was Created
            var task1Id = Guid.NewGuid();

            EventStore.Append(streamId, new TaskCreated {
                TaskId = task1Id, Description = "Description"
            });
            Session.SaveChanges();

            var taskList = EventStore.AggregateStream <TaskList>(streamId);

            taskList.List.Should().Have.Count.EqualTo(1);
            taskList.List.Single().TaskId.Should().Be.EqualTo(task1Id);
            taskList.List.Single().Description.Should().Be.EqualTo("Description");

            //2. First Task Description Was Changed
            EventStore.Append(streamId, new TaskUpdated {
                TaskId = task1Id, Description = "New Description"
            });
            Session.SaveChanges();

            taskList = EventStore.AggregateStream <TaskList>(streamId);

            taskList.List.Should().Have.Count.EqualTo(1);
            taskList.List.Single().TaskId.Should().Be.EqualTo(task1Id);
            taskList.List.Single().Description.Should().Be.EqualTo("New Description");

            //3. Two Other tasks were added
            EventStore.Append(streamId, new TaskCreated {
                TaskId = Guid.NewGuid(), Description = "Description2"
            },
                              new TaskCreated {
                TaskId = Guid.NewGuid(), Description = "Description3"
            });
            Session.SaveChanges();

            taskList = EventStore.AggregateStream <TaskList>(streamId);

            taskList.List.Should().Have.Count.EqualTo(3);
            taskList.List.Select(t => t.Description)
            .Should()
            .Have.SameSequenceAs("New Description", "Description2", "Description3");


            //4. First task was removed
            EventStore.Append(streamId, new TaskRemoved {
                TaskId = task1Id
            });
            Session.SaveChanges();

            taskList = EventStore.AggregateStream <TaskList>(streamId);

            taskList.List.Should().Have.Count.EqualTo(2);
            taskList.List.Select(t => t.Description)
            .Should()
            .Have.SameSequenceAs("Description2", "Description3");
        }
    public void GivenEvents_WhenInlineTransformationIsApplied_ThenReturnsSameNumberOfTransformedItems()
    {
        var issue1Id = Guid.NewGuid();
        var issue2Id = Guid.NewGuid();

        var events = new object[]
        {
            new IssueCreated(issue1Id, "Description 1"),
            new IssueUpdated(issue1Id, "Description 1 New"),
            new IssueCreated(issue2Id, "Description 2"),
            new IssueUpdated(issue1Id, "Description 1 Super New"),
            new IssueUpdated(issue2Id, "Description 2 New"),
        };

        //1. Create events
        var streamId = EventStore.StartStream <IssuesList>(events).Id;

        Session.SaveChanges();

        //2. Get live aggregation
        var issuesListFromLiveAggregation = EventStore.AggregateStream <IssuesList>(streamId) !;

        //3. Get inline aggregation
        var issuesListFromInlineAggregation = Session.Load <IssuesList>(streamId) !;

        issuesListFromLiveAggregation.Should().Not.Be.Null();
        issuesListFromInlineAggregation.Should().Not.Be.Null();

        issuesListFromLiveAggregation.Issues.Count.Should().Be.EqualTo(2);
        issuesListFromLiveAggregation.Issues.Count.Should().Be.EqualTo(issuesListFromInlineAggregation.Issues.Count);
    }
Ejemplo n.º 5
0
    public void GivenOutOfOrderEvents_WhenPublishedWithSetVersion_ThenLiveAggregationWorksFine()
    {
        var firstTaskId  = Guid.NewGuid();
        var secondTaskId = Guid.NewGuid();

        var events = new object[]
        {
            new IssueUpdated(firstTaskId, "Final First Issue Description", 4),
            new IssueCreated(firstTaskId, "First Issue", 1),
            new IssueCreated(secondTaskId, "Second Issue 2", 2),
            new IssueUpdated(firstTaskId, "Intermediate First Issue Description", 3),
            new IssueUpdated(secondTaskId, "Final Second Issue Description", 4),
        };

        //1. Create events
        var streamId = EventStore.StartStream <IssuesList>(events).Id;

        Session.SaveChanges();

        //2. Get live agregation
        var issuesListFromLiveAggregation = EventStore.AggregateStream <IssuesList>(streamId);

        //3. Get inline aggregation
        var issuesListFromInlineAggregation = Session.Load <IssuesList>(streamId);

        issuesListFromLiveAggregation.Should().Not.Be.Null();
        issuesListFromInlineAggregation.Should().Not.Be.Null();

        issuesListFromLiveAggregation !.Issues.Count.Should().Be.EqualTo(2);
        issuesListFromLiveAggregation !.Issues.Count.Should().Be.EqualTo(issuesListFromInlineAggregation !.Issues.Count);
    }
Ejemplo n.º 6
0
        public void GivenStreamOfEvents_WhenAggregateStreamIsCalled_ThenChangesAreAppliedProperly()
        {
            var streamId = Guid.NewGuid();

            //1. First Issue Was Created
            var issue1Id = Guid.NewGuid();

            EventStore.Append(streamId, new IssueCreated {
                IssueId = issue1Id, Description = "Description"
            });
            Session.SaveChanges();

            var issuesList = EventStore.AggregateStream <IssuesList>(streamId);

            issuesList.List.Should().Have.Count.EqualTo(1);
            issuesList.List.Single().IssueId.Should().Be.EqualTo(issue1Id);
            issuesList.List.Single().Description.Should().Be.EqualTo("Description");

            //2. First Issue Description Was Changed
            EventStore.Append(streamId, new IssueUpdated {
                IssueId = issue1Id, Description = "New Description"
            });
            Session.SaveChanges();

            issuesList = EventStore.AggregateStream <IssuesList>(streamId);

            issuesList.List.Should().Have.Count.EqualTo(1);
            issuesList.List.Single().IssueId.Should().Be.EqualTo(issue1Id);
            issuesList.List.Single().Description.Should().Be.EqualTo("New Description");

            //3. Two Other tasks were added
            EventStore.Append(streamId, new IssueCreated {
                IssueId = Guid.NewGuid(), Description = "Description2"
            },
                              new IssueCreated {
                IssueId = Guid.NewGuid(), Description = "Description3"
            });
            Session.SaveChanges();

            issuesList = EventStore.AggregateStream <IssuesList>(streamId);

            issuesList.List.Should().Have.Count.EqualTo(3);
            issuesList.List.Select(t => t.Description)
            .Should()
            .Have.SameSequenceAs("New Description", "Description2", "Description3");

            //4. First issue was removed
            EventStore.Append(streamId, new IssueRemoved {
                IssueId = issue1Id
            });
            Session.SaveChanges();

            issuesList = EventStore.AggregateStream <IssuesList>(streamId);

            issuesList.List.Should().Have.Count.EqualTo(2);
            issuesList.List.Select(t => t.Description)
            .Should()
            .Have.SameSequenceAs("Description2", "Description3");
        }
Ejemplo n.º 7
0
        public void AggregateStream_ShouldReturnObjectWithStateBasedOnEvents()
        {
            var streamId        = Guid.NewGuid();
            var userCreated     = new UserCreated(streamId, "John Doe");
            var userNameUpdated = new UserNameUpdated(streamId, "Adam Smith");

            eventStore.AppendEvent <User>(streamId, userCreated);
            eventStore.AppendEvent <User>(streamId, userNameUpdated);

            var aggregate = eventStore.AggregateStream <User>(streamId);

            aggregate.Id.Should().Be(streamId);
            aggregate.Name.Should().Be(userNameUpdated.UserName);
            aggregate.Version.Should().Be(2);
        }
        public void GivenEvents_WhenInlineTransformationIsApplied_ThenReturnsSameNumberOfTransformedItems()
        {
            var task1Id = Guid.NewGuid();
            var task2Id = Guid.NewGuid();

            var events = new ITaskEvent[]
            {
                new TaskCreated {
                    TaskId = task1Id, Description = "Description 1"
                },
                new TaskUpdated {
                    TaskId = task1Id, Description = "Description 1 New"
                },
                new TaskCreated {
                    TaskId = task2Id, Description = "Description 2"
                },
                new TaskUpdated {
                    TaskId = task1Id, Description = "Description 1 Super New"
                },
                new TaskUpdated {
                    TaskId = task2Id, Description = "Description 2 New"
                },
            };

            //1. Create events
            var streamId = EventStore.StartStream <TaskList>(events);

            Session.SaveChanges();

            //2. Get live agregation
            var taskListFromLiveAggregation = EventStore.AggregateStream <TaskList>(streamId);

            //3. Get inline aggregation
            var taskListFromInlineAggregation = Session.Load <TaskList>(streamId);

            var projection = Session.Query <TaskDescriptionView>().FirstOrDefault();

            taskListFromLiveAggregation.Should().Not.Be.Null();
            taskListFromInlineAggregation.Should().Not.Be.Null();

            taskListFromLiveAggregation.List.Count.Should().Be.EqualTo(2);
            taskListFromLiveAggregation.List.Count.Should().Be.EqualTo(taskListFromInlineAggregation.List.Count);
        }
        public void GivenOutOfOrderEvents_WhenPublishedWithSetVersion_ThenLiveAggregationWorksFine()
        {
            var firstTaskId  = Guid.NewGuid();
            var secondTaskId = Guid.NewGuid();

            var events = new ITaskEvent[]
            {
                new TaskUpdated {
                    TaskId = firstTaskId, Description = "Final First Task Description", TaskVersion = 4
                },
                new TaskCreated {
                    TaskId = firstTaskId, Description = "First Task", TaskVersion = 1
                },
                new TaskCreated {
                    TaskId = secondTaskId, Description = "Second Task 2", TaskVersion = 2
                },
                new TaskUpdated {
                    TaskId = firstTaskId, Description = "Intermediate First Task Description", TaskVersion = 3
                },
                new TaskUpdated {
                    TaskId = secondTaskId, Description = "Final Second Task Description", TaskVersion = 5
                },
            };

            //1. Create events
            var streamId = EventStore.StartStream <TaskList>(events).Id;

            Session.SaveChanges();

            //2. Get live agregation
            var taskListFromLiveAggregation = EventStore.AggregateStream <TaskList>(streamId);

            //3. Get inline aggregation
            var taskListFromInlineAggregation = Session.Load <TaskList>(streamId);

            taskListFromLiveAggregation.Should().Not.Be.Null();
            taskListFromInlineAggregation.Should().Not.Be.Null();

            taskListFromLiveAggregation.List.Count.Should().Be.EqualTo(2);
            taskListFromLiveAggregation.List.Count.Should().Be.EqualTo(taskListFromInlineAggregation.List.Count);
        }