public async Task HasChangesChangedEvent() { var entityManager = await TestFns.NewEm(_todosServiceName); int eventCount = 0; var lastEventArgs = new EntityManagerHasChangesChangedEventArgs(entityManager); entityManager.HasChangesChanged += (s, e) => { lastEventArgs = e; ++eventCount; }; // Add a new Todo var newTodo = entityManager.CreateEntity <TodoItem>(); newTodo.Description = "New Todo Item"; newTodo.CreatedAt = DateTime.Today; Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled when entity added"); Assert.IsTrue(lastEventArgs.HasChanges, "HasChanagesChanged should signal true after new entity added"); eventCount = 0; // Discard the added Todo try { entityManager.RejectChanges(); } catch (Exception e) { var message = "RejectChanges() should not fail with the error " + e.Message; Assert.Fail(message); } Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled on RejectChanges() call"); Assert.IsFalse(lastEventArgs.HasChanges, "HasChanagesChanged should signal false after RejectChanges() call"); Assert.IsFalse(entityManager.HasChanges(), "EntityManager should have no pending changes after RejectChanges() call"); eventCount = 0; // Add another new Todo var newTodo2 = entityManager.CreateEntity <TodoItem>(); newTodo2.Description = "New Todo Item2"; // newTodo2.CreatedAt = DateTime.Today; Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled when entity added"); Assert.IsTrue(lastEventArgs.HasChanges, "HasChangesChanged should signal true after new entity added"); eventCount = 0; // Save changes try { await entityManager.SaveChanges(); } catch (SaveException e) { var message = "SaveChanges() should not fail with the error " + e.Message; e.ValidationErrors.ForEach(ve => { message += Environment.NewLine + " " + ve.Message; }); Assert.Fail(message); } Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled on SaveChanges() call"); Assert.IsFalse(lastEventArgs.HasChanges, "HasChanagesChanged should signal false after SaveChanges() call"); Assert.IsFalse(entityManager.HasChanges(), "EntityManager should have no pending changes after SaveChanges() call"); eventCount = 0; }
public async Task HasChangesChangedEvent() { var entityManager = await TestFns.NewEm(_todosServiceName); int eventCount = 0; var lastEventArgs = new EntityManagerHasChangesChangedEventArgs(entityManager); entityManager.HasChangesChanged += (s, e) => { lastEventArgs = e; ++eventCount; }; // Add a new Todo var newTodo = entityManager.CreateEntity<TodoItem>(); newTodo.Description = "New Todo Item"; newTodo.CreatedAt = DateTime.Today; Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled when entity added"); Assert.IsTrue(lastEventArgs.HasChanges, "HasChanagesChanged should signal true after new entity added"); eventCount = 0; // Discard the added Todo try { entityManager.RejectChanges(); } catch (Exception e) { var message = "RejectChanges() should not fail with the error " + e.Message; Assert.Fail(message); } Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled on RejectChanges() call"); Assert.IsFalse(lastEventArgs.HasChanges, "HasChanagesChanged should signal false after RejectChanges() call"); Assert.IsFalse(entityManager.HasChanges(), "EntityManager should have no pending changes after RejectChanges() call"); eventCount = 0; // Add another new Todo var newTodo2 = entityManager.CreateEntity<TodoItem>(); newTodo2.Description = "New Todo Item2"; // newTodo2.CreatedAt = DateTime.Today; Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled when entity added"); Assert.IsTrue(lastEventArgs.HasChanges, "HasChangesChanged should signal true after new entity added"); eventCount = 0; // Save changes try { await entityManager.SaveChanges(); } catch (SaveException e) { var message = "SaveChanges() should not fail with the error " + e.Message; e.ValidationErrors.ForEach(ve => { message += Environment.NewLine + " " + ve.Message; }); Assert.Fail(message); } Assert.AreEqual(1, eventCount, "Only one HasChangedChanged event should be signalled on SaveChanges() call"); Assert.IsFalse(lastEventArgs.HasChanges, "HasChanagesChanged should signal false after SaveChanges() call"); Assert.IsFalse(entityManager.HasChanges(), "EntityManager should have no pending changes after SaveChanges() call"); eventCount = 0; }