public void AddToListAppend()
        {
            // Arrange
            var targetObject = new SimpleObjectWithNestedObject
            {
                SimpleObject = new SimpleObject
                {
                    IntegerList = new List <int> {
                        1, 2, 3
                    }
                }
            };

            var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

            patchDocument.Add(o => o.SimpleObject.IntegerList, 4);

            // Act
            patchDocument.ApplyTo(targetObject);

            // Assert
            Assert.Equal(new List <int> {
                1, 2, 3, 4
            }, targetObject.SimpleObject.IntegerList);
        }
    public void Copy_DeepClonesObject()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                StringProperty        = "A",
                AnotherStringProperty = "B"
            },
            InheritedObject = new InheritedObject()
            {
                StringProperty        = "C",
                AnotherStringProperty = "D"
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Copy(o => o.InheritedObject, o => o.SimpleObject);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("C", targetObject.SimpleObject.StringProperty);
        Assert.Equal("D", targetObject.SimpleObject.AnotherStringProperty);
        Assert.Equal("C", targetObject.InheritedObject.StringProperty);
        Assert.Equal("D", targetObject.InheritedObject.AnotherStringProperty);
        Assert.NotSame(targetObject.SimpleObject.StringProperty, targetObject.InheritedObject.StringProperty);
    }
    public void TestNestedObject()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            NestedObject = new NestedObject()
            {
                StringProperty = "B"
            }
        };

        var testNested = new NestedObject()
        {
            StringProperty = "B"
        };
        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Test(o => o.NestedObject, testNested);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("B", targetObject.NestedObject.StringProperty);
    }
    public void ReplaceNestedObject_WithSerialization()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            IntegerValue = 1
        };

        var newNested = new NestedObject()
        {
            StringProperty = "B"
        };
        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Replace(o => o.NestedObject, newNested);

        var serialized   = JsonConvert.SerializeObject(patchDocument);
        var deserialized = JsonConvert.DeserializeObject <JsonPatchDocument <SimpleObjectWithNestedObject> >(serialized);

        // Act
        deserialized.ApplyTo(targetObject);

        // Assert
        Assert.Equal("B", targetObject.NestedObject.StringProperty);
    }
예제 #5
0
    public void Replace_AtEndOfList()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                IntegerList = new List <int>()
                {
                    1, 2, 3
                }
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Replace(o => o.SimpleObject.IntegerList, 5);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(new List <int>()
        {
            1, 2, 5
        }, targetObject.SimpleObject.IntegerList);
    }
예제 #6
0
    public void MoveFromList_ToNonList_BetweenHierarchy()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                IntegerList = new List <int>()
                {
                    1, 2, 3
                }
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Move(o => o.SimpleObject.IntegerList, 0, o => o.IntegerValue);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(new List <int>()
        {
            2, 3
        }, targetObject.SimpleObject.IntegerList);
        Assert.Equal(1, targetObject.IntegerValue);
    }
예제 #7
0
    public void AddToIntegerIList()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                IntegerIList = new List <int>()
                {
                    1, 2, 3
                }
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Add(o => (List <int>)o.SimpleObject.IntegerIList, 4, 0);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(new List <int>()
        {
            4, 1, 2, 3
        }, targetObject.SimpleObject.IntegerIList);
    }
    public void Move_KeepsObjectReference()
    {
        // Arrange
        var sDto = new SimpleObject()
        {
            StringProperty        = "A",
            AnotherStringProperty = "B"
        };
        var iDto = new InheritedObject()
        {
            StringProperty        = "C",
            AnotherStringProperty = "D"
        };
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject    = sDto,
            InheritedObject = iDto
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Move(o => o.InheritedObject, o => o.SimpleObject);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("C", targetObject.SimpleObject.StringProperty);
        Assert.Equal("D", targetObject.SimpleObject.AnotherStringProperty);
        Assert.Same(iDto, targetObject.SimpleObject);
        Assert.Null(targetObject.InheritedObject);
    }
예제 #9
0
    public void AddToComplextTypeList_SpecifyIndex()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObjectList = new List <SimpleObject>()
            {
                new SimpleObject
                {
                    StringProperty = "String1"
                },
                new SimpleObject
                {
                    StringProperty = "String2"
                }
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Add(o => o.SimpleObjectList[0].StringProperty, "ChangedString1");

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("ChangedString1", targetObject.SimpleObjectList[0].StringProperty);
    }
    public void Copy_KeepsObjectType()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject    = new SimpleObject(),
            InheritedObject = new InheritedObject()
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Copy(o => o.InheritedObject, o => o.SimpleObject);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(typeof(InheritedObject), targetObject.SimpleObject.GetType());
    }
    public void Copy_BreaksObjectReference()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject    = new SimpleObject(),
            InheritedObject = new InheritedObject()
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Copy(o => o.InheritedObject, o => o.SimpleObject);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.NotSame(targetObject.SimpleObject, targetObject.InheritedObject);
    }
예제 #12
0
    public void Move_KeepsObjectReferenceInList()
    {
        // Arrange
        var simpleObject1 = new SimpleObject()
        {
            IntegerValue = 1
        };
        var simpleObject2 = new SimpleObject()
        {
            IntegerValue = 2
        };
        var simpleObject3 = new SimpleObject()
        {
            IntegerValue = 3
        };
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObjectList = new List <SimpleObject>()
            {
                simpleObject1,
                simpleObject2,
                simpleObject3
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Move(o => o.SimpleObjectList, 0, o => o.SimpleObjectList, 1);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(new List <SimpleObject>()
        {
            simpleObject2, simpleObject1, simpleObject3
        }, targetObject.SimpleObjectList);
        Assert.Equal(2, targetObject.SimpleObjectList[0].IntegerValue);
        Assert.Equal(1, targetObject.SimpleObjectList[1].IntegerValue);
        Assert.Same(simpleObject2, targetObject.SimpleObjectList[0]);
        Assert.Same(simpleObject1, targetObject.SimpleObjectList[1]);
    }
        public void TestStringProperty_InNestedObject()
        {
            // Arrange
            var targetObject = new SimpleObjectWithNestedObject
            {
                NestedObject = new NestedObject {
                    StringProperty = "A"
                }
            };

            var patchDocument = new JsonPatchDocument <NestedObject>();

            patchDocument.Test(o => o.StringProperty, "A");

            // Act
            patchDocument.ApplyTo(targetObject.NestedObject);

            // Assert
            Assert.Equal("A", targetObject.NestedObject.StringProperty);
        }
        public void TestInList_IsSuccessful()
        {
            // Arrange
            var targetObject = new SimpleObjectWithNestedObject
            {
                SimpleObject = new SimpleObject
                {
                    IntegerList = new List <int> {
                        1, 2, 3
                    }
                }
            };

            var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

            patchDocument.Test(o => o.SimpleObject.IntegerList, 3, 2);

            // Act & Assert
            patchDocument.ApplyTo(targetObject);
        }
    public void AddReplaces_ExistingStringProperty()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                StringProperty = "A"
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Add(o => o.SimpleObject.StringProperty, "B");

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("B", targetObject.SimpleObject.StringProperty);
    }
    public void RemoveStringProperty()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                StringProperty = "A"
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Remove(o => o.SimpleObject.StringProperty);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Null(targetObject.SimpleObject.StringProperty);
    }
    public void CopyNullStringProperty_ToAnotherStringProperty()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                StringProperty        = null,
                AnotherStringProperty = "B"
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Copy(o => o.SimpleObject.StringProperty, o => o.SimpleObject.AnotherStringProperty);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Null(targetObject.SimpleObject.AnotherStringProperty);
    }
        public void TestInList_InvalidPosition()
        {
            // Arrange
            var targetObject = new SimpleObjectWithNestedObject
            {
                SimpleObject = new SimpleObject
                {
                    IntegerList = new List <int> {
                        1, 2, 3
                    }
                }
            };

            var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

            patchDocument.Test(o => o.SimpleObject.IntegerList, 4, -1);

            // Act & Assert
            var exception = Assert.Throws <JsonPatchException>(() => { patchDocument.ApplyTo(targetObject); });

            Assert.Equal("The index value provided by path segment '-1' is out of bounds of the array size.",
                         exception.Message);
        }
    public void MoveIntegerValue_ToAnotherIntegerProperty()
    {
        // Arrange
        var targetObject = new SimpleObjectWithNestedObject()
        {
            SimpleObject = new SimpleObject()
            {
                IntegerValue        = 2,
                AnotherIntegerValue = 3
            }
        };

        var patchDocument = new JsonPatchDocument <SimpleObjectWithNestedObject>();

        patchDocument.Move(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.AnotherIntegerValue);

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(2, targetObject.SimpleObject.AnotherIntegerValue);
        Assert.Equal(0, targetObject.SimpleObject.IntegerValue);
    }