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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }