예제 #1
0
        public void service_on_clear_generate_valid_advisory()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));
            p.Add(new Person(null, false));
            p.Add(new Person(null, false));
            p.Add(new Person(null, false));
            p.Add(new Person(null, false));

            svc.AcceptChanges();

            p.Clear();

            IEnumerable <IAdvisedAction> advisory = svc.GetAdvisory();

            Assert.IsNotNull(advisory);
            Assert.AreEqual <int>(5, advisory.Count());
            foreach (var aa in advisory)
            {
                Assert.AreEqual <ProposedActions>(ProposedActions.Delete, aa.Action);
            }
        }
예제 #2
0
        public void service_undoes_are_in_the_correct_order()
        {
            var p1 = new Person(null, false);
            var p2 = new Person(null, false);
            var p3 = new Person(null, false);

            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection list = new PersonCollection(svc);

            list.Add(p1);
            list.Add(p2);
            list.Add(p3);
            list.Move(p2, 0);
            list.Remove(p1);

            svc.Undo();
            Assert.AreEqual <int>(3, list.Count);
            Assert.IsTrue(list.Contains(p1));

            svc.Undo();
            Assert.AreEqual <int>(1, list.IndexOf(p2));

            svc.Undo();
            Assert.AreEqual <int>(2, list.Count);
            Assert.IsFalse(list.Contains(p3));

            svc.Undo();
            Assert.AreEqual <int>(1, list.Count);
            Assert.IsFalse(list.Contains(p2));

            svc.Undo();
            Assert.AreEqual <int>(0, list.Count);
            Assert.IsFalse(list.Contains(p1));
        }
예제 #3
0
        public void after_multiple_change_canRedo_is_false()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));
            svc.Undo();
            p.Add(new Person(null, false));

            Assert.IsFalse(svc.CanRedo);
        }
예제 #4
0
        public void after_Add_getChangeSet_contains_change()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));
            p.Add(new Person(svc, false));

            IChangeSet cSet = svc.GetChangeSet();

            cSet.Count.Should().Be.EqualTo(2);
        }
예제 #5
0
        public void after_add_GetEntityState_is_Changed()
        {
            EntityTrackingStates expected = EntityTrackingStates.HasBackwardChanges;

            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));
            p.Add(new Person(svc, false));

            EntityTrackingStates actual = svc.GetEntityState(p);

            actual.Should().Be.EqualTo(expected);
        }
예제 #6
0
        public void after_Add_canUndo_is_true()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));

            svc.CanUndo.Should().Be.True();
        }
예제 #7
0
        public void service_getChangeSet_returns_valid_cSet()
        {
            int expected = 3;
            int actual   = 0;

            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));
            p.Add(new Person(null, false));
            p.Move(0, 1);

            IChangeSet cSet = svc.GetChangeSet();

            actual = cSet.Count;

            Assert.AreEqual <int>(expected, actual);
        }
예제 #8
0
        public void after_mutual_exclusive_actions_service_CanUndo()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));
            p.RemoveAt(0);

            Assert.IsTrue(svc.CanUndo);
        }
예제 #9
0
        public void after_acceptChanges_service_isChanged_is_false()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));

            svc.AcceptChanges();

            Assert.IsFalse(svc.IsChanged);
        }
예제 #10
0
        public void after_rejectChanges_service_canRedo_is_false()
        {
            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));

            svc.RejectChanges();

            Assert.IsFalse(svc.CanRedo);
        }
예제 #11
0
        public void after_Undo_collection_is_rolledback()
        {
            int expected = 0;

            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));

            svc.Undo();

            p.Count.Should().Be.EqualTo(expected);
        }
예제 #12
0
        public void afterUndo_service_Redo_restore_previous_value()
        {
            ChangeTrackingService svc = new ChangeTrackingService();
            int expected = 1;

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));

            svc.Undo();
            svc.Redo();

            Assert.AreEqual <int>(expected, p.Count);
        }
예제 #13
0
        public void service_on_single_add_generate_valid_advisory_even_with_transient_persistable_entity()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, ChangeTrackingRegistration.AsTransient, TransientRegistration.AsPersistable));

            IEnumerable <IAdvisedAction> advisory = svc.GetAdvisory();

            Assert.IsNotNull(advisory);
            Assert.AreEqual <int>(1, advisory.Count());
            Assert.AreEqual <ProposedActions>(ProposedActions.Create, advisory.First().Action);
        }
예제 #14
0
        public void service_on_single_add_generate_valid_advisory()
        {
            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));

            IEnumerable <IAdvisedAction> advisory = svc.GetAdvisory();

            Assert.IsNotNull(advisory);
            Assert.AreEqual <int>(1, advisory.Count());
            Assert.AreEqual <ProposedActions>(ProposedActions.Update, advisory.First().Action);
        }
예제 #15
0
        public void after_mutual_exclusive_actions_entity_state_is_HasBackwardChanges()
        {
            EntityTrackingStates expected = EntityTrackingStates.HasBackwardChanges;

            IChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(svc, false));
            p.RemoveAt(0);

            EntityTrackingStates actual = svc.GetEntityState(p);

            Assert.AreEqual <EntityTrackingStates>(expected, actual);
        }
예제 #16
0
        public void service_getAdvisory_generate_valid_advisory_with_more_changes_applied_to_the_same_entity()
        {
            ProposedActions       expected = ProposedActions.Delete;
            ChangeTrackingService svc      = new ChangeTrackingService();

            PersonCollection list = new PersonCollection(svc);

            list.Add(new Person(null, false));    //First IChange
            list.RemoveAt(0);                     //Second IChange

            IAdvisory       advisory = svc.GetAdvisory();
            IAdvisedAction  action   = advisory.First();
            ProposedActions actual   = action.Action;

            Assert.AreEqual <ProposedActions>(expected, actual);
        }
예제 #17
0
        public void after_rejectChanges_entity_is_no_more_changed()
        {
            EntityTrackingStates expected = EntityTrackingStates.None;

            ChangeTrackingService svc = new ChangeTrackingService();

            PersonCollection p = new PersonCollection(svc);

            p.Add(new Person(null, false));

            svc.RejectChanges();

            EntityTrackingStates actual = svc.GetEntityState(p);

            Assert.AreEqual <EntityTrackingStates>(expected, actual);
        }
예제 #18
0
        public void changeTrackingService_using_beginAtomicOperation_should_set_is_changed_only_on_operation_completed()
        {
            var target = new ChangeTrackingService();

            var person = new Person(target);
            var list   = new PersonCollection(target);

            using (var actual = target.BeginAtomicOperation())
            {
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                target.IsChanged.Should().Be.False();

                actual.Complete();
            }

            target.IsChanged.Should().Be.True();
        }
예제 #19
0
        public void changeTrackingService_using_beginAtomicOperation_getEntityState_should_return_valid_entity_state()
        {
            var target = new ChangeTrackingService();

            var person = new Person(target);
            var list   = new PersonCollection(target);

            using (var op = target.BeginAtomicOperation())
            {
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                op.Complete();
            }

            var actual = target.GetEntityState(person);

            actual.Should().Be.EqualTo(EntityTrackingStates.HasBackwardChanges | EntityTrackingStates.IsTransient | EntityTrackingStates.AutoRemove);
        }
예제 #20
0
        public void changeTrackingService_using_beginAtomicOperation_should_fully_rollback_on_single_undo()
        {
            var target = new ChangeTrackingService();

            var person = new Person(target);
            var list   = new PersonCollection(target);

            using (var actual = target.BeginAtomicOperation())
            {
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                actual.Complete();
            }

            target.Undo();

            list.Count.Should().Be.EqualTo(0);
            person.Name.Should().Be.EqualTo(string.Empty);
        }
예제 #21
0
        public void changeTrackingService_using_beginAtomicOperation_hasTransientEntities_should_return_true_even_for_entities_created_in_the_atomic_operation()
        {
            var target = new ChangeTrackingService();

            var list   = new PersonCollection(target);
            var person = new Person(target, false);

            using (var op = target.BeginAtomicOperation())
            {
                target.RegisterTransient(person);
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                op.Complete();
            }

            var actual = target.HasTransientEntities;

            actual.Should().Be.True();
        }
예제 #22
0
        public void changeTrackingService_using_beginAtomicOperation_getEntities_should_return_all_transient_entities()
        {
            var target = new ChangeTrackingService();

            var list   = new PersonCollection(target);
            var person = new Person(target, false);

            using (var op = target.BeginAtomicOperation())
            {
                target.RegisterTransient(person);
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                op.Complete();
            }

            var actual = target.GetEntities(EntityTrackingStates.IsTransient, false);

            actual.Contains(person).Should().Be.True();
        }
예제 #23
0
        public void changeTrackingService_using_beginAtomicOperation_redo_should_reapply_all_changes_with_one_pass()
        {
            var target = new ChangeTrackingService();

            var person = new Person(target);
            var list   = new PersonCollection(target);

            using (var actual = target.BeginAtomicOperation())
            {
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                actual.Complete();
            }

            target.Undo();
            target.Redo();

            list.Count.Should().Be.EqualTo(1);
            person.Name.Should().Be.EqualTo("Mauro Servienti");
        }
예제 #24
0
        public void changeTrackingService_using_beginAtomicOperation_getEntities_should_return_all_changed_entities()
        {
            var target = new ChangeTrackingService();

            var person = new Person(target);
            var list   = new PersonCollection(target);

            using (var op = target.BeginAtomicOperation())
            {
                person.Name = "Mauro";
                list.Add(person);
                person.Name = "Mauro Servienti";

                op.Complete();
            }

            var actual = target.GetEntities(EntityTrackingStates.HasBackwardChanges, false);

            /*
             * Non funziona perchè non funziona GetEntityState()
             */

            actual.Contains(person).Should().Be.True();
        }