Example #1
0
        public void Given_MeetupEvents_When_Aggregate_Then_RsvpListCreated()
        {
            Guid meetupId = Guid.NewGuid(), bill = Guid.NewGuid(), joe = Guid.NewGuid(), susan = Guid.NewGuid(), carla = Guid.NewGuid();

            var aggregate = RsvpAggregate.Create(meetupId, new MeetupRsvpOpenedEvent(meetupId, numberOfSpots: 2));

            aggregate.MembersGoing.AssertEqual();
            aggregate.MembersWaiting.AssertEqual();
            aggregate.MembersNotGoing.AssertEqual();

            aggregate.Reduce(new MeetupRsvpAcceptedEvent(meetupId, bill));
            aggregate.MembersGoing.AssertEqual(bill);
            aggregate.MembersWaiting.AssertEqual();
            aggregate.MembersNotGoing.AssertEqual();

            aggregate.Reduce(new MeetupRsvpAcceptedEvent(meetupId, joe));
            aggregate.MembersGoing.AssertEqual(bill, joe);
            aggregate.MembersWaiting.AssertEqual();
            aggregate.MembersNotGoing.AssertEqual();

            aggregate.Reduce(new MeetupRsvpAcceptedEvent(meetupId, susan));
            aggregate.MembersGoing.AssertEqual(bill, joe);
            aggregate.MembersWaiting.AssertEqual(susan);
            aggregate.MembersNotGoing.AssertEqual();

            aggregate.Reduce(new MeetupRsvpAcceptedEvent(meetupId, carla));
            aggregate.MembersGoing.AssertEqual(bill, joe);
            aggregate.MembersWaiting.AssertEqual(susan, carla);
            aggregate.MembersNotGoing.AssertEqual();

            aggregate.Reduce(new MeetupRsvpDeclinedEvent(meetupId, bill));
            aggregate.MembersGoing.AssertEqual(joe, susan);
            aggregate.MembersWaiting.AssertEqual(carla);
            aggregate.MembersNotGoing.AssertEqual(bill);

            aggregate.Reduce(new MeetupNumberOfSpotsChangedEvent(meetupId, 3));
            aggregate.MembersGoing.AssertEqual(joe, susan, carla);
            aggregate.MembersWaiting.AssertEqual();
            aggregate.MembersNotGoing.AssertEqual(bill);
        }