public void GivenAnyEvent_WhenQueryingVersion_ThenShouldReturnCorrectVersion()
        {
            // Arrange
            var versionHandler = new RuntimeConfiguredVersionHandler();
            versionHandler.AddConfiguration<UserRegistered>(e => e.Version, null);
            var evt = new UserRegistered(Guid.NewGuid());

            // Act
            Guid version = versionHandler.GetVersion(evt);

            // Assert
            Assert.AreEqual(evt.Version, version);
        }
        public void GivenEmptyEventStore_WhenAddingEventsOneAtATime_ThenStoreShouldContainThoseEvents()
        {
            // Arrange
            IEventStore store = new InMemoryEventStore();
            var userId = Guid.NewGuid();
            var userRegistered = new UserRegistered(userId);

            // Act
            store.Store(userId, userRegistered);

            // Assert
            CollectionAssert.IsNotEmpty(((InMemoryEventStore)store).Events);
            Assert.AreSame(userRegistered, ((InMemoryEventStore)store).Events.First());
        }
        public void GivenNewEvent_WhenSettingParentVersion_ThenShouldSetParentVersion()
        {
            // Arrange
            var userId = Guid.Parse("00000000-0000-0000-0000-000000000001");
            var userRegisteredEvent = new UserRegistered(userId);
            var userChangedPasswordEvent = new UserChangedPassword("newpassword");

            var versionHandler = new RuntimeConfiguredVersionHandler();
            versionHandler.AddConfiguration<UserChangedPassword>(null, (e, v) => e.ParentVersion = v);

            // Act
            versionHandler.SetParentVersion(userChangedPasswordEvent, userRegisteredEvent.Version);

            // Assert
            Assert.AreEqual(userRegisteredEvent.Version, userChangedPasswordEvent.ParentVersion);
        }
Example #4
0
        public void GivenAggregateWithUncommittedEvents_WhenSaved_ThenBaseVersionShouldMatchCurrentVersion()
        {
            // Arrange
            var userId = Guid.NewGuid();
            var eventStore = new InMemoryEventStore();
            var userRegistered = new UserRegistered(userId);
            eventStore.Update(userId, userRegistered);

            var repository = new EventSourcingRepository<User>(eventStore, new Mock<IConcurrencyMonitor>().Object);
            var user = repository.Get(userId);
            user.ChangePassword("newpassword");

            var currentVersion = user.GetUncommittedEvents().Cast<Event>().Last().Version;

            // Act
            repository.Save(user);

            // Assert
            Assert.AreEqual(currentVersion, user.BaseVersion, "User's base version has not been updated to match current version on successful save.");
        }
Example #5
0
        public void AcceptingEvents_GivenAggregateWithUncommittedEvents_ShouldClearUncommittedEvents()
        {
            // Arrange
            var user = new User();
            user.Register();
            user.ChangePassword("newpassword");

            // Act
            var userRegisteredEvent = new UserRegistered(user.Id);
            var userChangedPasswordEvent = new UserChangedPassword("newpassword") { ParentVersion = userRegisteredEvent.Version };
            IEnumerable<object> expectedBefore = new object[] { userRegisteredEvent, userChangedPasswordEvent };
            IEnumerable<object> expectedAfter = new object[0];

            IEnumerable<object> before = user.GetUncommittedEvents();
            user.AcceptUncommittedEvents();
            IEnumerable<object> after = user.GetUncommittedEvents();

            // Assert
            CollectionAssertAreJsonEqual(expectedBefore, before);
            CollectionAssertAreJsonEqual(expectedAfter, after);
        }
Example #6
0
        public void InvokingBehaviour_GivenSimpleAggregateRoot_ShouldRecordEvents()
        {
            // Arrange
            var user = new User();
            user.Register();

            // Act
            user.ChangePassword("newpassword");
            IEnumerable<object> actual = user.GetUncommittedEvents();
            var userRegisteredEvent = new UserRegistered(user.Id);
            var userChangedPasswordEvent = new UserChangedPassword("newpassword") { ParentVersion = userRegisteredEvent.Version };
            IEnumerable<object> expected = new object[] { userRegisteredEvent, userChangedPasswordEvent };

            // Assert
            CollectionAssertAreJsonEqual(expected, actual);
        }
Example #7
0
 private void Apply(UserRegistered evt)
 {
     Id = evt.UserId;
 }
Example #8
0
 private void Apply(UserRegistered evt)
 {
     Id = evt.UserId;
 }