Exemple #1
0
        public void GivenExistingAggregateWithUnseenChanges_WhenSaving_ThenShouldCheckConcurrencyWithCorrectEvents()
        {
            // Arrange
            var eventStore = new InMemoryEventStore(new ConsoleLogger());

            // Register and save a new user
            var user = new User();

            user.Register();
            var concurrencyMonitor = new StrictConcurrencyMonitor();
            var repository         = new EventSourcingRepository <User>(eventStore, concurrencyMonitor, _logger);

            repository.Save(user);
            var userVersion = user.Version;

            // We change password...
            var repository1 = new EventSourcingRepository <User>(eventStore, concurrencyMonitor, _logger);
            var user1       = repository1.Get(user.Id, userVersion);

            user1.ChangePassword("newpassword");

            // ...but so does someone else, who saves their changes before we have a chance to save ours...
            var repository2 = new EventSourcingRepository <User>(eventStore, concurrencyMonitor, _logger);
            var user2       = repository.Get(user.Id, userVersion);

            user2.ChangePassword("newpassword");
            repository2.Save(user2);

            // ...so we should get a concurrency exception when we try to save
            Assert.Throws <ConcurrencyConflictsDetectedException>(() => repository1.Save(user1));
        }
Exemple #2
0
        public void GivenUnseenEventsAndNoUncommittedEvents_WhenTestingForConflicts_ThenFindNoConflicts()
        {
            // Arrange
            IConcurrencyMonitor  monitor           = new StrictConcurrencyMonitor();
            IEnumerable <object> unseenEvents      = new[] { new UserRegistered(Guid.NewGuid()) };
            IEnumerable <object> uncommittedEvents = Enumerable.Empty <object>();

            // Act
            IEnumerable <ConcurrencyConflict> conflicts = monitor.CheckForConflicts(unseenEvents, uncommittedEvents);

            // Assert
            CollectionAssert.IsEmpty(conflicts, "Conflicts have been returned where there should be none.");
        }
Exemple #3
0
        public void GivenUnseenEvents_WhenTestingForConflicts_ThenFindConflicts()
        {
            // Arrange
            var userId = Guid.NewGuid();
            IConcurrencyMonitor  monitor           = new StrictConcurrencyMonitor();
            IEnumerable <object> unseenEvents      = new[] { new UserChangedPassword("newpassword") };
            IEnumerable <object> uncommittedEvents = new[] { new UserChangedPassword("differentnewpassword") };

            // Act
            IList <ConcurrencyConflict> conflicts = monitor.CheckForConflicts(unseenEvents, uncommittedEvents).ToList();

            // Assert
            Assert.AreEqual(1, conflicts.Count, "Expected one and only one conflict.");
            var conflict = conflicts.Single();

            CollectionAssert.AreEqual(unseenEvents, conflict.UnseenEvents);
            CollectionAssert.AreEqual(uncommittedEvents, conflict.UncommittedEvents);
            Assert.AreEqual("Changes conflict with one or more committed events.", conflict.Message);
        }