コード例 #1
0
        public async Task It_should_rollback_both_entity_and_change_log_within_sync_flow()
        {
            // Given
            var id        = Guid.NewGuid();
            var user      = new UserAggregate(id, "Bond");
            var changeLog = user.Changes.GetUncommittedChanges().ToList();

            using var db = NewDbContext();
            db.Users.Add(user);
            await db.SaveChangesAsync();

            // When
            using (var tran = TransactionExt.Begin(IsolationLevel.ReadCommitted))
            {
                user.Rename("James Bond");
                db.SaveChanges();
            }

            // Then
            db.DetachAll();
            var savedUser = await db.Users.FindAsync(id);

            var savedChangeLog = await LoadChangeLog(user.StreamId);

            savedUser.Should().BeEquivalentTo(new UserAggregate(id, "Bond"));
            savedChangeLog.Should().HaveSameCount(changeLog);
            for (var i = 0; i < savedChangeLog.Count; i++)
            {
                savedChangeLog[i].Should().BeEquivalentTo((object)changeLog[i]);
                savedChangeLog[i].Should().BeOfType(changeLog[i].GetType());
            }
        }
コード例 #2
0
        public async Task It_should_update_entity_and_record_change_log()
        {
            // Given
            var user = new UserAggregate(Guid.NewGuid(), "Bond");

            using var db = NewDbContext();
            db.Users.Add(user);
            await db.SaveChangesAsync();

            // When
            user.Rename("James Bond");
            var changeLog = user.Changes.GetUncommittedChanges().ToList();
            await db.SaveChangesAsync();

            // Then
            db.DetachAll();
            var savedUser = await db.Users.FindAsync(user.Id);

            var savedChangeLog = (await LoadChangeLog(user.StreamId)).AsEnumerable()
                                 .Reverse()
                                 .Take(changeLog.Count)
                                 .Reverse()
                                 .ToList();

            savedUser.Should().BeEquivalentTo(user);
            for (var i = 0; i < savedChangeLog.Count; i++)
            {
                savedChangeLog[i].Should().BeEquivalentTo((object)changeLog[i]);
                savedChangeLog[i].Should().BeOfType(changeLog[i].GetType());
            }
        }
コード例 #3
0
        public void It_should_record_change_log_when_entity_is_updated()
        {
            // Given
            var id          = Random.NextGuid();
            var name        = Random.GetString();
            var changedName = Random.GetString();
            var user        = new UserAggregate(id, name);

            user.Changes.MarkChangesAsCommitted();

            // When
            user.Rename(changedName);

            // Then
            var changes = user.Changes.GetUncommittedChanges().ToList();

            Assert.That(changes, Has.Count.EqualTo(1));
            Assert.That(changes[0], Is.TypeOf <UserNameChanged>());
            var evt = (UserNameChanged)changes[0];

            Assert.That(evt.Id, Is.EqualTo(id));
            Assert.That(evt.Name, Is.EqualTo(changedName));
            Assert.That(evt.Version, Is.EqualTo(2));
            Assert.That(user.Version, Is.EqualTo(2));
        }