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); }