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