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;
        }
Esempio n. 2
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;

        }