Exemplo n.º 1
0
    public void TryGet_ThrowsPathNotFoundException_ForNonExistingProperty()
    {
        // Arrange
        var     adapter  = new DynamicObjectAdapter();
        dynamic target   = new DynamicTestObject();
        var     segment  = "NewProperty";
        var     resolver = new DefaultContractResolver();

        // Act
        var getStatus = adapter.TryGet(target, segment, resolver, out object getValue, out string getErrorMessage);

        // Assert
        Assert.False(getStatus);
        Assert.Null(getValue);
        Assert.Equal($"The target location specified by path segment '{segment}' was not found.", getErrorMessage);
    }
Exemplo n.º 2
0
    public void TryAdd_AddsNewProperty()
    {
        // Arrange
        var     adapter  = new DynamicObjectAdapter();
        dynamic target   = new DynamicTestObject();
        var     segment  = "NewProperty";
        var     resolver = new DefaultContractResolver();

        // Act
        var status = adapter.TryAdd(target, segment, resolver, "new", out string errorMessage);

        // Assert
        Assert.True(status);
        Assert.Null(errorMessage);
        Assert.Equal("new", target.NewProperty);
    }
Exemplo n.º 3
0
        public void TryTraverse_ThrowsPathNotFoundException_ForNonExistingProperty()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();

            target.NestedObject = new DynamicTestObject();
            var segment = "NewProperty";
            var options = new JsonSerializerOptions();

            // Act
            var status = adapter.TryTraverse(target.NestedObject, typeof(DynamicTestObject), segment, options, out object _, out string errorMessage);

            // Assert
            Assert.False(status);
            Assert.Equal($"The target location specified by path segment '{segment}' was not found.", errorMessage);
        }
Exemplo n.º 4
0
        public void TryReplace_ThrowsPropertyInvalidException_IfNewValueIsNotTheSameTypeAsInitialValue()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();

            target.NewProperty = 1;
            var segment = "NewProperty";
            var options = new JsonSerializerOptions();

            // Act
            var status = adapter.TryReplace(target, typeof(DynamicTestObject), segment, options, "test", out string errorMessage);

            // Assert
            Assert.False(status);
            Assert.Equal("The value 'test' is invalid for target location.", errorMessage);
        }
Exemplo n.º 5
0
    public void TryReplace_ThrowsPropertyInvalidException_IfNewValueIsNotTheSameTypeAsInitialValue()
    {
        // Arrange
        var     adapter = new DynamicObjectAdapter();
        dynamic target  = new DynamicTestObject();

        target.NewProperty = 1;
        var segment  = "NewProperty";
        var resolver = new DefaultContractResolver();

        // Act
        var status = adapter.TryReplace(target, segment, resolver, "test", out string errorMessage);

        // Assert
        Assert.False(status);
        Assert.Equal($"The value 'test' is invalid for target location.", errorMessage);
    }
Exemplo n.º 6
0
        public void TryTest_ThrowsJsonPatchException_IfTestFails()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();

            target.NewProperty = "Joana";
            var segment = "NewProperty";
            var expectedErrorMessage = $"The current value 'Joana' at path '{segment}' is not equal to the test value 'John'.";
            var options = new JsonSerializerOptions();

            // Act
            var testStatus = adapter.TryTest(target, typeof(DynamicTestObject), segment, options, "John", out string errorMessage);

            // Assert
            Assert.False(testStatus);
            Assert.Equal(expectedErrorMessage, errorMessage);
        }
Exemplo n.º 7
0
        public void RemoveNestedProperty_FromDynamicObject()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.Test             = new DynamicTestObject();
            dynamicTestObject.Test.AnotherTest = "A";

            var patchDocument = new JsonPatchDocument();

            patchDocument.Remove("Test");

            // Act
            patchDocument.ApplyTo(dynamicTestObject);
            dynamicTestObject.TryGetValue("Test", out object valueFromDictionary);

            // Assert
            Assert.Null(valueFromDictionary);
        }
Exemplo n.º 8
0
        public void CopyProperties_InNestedDynamicObject()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.NestedDynamicObject = new DynamicTestObject();
            dynamicTestObject.NestedDynamicObject.StringProperty        = "A";
            dynamicTestObject.NestedDynamicObject.AnotherStringProperty = "B";

            var patchDocument = new JsonPatchDocument();

            patchDocument.Copy("NestedDynamicObject/StringProperty", "NestedDynamicObject/AnotherStringProperty");

            // Act
            patchDocument.ApplyTo(dynamicTestObject);

            // Assert
            Assert.Equal("A", dynamicTestObject.NestedDynamicObject.AnotherStringProperty);
        }
Exemplo n.º 9
0
    public void TryTraverse_FindsNextTarget()
    {
        // Arrange
        var     adapter = new DynamicObjectAdapter();
        dynamic target  = new DynamicTestObject();

        target.NestedObject             = new DynamicTestObject();
        target.NestedObject.NewProperty = "A";
        var segment  = "NestedObject";
        var resolver = new DefaultContractResolver();

        // Act
        var status = adapter.TryTraverse(target, segment, resolver, out object nextTarget, out string errorMessage);

        // Assert
        Assert.True(status);
        Assert.Null(errorMessage);
        Assert.Equal(target.NestedObject, nextTarget);
    }
Exemplo n.º 10
0
        public void TryTraverse_FindsNextTarget()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();

            target.NestedObject             = new DynamicTestObject();
            target.NestedObject.NewProperty = "A";
            var segment = "NestedObject";
            var options = new JsonSerializerOptions();

            // Act
            var status = adapter.TryTraverse(target, typeof(DynamicTestObject), segment, options, out object nextTarget, out string errorMessage);

            // Assert
            Assert.True(status);
            Assert.Null(errorMessage);
            Assert.Equal(target.NestedObject, nextTarget);
        }
Exemplo n.º 11
0
        public void MoveToNonExistingProperty_InDynamicObject_ShouldAddNewProperty()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.StringProperty = "A";

            var patchDocument = new JsonPatchDocument();

            patchDocument.Move("StringProperty", "AnotherStringProperty");

            // Act
            patchDocument.ApplyTo(dynamicTestObject);
            dynamicTestObject.TryGetValue("StringProperty", out object valueFromDictionary);

            // Assert
            Assert.Equal("A", dynamicTestObject.AnotherStringProperty);
            Assert.Null(valueFromDictionary);
        }
Exemplo n.º 12
0
        public void RemoveFromNestedObject_InDynamicObject_MixedCase_ThrowsPathNotFoundException()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.SimpleObject = new SimpleObject
            {
                StringProperty = "A"
            };

            var patchDocument = new JsonPatchDocument();

            patchDocument.Remove("Simpleobject/stringProperty");

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

            // Assert
            Assert.Equal("The target location specified by path segment 'Simpleobject' was not found.", exception.Message);
        }
Exemplo n.º 13
0
        public void AddResults_ShouldReplaceExistingPropertyValue_InNestedDynamicObject()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.Nested = new NestedObject();
            dynamicTestObject.Nested.DynamicProperty = new DynamicTestObject();
            dynamicTestObject.Nested.DynamicProperty.InBetweenFirst = new DynamicTestObject();
            dynamicTestObject.Nested.DynamicProperty.InBetweenFirst.InBetweenSecond = new DynamicTestObject();
            dynamicTestObject.Nested.DynamicProperty.InBetweenFirst.InBetweenSecond.StringProperty = "A";

            var patchDocument = new JsonPatchDocument();

            patchDocument.Add("/Nested/DynamicProperty/InBetweenFirst/InBetweenSecond/StringProperty", "B");

            // Act
            patchDocument.ApplyTo(dynamicTestObject);

            // Assert
            Assert.Equal("B", dynamicTestObject.Nested.DynamicProperty.InBetweenFirst.InBetweenSecond.StringProperty);
        }
Exemplo n.º 14
0
        public void TestIntegerPropertyValue_ThrowsJsonPatchException_IfTestFails()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.Nested = new SimpleObject
            {
                IntegerList = new List <int> {
                    1, 2, 3
                }
            };

            var patchDocument = new JsonPatchDocument();

            patchDocument.Test("Nested/IntegerList/0", 2);

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

            // Assert
            Assert.Equal("The current value '1' at position '0' is not equal to the test value '2'.", exception.Message);
        }
Exemplo n.º 15
0
        public void MovePropertyValue_FromDynamicObject_ToTypedObject()
        {
            // Arrange
            dynamic dynamicTestObject = new DynamicTestObject();

            dynamicTestObject.StringProperty = "A";
            dynamicTestObject.SimpleObject   = new SimpleObject {
                AnotherStringProperty = "B"
            };

            var patchDocument = new JsonPatchDocument();

            patchDocument.Move("StringProperty", "SimpleObject/AnotherStringProperty");

            // Act
            patchDocument.ApplyTo(dynamicTestObject);
            dynamicTestObject.TryGetValue("StringProperty", out object valueFromDictionary);

            // Assert
            Assert.Equal("A", dynamicTestObject.SimpleObject.AnotherStringProperty);
            Assert.Null(valueFromDictionary);
        }
Exemplo n.º 16
0
        public void TryAdd_ReplacesExistingPropertyValue()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();

            target.List = new List <int> {
                1, 2, 3
            };
            var value = new List <string> {
                "stringValue1", "stringValue2"
            };
            var segment = "List";
            var options = new JsonSerializerOptions();

            // Act
            var status = adapter.TryAdd(target, typeof(DynamicTestObject), segment, options, value, out string errorMessage);

            // Assert
            Assert.True(status);
            Assert.Null(errorMessage);
            Assert.Equal(value, target.List);
        }
Exemplo n.º 17
0
        public void AddProperty_ToDynamicTestObject_WithCustomNamingStrategy()
        {
            // Arrange
            var jsonSerializerOptions = new JsonSerializerOptions
            {
                DictionaryKeyPolicy = new TestDictionaryNamingStrategy()
            };

            dynamic targetObject = new DynamicTestObject();

            targetObject.Test = 1;

            var patchDocument = new JsonPatchDocument();

            patchDocument.Add("NewInt", 1);

            // Act
            patchDocument.ApplyTo(targetObject, jsonSerializerOptions);

            // Assert
            Assert.Equal(1, targetObject.customNewInt);
            Assert.Equal(1, targetObject.Test);
        }
Exemplo n.º 18
0
        public void TryTest_DoesNotThrowException_IfTestSuccessful()
        {
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();
            var     value   = new List <object>
            {
                "Joana",
                2,
                new Customer("Joana", 25)
            };

            target.NewProperty = value;
            var segment = "NewProperty";
            var options = new JsonSerializerOptions();

            // Act
            var testStatus = adapter.TryTest(target, typeof(DynamicTestObject), segment, options, value, out string errorMessage);

            // Assert
            Assert.Equal(value, target.NewProperty);
            Assert.True(testStatus);
            Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message");
        }
Exemplo n.º 19
0
        public void CopyPropertyValue_ToDynamicTestObject_WithCustomNamingStrategy()
        {
            // Arrange
            var jsonSerializerOptions = new JsonSerializerOptions
            {
                DictionaryKeyPolicy = new TestDictionaryNamingStrategy()
            };

            dynamic targetObject = new DynamicTestObject();

            targetObject.customStringProperty        = "A";
            targetObject.customAnotherStringProperty = "B";

            var patchDocument = new JsonPatchDocument();

            patchDocument.Copy("StringProperty", "AnotherStringProperty");

            // Act
            patchDocument.ApplyTo(targetObject, jsonSerializerOptions);

            // Assert
            Assert.Equal("A", targetObject.customAnotherStringProperty);
        }
Exemplo n.º 20
0
        public void TryRemove_SetsPropertyToDefaultOrNull(object value, object expectedValue)
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();
            var     segment = "NewProperty";
            var     options = new JsonSerializerOptions();

            // Act 1
            var addStatus = adapter.TryAdd(target, typeof(DynamicTestObject), segment, options, value, out string errorMessage);

            // Assert 1
            Assert.True(addStatus);
            Assert.Null(errorMessage);
            Assert.Equal(value, target.NewProperty);

            // Act 2
            var removeStatus = adapter.TryRemove(target, typeof(DynamicTestObject), segment, options, out string removeErrorMessage);

            // Assert 2
            Assert.True(removeStatus);
            Assert.Null(removeErrorMessage);
            Assert.Equal(expectedValue, target.NewProperty);
        }
Exemplo n.º 21
0
    public void TryRemove_SetsPropertyToDefaultOrNull(object value, object expectedValue)
    {
        // Arrange
        var     adapter  = new DynamicObjectAdapter();
        dynamic target   = new DynamicTestObject();
        var     segment  = "NewProperty";
        var     resolver = new DefaultContractResolver();

        // Act 1
        var addStatus = adapter.TryAdd(target, segment, resolver, value, out string errorMessage);

        // Assert 1
        Assert.True(addStatus);
        Assert.Null(errorMessage);
        Assert.Equal(value, target.NewProperty);

        // Act 2
        var removeStatus = adapter.TryRemove(target, segment, resolver, out string removeErrorMessage);

        // Assert 2
        Assert.True(removeStatus);
        Assert.Null(removeErrorMessage);
        Assert.Equal(expectedValue, target.NewProperty);
    }
Exemplo n.º 22
0
    public void TryGet_GetsPropertyValue_ForExistingProperty()
    {
        // Arrange
        var     adapter  = new DynamicObjectAdapter();
        dynamic target   = new DynamicTestObject();
        var     segment  = "NewProperty";
        var     resolver = new DefaultContractResolver();

        // Act 1
        var addStatus = adapter.TryAdd(target, segment, resolver, "new", out string errorMessage);

        // Assert 1
        Assert.True(addStatus);
        Assert.Null(errorMessage);
        Assert.Equal("new", target.NewProperty);

        // Act 2
        var getStatus = adapter.TryGet(target, segment, resolver, out object getValue, out string getErrorMessage);

        // Assert 2
        Assert.True(getStatus);
        Assert.Null(getErrorMessage);
        Assert.Equal(getValue, target.NewProperty);
    }
Exemplo n.º 23
0
    public void CopyPropertyValue_ToDynamicTestObject_WithCustomNamingStrategy()
    {
        // Arrange
        var contractResolver = new DefaultContractResolver
        {
            NamingStrategy = new TestNamingStrategy()
        };

        dynamic targetObject = new DynamicTestObject();

        targetObject.customStringProperty        = "A";
        targetObject.customAnotherStringProperty = "B";

        var patchDocument = new JsonPatchDocument();

        patchDocument.Copy("StringProperty", "AnotherStringProperty");
        patchDocument.ContractResolver = contractResolver;

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal("A", targetObject.customAnotherStringProperty);
    }
Exemplo n.º 24
0
    public void AddProperty_ToDynamicTestObject_WithCustomNamingStrategy()
    {
        // Arrange
        var contractResolver = new DefaultContractResolver
        {
            NamingStrategy = new TestNamingStrategy()
        };

        dynamic targetObject = new DynamicTestObject();

        targetObject.Test = 1;

        var patchDocument = new JsonPatchDocument();

        patchDocument.Add("NewInt", 1);
        patchDocument.ContractResolver = contractResolver;

        // Act
        patchDocument.ApplyTo(targetObject);

        // Assert
        Assert.Equal(1, targetObject.customNewInt);
        Assert.Equal(1, targetObject.Test);
    }
Exemplo n.º 25
0
        public void TryGet_GetsPropertyValue_ForExistingProperty()
        {
            // Arrange
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();
            var     segment = "NewProperty";
            var     options = new JsonSerializerOptions();

            // Act 1
            var addStatus = adapter.TryAdd(target, typeof(DynamicTestObject), segment, options, "new", out string errorMessage);

            // Assert 1
            Assert.True(addStatus);
            Assert.Null(errorMessage);
            Assert.Equal("new", target.NewProperty);

            // Act 2
            var getStatus = adapter.TryGet(target, typeof(DynamicTestObject), segment, options, out object getValue, out string getErrorMessage);

            // Assert 2
            Assert.True(getStatus);
            Assert.Null(getErrorMessage);
            Assert.Equal(getValue, target.NewProperty);
        }