Esempio n. 1
0
        public void MergeRuleUnbroken()
        {
            var obj = Csla.DataPortal.Create <Foo>();

            obj.Name = "2";
            obj.MockUpdated();
            var cloned = obj.Clone();

            cloned.Name = "1";
            cloned.MockUpdated();

            var changed = false;

            obj.PropertyChanged += (o, e) => { changed = true; };

            var merger = new GraphMerger();

            merger.MergeGraph(obj, cloned);
            Assert.AreEqual(cloned.Name, obj.Name);
            Assert.AreEqual(cloned.IsDirty, obj.IsDirty);
            Assert.AreEqual(cloned.IsNew, obj.IsNew);
            Assert.IsFalse(obj.IsDirty);
            Assert.IsTrue(obj.IsValid);
            Assert.IsTrue(changed);
        }
Esempio n. 2
0
        public void MergeList()
        {
            var obj = Csla.DataPortal.Create <FooList>();

            obj.AddNew().Name = "existing";
            obj[0].MockUpdated();
            obj.AddNew().Name = "to be deleted";
            obj.Remove(obj[1]);
            obj.AddNew().Name = "new";
            obj.AddNew().Name = "remove in clone";
            Assert.AreEqual(3, obj.Count, "preclone count");
            var cloned = obj.Clone();

            Assert.AreEqual(3, cloned.Count, "postclone count");
            cloned.Remove(cloned.Where(_ => _.Name == "remove in clone").First());
            Assert.AreEqual(2, cloned.Count, "postclone count after removed obj");
            Assert.AreEqual(cloned[0].Name, obj[0].Name, "postclone [0]");
            Assert.AreEqual(cloned[1].Name, obj[1].Name, "postclone [1]");
            cloned[0].Name = "existing (cloned)";
            cloned[1].Name = "new (cloned)";
            cloned.AddNew().Name = "new in clone";
            cloned.MockUpdated();

            var merger = new GraphMerger();

            merger.MergeBusinessListGraph <FooList, Foo>(obj, cloned);
            Assert.AreEqual(cloned.Count, obj.Count, "count");
            Assert.AreEqual(3, obj.Count, "count 3");
            Assert.AreEqual(cloned[0].Name, obj[0].Name, "[0]");
            Assert.AreEqual(cloned[1].Name, obj[1].Name, "[1]");
            Assert.AreEqual(cloned[2].Name, obj[2].Name, "[2]");
            Assert.AreEqual(cloned.IsDirty, obj.IsDirty);
            Assert.IsFalse(obj.IsDirty);
        }
Esempio n. 3
0
        public void MergeChildList()
        {
            var obj = Csla.DataPortal.Create <Foo>();

            obj.ChildList.AddNew();
            obj.ChildList[0].Name = "1";
            obj.ChildList.AddNew();
            obj.ChildList[1].Name = "12";
            obj.MockUpdated();
            var cloned = obj.Clone();

            cloned.ChildList[0].Name = "2";
            cloned.ChildList.RemoveAt(1);
            cloned.ChildList.AddNew();
            cloned.ChildList[1].Name = "42";
            cloned.MockUpdated();

            var merger = new GraphMerger();

            merger.MergeGraph(obj, cloned);
            Assert.IsFalse(ReferenceEquals(obj.ChildList, cloned.ChildList), "ref");
            Assert.AreEqual(2, obj.ChildList.Count, "count");
            Assert.IsFalse(obj.ChildList[0].IsValid, "[0] isvalid");
            Assert.IsTrue(obj.ChildList[1].IsValid, "[1] isvalid");
            Assert.IsFalse(obj.ChildList.IsValid, "isvalid");
            Assert.AreEqual("2", obj.ChildList[0].Name, "[0] name");
            Assert.AreEqual("42", obj.ChildList[1].Name, "[1] name");
            Assert.IsFalse(ReferenceEquals(obj.ChildList[0], cloned.ChildList[0]), "[0] ref");
            Assert.IsTrue(ReferenceEquals(obj.ChildList[1], cloned.ChildList[1]), "[1] ref");
            Assert.IsTrue(ReferenceEquals(obj.ChildList, obj.ChildList[1].Parent), "parent ref");
        }
Esempio n. 4
0
        public void MergeChildDelete()
        {
            var obj = Csla.DataPortal.Create <Foo>();

            obj.Name = "1";
            obj.AddChild();
            obj.Child.Name = "42";
            obj.MockUpdated();
            obj.MarkForDelete();
            var cloned = obj.Clone();

            cloned.Name       = "2";
            cloned.Child.Name = "43";
            cloned.MockDeleted();

            var changed = false;

            obj.PropertyChanged += (o, e) => { changed = true; };

            var merger = new GraphMerger();

            merger.MergeGraph(obj, cloned);
            Assert.IsFalse(ReferenceEquals(obj.Child, cloned.Child), "ref");
            Assert.AreEqual(cloned.Child.Name, obj.Child.Name, "name");
            Assert.AreEqual(cloned.Child.IsDirty, obj.Child.IsDirty, "isdirty");
            Assert.AreEqual(cloned.Child.IsNew, obj.Child.IsNew, "isnew");
            Assert.IsTrue(obj.Child.IsNew, "isnew true");
            Assert.IsTrue(obj.Child.IsDirty, "isdirty true");
            Assert.IsTrue(obj.Child.IsValid, "isvalid true");
            Assert.IsTrue(changed, "changed");
        }
Esempio n. 5
0
        public void MergeDelete()
        {
            var obj = Csla.DataPortal.Create <Foo>();

            obj.Name = "1";
            obj.MockUpdated();   // make it an old object
            obj.MarkForDelete(); // mark for deletion
            var cloned = obj.Clone();

            cloned.Name = "2";
            cloned.MockDeleted(); // mock DP delete result

            var changed = false;

            obj.PropertyChanged += (o, e) => { changed = true; };

            var merger = new GraphMerger();

            merger.MergeGraph(obj, cloned);
            Assert.AreEqual(cloned.Name, obj.Name);
            Assert.IsTrue(obj.IsNew, "obj.IsTrue");
            Assert.IsFalse(obj.IsDeleted, "obj.IsDeleted");
            Assert.AreEqual(cloned.IsDeleted, obj.IsDeleted, "IsDeleted equal");
            Assert.AreEqual(cloned.IsDirty, obj.IsDirty);
            Assert.AreEqual(cloned.IsNew, obj.IsNew);
            Assert.IsFalse(obj.IsValid);
            Assert.IsTrue(changed);
        }
Esempio n. 6
0
        public void MergeRuleUnbroken()
        {
            ApplicationContext applicationContext = _testDIContext.CreateTestApplicationContext();
            IDataPortal <Foo>  dataPortal         = _testDIContext.CreateDataPortal <Foo>();

            var obj = dataPortal.Create();

            obj.Name = "2";
            obj.MockUpdated();
            var cloned = obj.Clone();

            cloned.Name = "1";
            cloned.MockUpdated();

            var changed = false;

            obj.PropertyChanged += (o, e) => { changed = true; };

            var merger = new GraphMerger(applicationContext);

            merger.MergeGraph(obj, cloned);
            Assert.AreEqual(cloned.Name, obj.Name);
            Assert.AreEqual(cloned.IsDirty, obj.IsDirty);
            Assert.AreEqual(cloned.IsNew, obj.IsNew);
            Assert.IsFalse(obj.IsDirty);
            Assert.IsTrue(obj.IsValid);
            Assert.IsTrue(changed);
        }
Esempio n. 7
0
        public void MergeChildUpdate()
        {
            ApplicationContext applicationContext = _testDIContext.CreateTestApplicationContext();
            IDataPortal <Foo>  dataPortal         = _testDIContext.CreateDataPortal <Foo>();

            var obj = dataPortal.Create();

            obj.Name = "1";
            obj.AddChild(dataPortal);
            obj.Child.Name = "42";
            obj.MockUpdated();
            var cloned = obj.Clone();

            cloned.Name       = "2";
            cloned.Child.Name = "2";
            cloned.MockUpdated();

            var changed = false;

            obj.PropertyChanged += (o, e) => { changed = true; };

            var merger = new GraphMerger(applicationContext);

            merger.MergeGraph(obj, cloned);
            Assert.IsFalse(ReferenceEquals(obj.Child, cloned.Child), "ref");
            Assert.AreEqual(cloned.Child.Name, obj.Child.Name, "name");
            Assert.AreEqual(cloned.Child.IsDirty, obj.Child.IsDirty, "isdirty");
            Assert.AreEqual(cloned.Child.IsNew, obj.Child.IsNew, "isnew");
            Assert.IsFalse(obj.Child.IsNew, "isnew false");
            Assert.IsFalse(obj.Child.IsDirty, "isdirty false");
            Assert.IsFalse(obj.Child.IsValid, "isvalid false");
            Assert.IsTrue(changed, "changed");
        }
Esempio n. 8
0
        public void MergeNewChildUpdate()
        {
            var obj = Csla.DataPortal.Create <Foo>();

            obj.Name = "1";
            obj.MockUpdated();
            var cloned = obj.Clone();

            cloned.AddChild();
            cloned.Child.Name = "42";
            cloned.MockUpdated();

            var merger = new GraphMerger();

            merger.MergeGraph(obj, cloned);
            Assert.IsTrue(ReferenceEquals(obj.Child, cloned.Child), "ref");
            Assert.ReferenceEquals(obj, obj.Child.Parent);
        }