From 3d6a8615de85a8d25f78db2abe2cc511be46592c Mon Sep 17 00:00:00 2001 From: Jass Bagga Date: Thu, 24 Aug 2017 15:11:01 -0700 Subject: [PATCH] Support DynamicObject types (#99) Addresses #38 --- .../Internal/DynamicObjectAdapter.cs | 211 ++++ .../Internal/ObjectVisitor.cs | 14 +- .../Properties/Resources.Designer.cs | 124 +- .../DictionaryAdapterTest.cs | 27 +- .../Dynamic/AddOperationTests.cs | 14 +- .../Dynamic/AddTypedOperationTests.cs | 30 +- .../Dynamic/CopyOperationTests.cs | 38 +- .../Dynamic/CopyTypedOperationTests.cs | 62 +- .../Dynamic/InheritedObject.cs | 10 + .../Dynamic/MoveOperationTests.cs | 24 +- .../Dynamic/MoveTypedOperationTests.cs | 14 +- .../Dynamic/{NestedDTO.cs => NestedObject.cs} | 4 +- .../Dynamic/PatchDocumentTests.cs | 12 +- .../Dynamic/RemoveOperationTests.cs | 43 +- .../Dynamic/RemoveTypedOperationTests.cs | 48 +- .../Dynamic/ReplaceOperationTests.cs | 38 +- .../Dynamic/ReplaceTypedOperationTests.cs | 54 +- .../Dynamic/SimpleDTOWithNestedDTO.cs | 22 - .../Dynamic/{SimpleDTO.cs => SimpleObject.cs} | 6 +- .../Dynamic/SimpleObjectWithNestedObject.cs | 22 + .../DynamicObjectAdapterTest.cs | 231 ++++ .../DynamicTestObject.cs | 87 ++ .../{InheritedDTO.cs => InheritedObject.cs} | 2 +- .../DynamicObjectIntegrationTests.cs | 263 +++++ ...nPatchDocumentJsonPropertyAttributeTest.cs | 38 +- ...TO.cs => JsonPropertyComplexNameObject.cs} | 4 +- ...onPropertyDTO.cs => JsonPropertyObject.cs} | 2 +- ...s => JsonPropertyWithAnotherNameObject.cs} | 2 +- .../JsonPropertyWithInheritanceDTO.cs | 19 - .../JsonPropertyWithInheritanceObject.cs | 15 + .../ListAdapterTest.cs | 86 +- .../{NestedDTO.cs => NestedObject.cs} | 2 +- .../NestedObjectTests.cs | 1030 ++++++++--------- .../ObjectAdapterTests.cs | 422 +++---- .../ObjectVisitorTest.cs | 44 +- .../SimpleDTOWithNestedDTO.cs | 30 - .../SimpleDTOWithNestedDTOWithNullCheck.cs | 15 - .../{SimpleDTO.cs => SimpleObject.cs} | 2 +- .../SimpleObjectWithNestedObject.cs | 30 + ...mpleObjectWithNestedObjectWithNullCheck.cs | 15 + ...lCheck.cs => SimpleObjectWithNullCheck.cs} | 2 +- 41 files changed, 1950 insertions(+), 1208 deletions(-) create mode 100644 src/Microsoft.AspNetCore.JsonPatch/Internal/DynamicObjectAdapter.cs create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/InheritedObject.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/{NestedDTO.cs => NestedObject.cs} (78%) delete mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTOWithNestedDTO.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/{SimpleDTO.cs => SimpleObject.cs} (81%) create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObjectWithNestedObject.cs create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/DynamicObjectAdapterTest.cs create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/DynamicTestObject.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/{InheritedDTO.cs => InheritedObject.cs} (85%) create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/IntegrationTests/DynamicObjectIntegrationTests.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/{JsonPropertyComplexNameDTO.cs => JsonPropertyComplexNameObject.cs} (78%) rename test/Microsoft.AspNetCore.JsonPatch.Test/{JsonPropertyDTO.cs => JsonPropertyObject.cs} (90%) rename test/Microsoft.AspNetCore.JsonPatch.Test/{JsonPropertyWithAnotherNameDTO.cs => JsonPropertyWithAnotherNameObject.cs} (84%) delete mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceDTO.cs create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceObject.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/{NestedDTO.cs => NestedObject.cs} (89%) delete mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTO.cs delete mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTOWithNullCheck.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/{SimpleDTO.cs => SimpleObject.cs} (95%) create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObject.cs create mode 100644 test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObjectWithNullCheck.cs rename test/Microsoft.AspNetCore.JsonPatch.Test/{SimpleDTOWithNullCheck.cs => SimpleObjectWithNullCheck.cs} (93%) diff --git a/src/Microsoft.AspNetCore.JsonPatch/Internal/DynamicObjectAdapter.cs b/src/Microsoft.AspNetCore.JsonPatch/Internal/DynamicObjectAdapter.cs new file mode 100644 index 0000000000..433326ce53 --- /dev/null +++ b/src/Microsoft.AspNetCore.JsonPatch/Internal/DynamicObjectAdapter.cs @@ -0,0 +1,211 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using Microsoft.CSharp.RuntimeBinder; +using Newtonsoft.Json.Serialization; +using CSharpBinder = Microsoft.CSharp.RuntimeBinder; + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class DynamicObjectAdapter : IAdapter + { + public bool TryAdd( + object target, + string segment, + IContractResolver contractResolver, + object value, + out string errorMessage) + { + if (!TrySetDynamicObjectProperty(target, contractResolver, segment, value, out errorMessage)) + { + return false; + } + + errorMessage = null; + return true; + } + + public bool TryGet( + object target, + string segment, + IContractResolver contractResolver, + out object value, + out string errorMessage) + { + if (!TryGetDynamicObjectProperty(target, contractResolver, segment, out value, out errorMessage)) + { + value = null; + return false; + } + + errorMessage = null; + return true; + } + + public bool TryRemove( + object target, + string segment, + IContractResolver contractResolver, + out string errorMessage) + { + if (!TryGetDynamicObjectProperty(target, contractResolver, segment, out var property, out errorMessage)) + { + return false; + } + + // Setting the value to "null" will use the default value in case of value types, and + // null in case of reference types + object value = null; + if (property.GetType().GetTypeInfo().IsValueType + && Nullable.GetUnderlyingType(property.GetType()) == null) + { + value = Activator.CreateInstance(property.GetType()); + } + + if (!TrySetDynamicObjectProperty(target, contractResolver, segment, value, out errorMessage)) + { + return false; + } + + errorMessage = null; + return true; + + } + + public bool TryReplace( + object target, + string segment, + IContractResolver contractResolver, + object value, + out string errorMessage) + { + if (!TryGetDynamicObjectProperty(target, contractResolver, segment, out var property, out errorMessage)) + { + return false; + } + + if (!TryConvertValue(value, property.GetType(), out var convertedValue)) + { + errorMessage = Resources.FormatInvalidValueForProperty(value); + return false; + } + + if (!TrySetDynamicObjectProperty(target, contractResolver, segment, convertedValue, out errorMessage)) + { + return false; + } + + errorMessage = null; + return true; + } + + public bool TryTraverse( + object target, + string segment, + IContractResolver contractResolver, + out object nextTarget, + out string errorMessage) + { + if (!TryGetDynamicObjectProperty(target, contractResolver, segment, out var property, out errorMessage)) + { + nextTarget = null; + return false; + } + else + { + nextTarget = property; + errorMessage = null; + return true; + } + } + + private bool TryGetDynamicObjectProperty( + object target, + IContractResolver contractResolver, + string segment, + out object value, + out string errorMessage) + { + var jsonDynamicContract = (JsonDynamicContract)contractResolver.ResolveContract(target.GetType()); + + var propertyName = jsonDynamicContract.PropertyNameResolver(segment); + + var binder = CSharpBinder.Binder.GetMember( + CSharpBinderFlags.None, + propertyName, + target.GetType(), + new List + { + CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) + }); + + var callsite = CallSite>.Create(binder); + + try + { + value = callsite.Target(callsite, target); + errorMessage = null; + return true; + } + catch (RuntimeBinderException) + { + value = null; + errorMessage = Resources.FormatTargetLocationAtPathSegmentNotFound(segment); + return false; + } + } + + private bool TrySetDynamicObjectProperty( + object target, + IContractResolver contractResolver, + string segment, + object value, + out string errorMessage) + { + var jsonDynamicContract = (JsonDynamicContract)contractResolver.ResolveContract(target.GetType()); + + var propertyName = jsonDynamicContract.PropertyNameResolver(segment); + + var binder = CSharpBinder.Binder.SetMember( + CSharpBinderFlags.None, + propertyName, + target.GetType(), + new List + { + CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null), + CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) + }); + + var callsite = CallSite>.Create(binder); + + try + { + callsite.Target(callsite, target, value); + errorMessage = null; + return true; + } + catch (RuntimeBinderException) + { + errorMessage = Resources.FormatTargetLocationAtPathSegmentNotFound(segment); + return false; + } + } + + private bool TryConvertValue(object value, Type propertyType, out object convertedValue) + { + var conversionResult = ConversionResultProvider.ConvertTo(value, propertyType); + if (!conversionResult.CanBeConverted) + { + convertedValue = null; + return false; + } + + convertedValue = conversionResult.ConvertedInstance; + return true; + } + } +} diff --git a/src/Microsoft.AspNetCore.JsonPatch/Internal/ObjectVisitor.cs b/src/Microsoft.AspNetCore.JsonPatch/Internal/ObjectVisitor.cs index b604f65a17..bbf6db4ff6 100644 --- a/src/Microsoft.AspNetCore.JsonPatch/Internal/ObjectVisitor.cs +++ b/src/Microsoft.AspNetCore.JsonPatch/Internal/ObjectVisitor.cs @@ -15,13 +15,8 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal public ObjectVisitor(ParsedPath path, IContractResolver contractResolver) { - if (contractResolver == null) - { - throw new ArgumentNullException(nameof(contractResolver)); - } - _path = path; - _contractResolver = contractResolver; + _contractResolver = contractResolver ?? throw new ArgumentNullException(nameof(contractResolver)); } public bool TryVisit(ref object target, out IAdapter adapter, out string errorMessage) @@ -38,8 +33,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Traverse until the penultimate segment to get the target object and adapter for (var i = 0; i < _path.Segments.Count - 1; i++) { - object next; - if (!adapter.TryTraverse(target, _path.Segments[i], _contractResolver, out next, out errorMessage)) + if (!adapter.TryTraverse(target, _path.Segments[i], _contractResolver, out var next, out errorMessage)) { adapter = null; return false; @@ -59,6 +53,10 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal { return new ExpandoObjectAdapter(); } + else if (targetObject is IDynamicMetaObjectProvider) + { + return new DynamicObjectAdapter(); + } else if (targetObject is IDictionary) { return new DictionaryAdapter(); diff --git a/src/Microsoft.AspNetCore.JsonPatch/Properties/Resources.Designer.cs b/src/Microsoft.AspNetCore.JsonPatch/Properties/Resources.Designer.cs index 97c98c2b05..cd99292061 100644 --- a/src/Microsoft.AspNetCore.JsonPatch/Properties/Resources.Designer.cs +++ b/src/Microsoft.AspNetCore.JsonPatch/Properties/Resources.Designer.cs @@ -10,277 +10,243 @@ namespace Microsoft.AspNetCore.JsonPatch private static readonly ResourceManager _resourceManager = new ResourceManager("Microsoft.AspNetCore.JsonPatch.Resources", typeof(Resources).GetTypeInfo().Assembly); - /// - /// The type of the property at path '{0}' could not be determined. - /// - internal static string CannotDeterminePropertyType - { - get { return GetString("CannotDeterminePropertyType"); } - } - - /// - /// The type of the property at path '{0}' could not be determined. - /// - internal static string FormatCannotDeterminePropertyType(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("CannotDeterminePropertyType"), p0); - } - /// /// The property at '{0}' could not be copied. /// - internal static string CannotCannotCopyProperty + internal static string CannotCopyProperty { - get { return GetString("CannotCannotCopyProperty"); } + get => GetString("CannotCopyProperty"); } /// /// The property at '{0}' could not be copied. /// internal static string FormatCannotCopyProperty(object p0) + => string.Format(CultureInfo.CurrentCulture, GetString("CannotCopyProperty"), p0); + + /// + /// The type of the property at path '{0}' could not be determined. + /// + internal static string CannotDeterminePropertyType { - return string.Format(CultureInfo.CurrentCulture, GetString("CannotCannotCopyProperty"), p0); + get => GetString("CannotDeterminePropertyType"); } + /// + /// The type of the property at path '{0}' could not be determined. + /// + internal static string FormatCannotDeterminePropertyType(object p0) + => string.Format(CultureInfo.CurrentCulture, GetString("CannotDeterminePropertyType"), p0); + /// /// The '{0}' operation at path '{1}' could not be performed. /// internal static string CannotPerformOperation { - get { return GetString("CannotPerformOperation"); } + get => GetString("CannotPerformOperation"); } /// /// The '{0}' operation at path '{1}' could not be performed. /// internal static string FormatCannotPerformOperation(object p0, object p1) - { - return string.Format(CultureInfo.CurrentCulture, GetString("CannotPerformOperation"), p0, p1); - } + => string.Format(CultureInfo.CurrentCulture, GetString("CannotPerformOperation"), p0, p1); /// /// The property at '{0}' could not be read. /// internal static string CannotReadProperty { - get { return GetString("CannotReadProperty"); } + get => GetString("CannotReadProperty"); } /// /// The property at '{0}' could not be read. /// internal static string FormatCannotReadProperty(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("CannotReadProperty"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("CannotReadProperty"), p0); /// /// The property at path '{0}' could not be updated. /// internal static string CannotUpdateProperty { - get { return GetString("CannotUpdateProperty"); } + get => GetString("CannotUpdateProperty"); } /// /// The property at path '{0}' could not be updated. /// internal static string FormatCannotUpdateProperty(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("CannotUpdateProperty"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("CannotUpdateProperty"), p0); /// /// The index value provided by path segment '{0}' is out of bounds of the array size. /// internal static string IndexOutOfBounds { - get { return GetString("IndexOutOfBounds"); } + get => GetString("IndexOutOfBounds"); } /// /// The index value provided by path segment '{0}' is out of bounds of the array size. /// internal static string FormatIndexOutOfBounds(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("IndexOutOfBounds"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("IndexOutOfBounds"), p0); /// /// The path segment '{0}' is invalid for an array index. /// internal static string InvalidIndexValue { - get { return GetString("InvalidIndexValue"); } + get => GetString("InvalidIndexValue"); } /// /// The path segment '{0}' is invalid for an array index. /// internal static string FormatInvalidIndexValue(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("InvalidIndexValue"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("InvalidIndexValue"), p0); /// /// The type '{0}' was malformed and could not be parsed. /// internal static string InvalidJsonPatchDocument { - get { return GetString("InvalidJsonPatchDocument"); } + get => GetString("InvalidJsonPatchDocument"); } /// /// The type '{0}' was malformed and could not be parsed. /// internal static string FormatInvalidJsonPatchDocument(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("InvalidJsonPatchDocument"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("InvalidJsonPatchDocument"), p0); /// /// Invalid JsonPatch operation '{0}'. /// internal static string InvalidJsonPatchOperation { - get { return GetString("InvalidJsonPatchOperation"); } + get => GetString("InvalidJsonPatchOperation"); } /// /// Invalid JsonPatch operation '{0}'. /// internal static string FormatInvalidJsonPatchOperation(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("InvalidJsonPatchOperation"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("InvalidJsonPatchOperation"), p0); /// /// The provided string '{0}' is an invalid path. /// internal static string InvalidValueForPath { - get { return GetString("InvalidValueForPath"); } + get => GetString("InvalidValueForPath"); } /// /// The provided string '{0}' is an invalid path. /// internal static string FormatInvalidValueForPath(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("InvalidValueForPath"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("InvalidValueForPath"), p0); /// /// The value '{0}' is invalid for target location. /// internal static string InvalidValueForProperty { - get { return GetString("InvalidValueForProperty"); } + get => GetString("InvalidValueForProperty"); } /// /// The value '{0}' is invalid for target location. /// internal static string FormatInvalidValueForProperty(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("InvalidValueForProperty"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("InvalidValueForProperty"), p0); /// /// '{0}' must be of type '{1}'. /// internal static string ParameterMustMatchType { - get { return GetString("ParameterMustMatchType"); } + get => GetString("ParameterMustMatchType"); } /// /// '{0}' must be of type '{1}'. /// internal static string FormatParameterMustMatchType(object p0, object p1) - { - return string.Format(CultureInfo.CurrentCulture, GetString("ParameterMustMatchType"), p0, p1); - } + => string.Format(CultureInfo.CurrentCulture, GetString("ParameterMustMatchType"), p0, p1); /// /// The type '{0}' which is an array is not supported for json patch operations as it has a fixed size. /// internal static string PatchNotSupportedForArrays { - get { return GetString("PatchNotSupportedForArrays"); } + get => GetString("PatchNotSupportedForArrays"); } /// /// The type '{0}' which is an array is not supported for json patch operations as it has a fixed size. /// internal static string FormatPatchNotSupportedForArrays(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("PatchNotSupportedForArrays"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("PatchNotSupportedForArrays"), p0); /// /// The type '{0}' which is a non generic list is not supported for json patch operations. Only generic list types are supported. /// internal static string PatchNotSupportedForNonGenericLists { - get { return GetString("PatchNotSupportedForNonGenericLists"); } + get => GetString("PatchNotSupportedForNonGenericLists"); } /// /// The type '{0}' which is a non generic list is not supported for json patch operations. Only generic list types are supported. /// internal static string FormatPatchNotSupportedForNonGenericLists(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("PatchNotSupportedForNonGenericLists"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("PatchNotSupportedForNonGenericLists"), p0); /// /// The target location specified by path segment '{0}' was not found. /// internal static string TargetLocationAtPathSegmentNotFound { - get { return GetString("TargetLocationAtPathSegmentNotFound"); } + get => GetString("TargetLocationAtPathSegmentNotFound"); } /// /// The target location specified by path segment '{0}' was not found. /// internal static string FormatTargetLocationAtPathSegmentNotFound(object p0) - { - return string.Format(CultureInfo.CurrentCulture, GetString("TargetLocationAtPathSegmentNotFound"), p0); - } + => string.Format(CultureInfo.CurrentCulture, GetString("TargetLocationAtPathSegmentNotFound"), p0); /// /// For operation '{0}', the target location specified by path '{1}' was not found. /// internal static string TargetLocationNotFound { - get { return GetString("TargetLocationNotFound"); } + get => GetString("TargetLocationNotFound"); } /// /// For operation '{0}', the target location specified by path '{1}' was not found. /// internal static string FormatTargetLocationNotFound(object p0, object p1) - { - return string.Format(CultureInfo.CurrentCulture, GetString("TargetLocationNotFound"), p0, p1); - } + => string.Format(CultureInfo.CurrentCulture, GetString("TargetLocationNotFound"), p0, p1); /// /// The test operation is not supported. /// internal static string TestOperationNotSupported { - get { return GetString("TestOperationNotSupported"); } + get => GetString("TestOperationNotSupported"); } /// /// The test operation is not supported. /// internal static string FormatTestOperationNotSupported() - { - return GetString("TestOperationNotSupported"); - } + => GetString("TestOperationNotSupported"); private static string GetString(string name, params string[] formatterNames) { diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/DictionaryAdapterTest.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/DictionaryAdapterTest.cs index bc50b872a2..084aa57379 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/DictionaryAdapterTest.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/DictionaryAdapterTest.cs @@ -20,10 +20,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal dictionary[nameKey] = "Mike"; var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; // Act - var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out message); + var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out var message); // Assert Assert.True(addStatus); @@ -38,12 +37,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Arrange var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; var nameKey = "Name"; var dictionary = new Dictionary(StringComparer.Ordinal); // Act - var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out message); + var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out var message); // Assert Assert.True(addStatus); @@ -52,8 +50,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal Assert.Equal("James", dictionary[nameKey]); // Act - object outValue = null; - addStatus = dictionaryAdapter.TryGet(dictionary, nameKey.ToUpper(), resolver.Object, out outValue, out message); + addStatus = dictionaryAdapter.TryGet(dictionary, nameKey.ToUpper(), resolver.Object, out var outValue, out message); // Assert Assert.True(addStatus); @@ -67,12 +64,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Arrange var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; var nameKey = "Name"; var dictionary = new Dictionary(StringComparer.Ordinal); // Act - var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out message); + var addStatus = dictionaryAdapter.TryAdd(dictionary, nameKey, resolver.Object, "James", out var message); // Assert Assert.True(addStatus); @@ -81,8 +77,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal Assert.Equal("James", dictionary[nameKey]); // Act - object outValue = null; - addStatus = dictionaryAdapter.TryGet(dictionary, nameKey, resolver.Object, out outValue, out message); + addStatus = dictionaryAdapter.TryGet(dictionary, nameKey, resolver.Object, out var outValue, out message); // Assert Assert.True(addStatus); @@ -99,10 +94,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal dictionary.Add(nameKey, "Mike"); var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; // Act - var replaceStatus = dictionaryAdapter.TryReplace(dictionary, nameKey, resolver.Object, "James", out message); + var replaceStatus = dictionaryAdapter.TryReplace(dictionary, nameKey, resolver.Object, "James", out var message); // Assert Assert.True(replaceStatus); @@ -119,10 +113,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var dictionary = new Dictionary(StringComparer.Ordinal); var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; // Act - var replaceStatus = dictionaryAdapter.TryReplace(dictionary, nameKey, resolver.Object, "Mike", out message); + var replaceStatus = dictionaryAdapter.TryReplace(dictionary, nameKey, resolver.Object, "Mike", out var message); // Assert Assert.False(replaceStatus); @@ -140,10 +133,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var dictionary = new Dictionary(StringComparer.Ordinal); var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; // Act - var removeStatus = dictionaryAdapter.TryRemove(dictionary, nameKey, resolver.Object, out message); + var removeStatus = dictionaryAdapter.TryRemove(dictionary, nameKey, resolver.Object, out var message); // Assert Assert.False(removeStatus); @@ -162,10 +154,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal dictionary[nameKey] = "James"; var dictionaryAdapter = new DictionaryAdapter(); var resolver = new Mock(MockBehavior.Strict); - string message = null; // Act - var removeStatus = dictionaryAdapter.TryRemove(dictionary, nameKey, resolver.Object, out message); + var removeStatus = dictionaryAdapter.TryRemove(dictionary, nameKey, resolver.Object, out var message); //Assert Assert.True(removeStatus); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddOperationTests.cs index e1cdb21df2..493444066b 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddOperationTests.cs @@ -8,7 +8,7 @@ using Microsoft.AspNetCore.JsonPatch.Exceptions; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class AddOperationTests { @@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic dynamic doc = new { Test = 1, - nested = new NestedDTO() + nested = new NestedObject() }; // create patch @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic dynamic doc = new { Test = 1, - nested = new NestedDTO() + nested = new NestedObject() }; // create patch @@ -152,7 +152,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void AddNewPropertyToExpandoOjectInTypedObject() { - var doc = new NestedDTO() + var doc = new NestedObject() { DynamicProperty = new ExpandoObject() }; @@ -175,7 +175,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic dynamic dynamicProperty = new ExpandoObject(); dynamicProperty.StringProperty = "A"; - var doc = new NestedDTO() + var doc = new NestedObject() { DynamicProperty = dynamicProperty }; @@ -284,7 +284,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void AddResultsShouldReplaceInNestedInDynamic() { dynamic doc = new ExpandoObject(); - doc.Nested = new NestedDTO(); + doc.Nested = new NestedObject(); doc.Nested.DynamicProperty = new ExpandoObject(); doc.Nested.DynamicProperty.InBetweenFirst = new ExpandoObject(); doc.Nested.DynamicProperty.InBetweenFirst.InBetweenSecond = new ExpandoObject(); @@ -319,7 +319,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // the root of the document, nor a member of an existing object, nor a // member of an existing array. - var doc = new NestedDTO() + var doc = new NestedObject() { DynamicProperty = new ExpandoObject() }; diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddTypedOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddTypedOperationTests.cs index bbf5118962..b2eb4d3a3c 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddTypedOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/AddTypedOperationTests.cs @@ -6,14 +6,14 @@ using Microsoft.AspNetCore.JsonPatch.Exceptions; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class AddTypedOperationTests { [Fact] public void AddToListNegativePosition() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -37,11 +37,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void AddToListInList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - ListOfSimpleDTO = new List() + ListOfSimpleObject = new List() { - new SimpleDTO() + new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -50,23 +50,23 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Add("ListOfSimpleDTO/0/IntegerList/0", 4); + patchDoc.Add("ListOfSimpleObject/0/IntegerList/0", 4); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.ListOfSimpleDTO[0].IntegerList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.ListOfSimpleObject[0].IntegerList); } [Fact] public void AddToListInListInvalidPositionTooSmall() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - ListOfSimpleDTO = new List() + ListOfSimpleObject = new List() { - new SimpleDTO() + new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Add("ListOfSimpleDTO/-1/IntegerList/0", 4); + patchDoc.Add("ListOfSimpleObject/-1/IntegerList/0", 4); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); @@ -92,11 +92,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void AddToListInListInvalidPositionTooLarge() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - ListOfSimpleDTO = new List() + ListOfSimpleObject = new List() { - new SimpleDTO() + new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -104,7 +104,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic }; // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Add("ListOfSimpleDTO/20/IntegerList/0", 4); + patchDoc.Add("ListOfSimpleObject/20/IntegerList/0", 4); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyOperationTests.cs index 42dd0072c4..b2faff25a0 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyOperationTests.cs @@ -6,7 +6,7 @@ using System.Dynamic; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class CopyOperationTests { @@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedCopy() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -130,82 +130,82 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/StringProperty", "SimpleDTO/AnotherStringProperty"); + patchDoc.Copy("SimpleObject/StringProperty", "SimpleObject/AnotherStringProperty"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); } [Fact] public void NestedCopyInList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerList/1"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerList/1"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyFromListToEndOfList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerList/-"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerList/-"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyFromListToNonList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerValue"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerValue"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void NestedCopyFromNonListToList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -213,19 +213,19 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerValue", "SimpleDTO/IntegerList/0"); + patchDoc.Copy("SimpleObject/IntegerValue", "SimpleObject/IntegerList/0"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyToEndOfList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -233,13 +233,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerValue", "SimpleDTO/IntegerList/-"); + patchDoc.Copy("SimpleObject/IntegerValue", "SimpleObject/IntegerList/-"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyTypedOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyTypedOperationTests.cs index 0ea602da03..d0b0847c71 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyTypedOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/CopyTypedOperationTests.cs @@ -5,14 +5,14 @@ using System.Collections.Generic; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class CopyTypedOperationTests { [Fact] public void Copy() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void CopyInList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void CopyFromListToEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void CopyFromListToNonList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -91,7 +91,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void CopyFromNonListToList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void CopyToEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -132,9 +132,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void NestedCopy() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -143,22 +143,22 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/StringProperty", "SimpleDTO/AnotherStringProperty"); + patchDoc.Copy("SimpleObject/StringProperty", "SimpleObject/AnotherStringProperty"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); } [Fact] public void NestedCopyInList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -166,21 +166,21 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerList/1"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerList/1"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyFromListToEndOfList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -188,22 +188,22 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerList/-"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerList/-"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyFromListToNonList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -211,21 +211,21 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerList/0", "SimpleDTO/IntegerValue"); + patchDoc.Copy("SimpleObject/IntegerList/0", "SimpleObject/IntegerValue"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void NestedCopyFromNonListToList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -234,20 +234,20 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerValue", "SimpleDTO/IntegerList/0"); + patchDoc.Copy("SimpleObject/IntegerValue", "SimpleObject/IntegerList/0"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedCopyToEndOfList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -256,13 +256,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Copy("SimpleDTO/IntegerValue", "SimpleDTO/IntegerList/-"); + patchDoc.Copy("SimpleObject/IntegerValue", "SimpleObject/IntegerList/-"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/InheritedObject.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/InheritedObject.cs new file mode 100644 index 0000000000..29424d591e --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/InheritedObject.cs @@ -0,0 +1,10 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class InheritedObject : SimpleObject + { + public string AdditionalStringProperty { get; set; } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveOperationTests.cs index 0e3ea2cea0..31f58c4b82 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveOperationTests.cs @@ -6,7 +6,7 @@ using System.Dynamic; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class MoveOperationTests { @@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic Assert.Equal("A", doc.AnotherStringProperty); var cont = doc as IDictionary; - cont.TryGetValue("StringProperty", out var valueFromDictionary); + cont.TryGetValue("StringProperty", out object valueFromDictionary); Assert.Null(valueFromDictionary); } @@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic { dynamic doc = new ExpandoObject(); doc.StringProperty = "A"; - doc.SimpleDTO = new SimpleDTO() { AnotherStringProperty = "B" }; + doc.SimpleDTO = new SimpleObject() { AnotherStringProperty = "B" }; // create patch var patchDoc = new JsonPatchDocument(); @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); var cont = doc as IDictionary; - cont.TryGetValue("StringProperty", out var valueFromDictionary); + cont.TryGetValue("StringProperty", out object valueFromDictionary); Assert.Null(valueFromDictionary); } @@ -83,7 +83,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic { dynamic doc = new ExpandoObject(); doc.StringProperty = "A"; - doc.SimpleDTO = new SimpleDTO() { AnotherStringProperty = "B" }; + doc.SimpleDTO = new SimpleObject() { AnotherStringProperty = "B" }; // create patch var patchDoc = new JsonPatchDocument(); @@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMove() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -143,7 +143,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMoveInList() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -181,7 +181,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMoveFromListToEndOfList() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -220,7 +220,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMoveFomListToNonList() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic deserialized.ApplyTo(doc); var cont = doc as IDictionary; - cont.TryGetValue("IntegerValue", out var valueFromDictionary); + cont.TryGetValue("IntegerValue", out object valueFromDictionary); Assert.Null(valueFromDictionary); Assert.Equal(new List() { 5, 1, 2, 3 }, doc.IntegerList); @@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMoveFromNonListToList() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -311,7 +311,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedMoveToEndOfList() { dynamic doc = new ExpandoObject(); - doc.Nested = new SimpleDTO() + doc.Nested = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveTypedOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveTypedOperationTests.cs index bfd79a0ea2..4638718a59 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveTypedOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/MoveTypedOperationTests.cs @@ -5,14 +5,14 @@ using System.Collections.Generic; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class MoveTypedOperationTests { [Fact] public void Move() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void MoveInList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void MoveFromListToEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void MoveFomListToNonList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -94,7 +94,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void MoveFromNonListToList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void MoveToEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedObject.cs similarity index 78% rename from test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedObject.cs index f94ad05d97..050ad3a3b4 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/NestedObject.cs @@ -1,9 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { - public class NestedDTO + public class NestedObject { public string StringProperty { get; set; } public dynamic DynamicProperty { get; set; } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/PatchDocumentTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/PatchDocumentTests.cs index e86dc8acbd..403238bf99 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/PatchDocumentTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/PatchDocumentTests.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.JsonPatch.Exceptions; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class PatchDocumentTests { @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void NonGenericPatchDocToGenericMustSerialize() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic patchDoc.Copy("StringProperty", "AnotherStringProperty"); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); deserialized.ApplyTo(doc); @@ -71,14 +71,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void GenericPatchDocToNonGenericMustSerialize() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; - var patchDocTyped = new JsonPatchDocument(); - patchDocTyped.Copy(o => o.StringProperty, o => o.AnotherStringProperty); + var patchDocTyped = new JsonPatchDocument(); + patchDocTyped.Copy(o => o.StringProperty, o => o.AnotherStringProperty); var patchDocUntyped = new JsonPatchDocument(); patchDocUntyped.Copy("StringProperty", "AnotherStringProperty"); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveOperationTests.cs index c8985e3a86..22707add87 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveOperationTests.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.JsonPatch.Exceptions; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class RemoveOperationTests { @@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic deserialized.ApplyTo(obj); var cont = obj as IDictionary; - cont.TryGetValue("Test", out var valueFromDictionary); + cont.TryGetValue("Test", out object valueFromDictionary); Assert.Null(valueFromDictionary); } @@ -94,9 +94,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic { deserialized.ApplyTo(obj); }); + Assert.Equal( - string.Format("The target location specified by path segment '{0}' was not found.", - "test"), + string.Format( + "The target location specified by path segment '{0}' was not found.", + "test"), exception.Message); } @@ -117,7 +119,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic deserialized.ApplyTo(obj); var cont = obj as IDictionary; - cont.TryGetValue("Test", out var valueFromDictionary); + cont.TryGetValue("Test", out object valueFromDictionary); Assert.Null(valueFromDictionary); } @@ -139,8 +141,11 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic { deserialized.ApplyTo(obj); }); + Assert.Equal( - string.Format("The target location specified by path segment '{0}' was not found.", "test"), + string.Format( + "The target location specified by path segment '{0}' was not found.", + "test"), exception.Message); } @@ -148,7 +153,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemove() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { StringProperty = "A" }; @@ -168,14 +173,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemove_MixedCase_ThrowsPathNotFoundException() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleObject = new SimpleObject() { StringProperty = "A" }; // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("Simpledto/stringProperty"); + patchDoc.Remove("Simpleobject/stringProperty"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); @@ -184,10 +189,12 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic { deserialized.ApplyTo(doc); }); + Assert.Equal( - string.Format("For operation '{0}', the target location specified by path '{1}' was not found.", - "remove", - "/Simpledto/stringProperty"), + string.Format( + "For operation '{0}', the target location specified by path '{1}' was not found.", + "remove", + "/Simpleobject/stringProperty"), exception.Message); } @@ -195,7 +202,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemoveFromList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -213,10 +220,10 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic } [Fact] - public void NestedRemoveFromListMixedCase() + public void NestedRemoveFromList_MixedCase() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -237,7 +244,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemoveFromListInvalidPositionTooLarge() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -262,7 +269,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemoveFromListInvalidPositionTooSmall() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -287,7 +294,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void NestedRemoveFromEndOfList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveTypedOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveTypedOperationTests.cs index f65b2e6342..000b049b1b 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveTypedOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/RemoveTypedOperationTests.cs @@ -6,14 +6,14 @@ using Microsoft.AspNetCore.JsonPatch.Exceptions; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class RemoveTypedOperationTests { [Fact] public void Remove() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; @@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void RemoveFromList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void RemoveFromListInvalidPositionTooLarge() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -77,7 +77,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void RemoveFromListInvalidPositionTooSmall() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void RemoveFromEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; @@ -121,9 +121,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void NestedRemove() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A" } @@ -131,22 +131,22 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("SimpleDTO/StringProperty"); + patchDoc.Remove("SimpleObject/StringProperty"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Null(doc.SimpleDTO.StringProperty); + Assert.Null(doc.SimpleObject.StringProperty); } [Fact] public void NestedRemoveFromList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -154,22 +154,22 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("SimpleDTO/IntegerList/2"); + patchDoc.Remove("SimpleObject/IntegerList/2"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } [Fact] public void NestedRemoveFromListInvalidPositionTooLarge() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -177,7 +177,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("SimpleDTO/IntegerList/3"); + patchDoc.Remove("SimpleObject/IntegerList/3"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); @@ -194,9 +194,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void NestedRemoveFromListInvalidPositionTooSmall() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -204,7 +204,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("SimpleDTO/IntegerList/-1"); + patchDoc.Remove("SimpleObject/IntegerList/-1"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); @@ -221,9 +221,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void NestedRemoveFromEndOfList() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } @@ -231,14 +231,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic // create patch var patchDoc = new JsonPatchDocument(); - patchDoc.Remove("SimpleDTO/IntegerList/-"); + patchDoc.Remove("SimpleObject/IntegerList/-"); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceOperationTests.cs index c5936ec1b0..88d1662e1d 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceOperationTests.cs @@ -9,21 +9,21 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class ReplaceOperationTests { [Fact] public void ReplaceGuidTest() { - dynamic doc = new SimpleDTO() + dynamic doc = new SimpleObject() { GuidValue = Guid.NewGuid() }; var newGuid = Guid.NewGuid(); // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("GuidValue", newGuid); // serialize & deserialize @@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic var newGuid = Guid.NewGuid(); // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("GuidValue", newGuid); // serialize & deserialize @@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic var newGuid = Guid.NewGuid(); // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("nestedobject/GuidValue", newGuid); // serialize & deserialize @@ -84,19 +84,19 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void ReplaceNestedObjectTest() { dynamic doc = new ExpandoObject(); - doc.SimpleDTO = new SimpleDTO() + doc.SimpleDTO = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; - var newDTO = new SimpleDTO() + var newDTO = new SimpleObject() { DoubleValue = 1 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("SimpleDTO", newDTO); // serialize & deserialize @@ -117,7 +117,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic doc.IntegerList = new List() { 1, 2, 3 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList/0", 5); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -135,7 +135,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic doc.IntegerList = new List() { 1, 2, 3 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -150,13 +150,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void ReplaceInListInList() { dynamic doc = new ExpandoObject(); - doc.SimpleDTOList = new List() { - new SimpleDTO() { + doc.SimpleDTOList = new List() { + new SimpleObject() { IntegerList = new List(){1,2,3} }}; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("SimpleDTOList/0/IntegerList/0", 4); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -171,13 +171,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic public void ReplaceInListInListAtEnd() { dynamic doc = new ExpandoObject(); - doc.SimpleDTOList = new List() { - new SimpleDTO() { + doc.SimpleDTOList = new List() { + new SimpleObject() { IntegerList = new List(){1,2,3} }}; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("SimpleDTOList/0/IntegerList/-", 4); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -195,7 +195,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic doc.IntegerList = new List() { 1, 2, 3 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -213,7 +213,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic doc.IntegerList = new List() { 1, 2, 3 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new Collection() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic doc.IntegerList = new List() { 1, 2, 3 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList/-", 5); var serialized = JsonConvert.SerializeObject(patchDoc); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceTypedOperationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceTypedOperationTests.cs index d0bf23f487..94131ff3b5 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceTypedOperationTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/ReplaceTypedOperationTests.cs @@ -8,21 +8,21 @@ using System.Linq; using Newtonsoft.Json; using Xunit; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { public class ReplaceTypedOperationTests { [Fact] public void ReplaceGuidTest() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { GuidValue = Guid.NewGuid() }; var newGuid = Guid.NewGuid(); // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("GuidValue", newGuid); // serialize & deserialize @@ -37,23 +37,23 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void SerializeAndReplaceNestedObjectTest() { - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } } }; - var newDTO = new SimpleDTO() + var newDTO = new SimpleObject() { DoubleValue = 1 }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); - patchDoc.Replace("SimpleDTO", newDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace("SimpleObject", newDTO); // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); @@ -61,21 +61,21 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic deserialized.ApplyTo(doc); - Assert.Equal(1, doc.SimpleDTO.DoubleValue); - Assert.Equal(0, doc.SimpleDTO.IntegerValue); - Assert.Null(doc.SimpleDTO.IntegerList); + Assert.Equal(1, doc.SimpleObject.DoubleValue); + Assert.Equal(0, doc.SimpleObject.IntegerValue); + Assert.Null(doc.SimpleObject.IntegerList); } [Fact] public void ReplaceInList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList/0", 5); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -89,13 +89,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void ReplaceFullList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -109,36 +109,36 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void ReplaceInListInList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { - SimpleDTOList = new List() { - new SimpleDTO() { + SimpleObjectList = new List() { + new SimpleObject() { IntegerList = new List(){1,2,3} }} }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); - patchDoc.Replace("SimpleDTOList/0/IntegerList/0", 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace("SimpleObjectList/0/IntegerList/0", 4); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject(serialized); deserialized.ApplyTo(doc); - Assert.Equal(4, doc.SimpleDTOList.First().IntegerList.First()); + Assert.Equal(4, doc.SimpleObjectList.First().IntegerList.First()); } [Fact] public void ReplaceFullListFromEnumerable() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -152,13 +152,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void ReplaceFullListWithCollection() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList", new Collection() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); @@ -172,13 +172,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic [Fact] public void ReplaceAtEndOfList() { - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - JsonPatchDocument patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace("IntegerList/-", 5); var serialized = JsonConvert.SerializeObject(patchDoc); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTOWithNestedDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTOWithNestedDTO.cs deleted file mode 100644 index f8af4bb390..0000000000 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTOWithNestedDTO.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Generic; - -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic -{ - public class SimpleDTOWithNestedDTO - { - public int IntegerValue { get; set; } - public NestedDTO NestedDTO { get; set; } - public SimpleDTO SimpleDTO { get; set; } - public List ListOfSimpleDTO { get; set; } - - public SimpleDTOWithNestedDTO() - { - NestedDTO = new NestedDTO(); - SimpleDTO = new SimpleDTO(); - ListOfSimpleDTO = new List(); - } - } -} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObject.cs similarity index 81% rename from test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObject.cs index d4bf19f75a..01a890d7be 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObject.cs @@ -4,11 +4,11 @@ using System; using System.Collections.Generic; -namespace Microsoft.AspNetCore.JsonPatch.Test.Dynamic +namespace Microsoft.AspNetCore.JsonPatch.Internal { - public class SimpleDTO + public class SimpleObject { - public List SimpleDTOList { get; set; } + public List SimpleObjectList { get; set; } public List IntegerList { get; set; } public int IntegerValue { get; set; } public string StringProperty { get; set; } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObjectWithNestedObject.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObjectWithNestedObject.cs new file mode 100644 index 0000000000..aa766b8438 --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/Dynamic/SimpleObjectWithNestedObject.cs @@ -0,0 +1,22 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class SimpleObjectWithNestedObject + { + public int IntegerValue { get; set; } + public NestedObject NestedObject { get; set; } + public SimpleObject SimpleObject { get; set; } + public List ListOfSimpleObject { get; set; } + + public SimpleObjectWithNestedObject() + { + NestedObject = new NestedObject(); + SimpleObject = new SimpleObject(); + ListOfSimpleObject = new List(); + } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicObjectAdapterTest.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicObjectAdapterTest.cs new file mode 100644 index 0000000000..18bb7a775c --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicObjectAdapterTest.cs @@ -0,0 +1,231 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Newtonsoft.Json.Serialization; +using Xunit; + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class DynamicObjectAdapterTest + { + [Fact] + 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); + } + + [Fact] + public void TryAdd_ReplacesExistingPropertyValue() + { + // Arrange + var adapter = new DynamicObjectAdapter(); + dynamic target = new DynamicTestObject(); + target.List = new List() { 1, 2, 3 }; + var value = new List() { "stringValue1", "stringValue2" }; + var segment = "List"; + var resolver = new DefaultContractResolver(); + + // Act + var status = adapter.TryAdd(target, segment, resolver, value, out string errorMessage); + + // Assert + Assert.True(status); + Assert.Null(errorMessage); + Assert.Equal(value, target.List); + } + + [Fact] + 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); + } + + [Fact] + 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); + } + + [Fact] + 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); + } + + [Fact] + public void TryTraverse_ThrowsPathNotFoundException_ForNonExistingProperty() + { + // Arrange + var adapter = new DynamicObjectAdapter(); + dynamic target = new DynamicTestObject(); + target.NestedObject = new DynamicTestObject(); + var segment = "NewProperty"; + var resolver = new DefaultContractResolver(); + + // Act + var status = adapter.TryTraverse(target.NestedObject, segment, resolver, out object nextTarget, out string errorMessage); + + // Assert + Assert.False(status); + Assert.Equal($"The target location specified by path segment '{segment}' was not found.", errorMessage); + } + + [Fact] + public void TryReplace_ReplacesPropertyValue() + { + // Arrange + var adapter = new DynamicObjectAdapter(); + dynamic target = new DynamicTestObject(); + target.NewProperty = new object(); + var segment = "NewProperty"; + var resolver = new DefaultContractResolver(); + + // Act + var status = adapter.TryReplace(target, segment, resolver, "new", out string errorMessage); + + // Assert + Assert.True(status); + Assert.Null(errorMessage); + Assert.Equal("new", target.NewProperty); + } + + [Fact] + public void TryReplace_ThrowsPathNotFoundException_ForNonExistingProperty() + { + // Arrange + var adapter = new DynamicObjectAdapter(); + dynamic target = new DynamicTestObject(); + 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 target location specified by path segment '{segment}' was not found.", errorMessage); + } + + [Fact] + 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); + } + + [Theory] + [InlineData(1, 0)] + [InlineData("new", null)] + 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); + } + + [Fact] + public void TryRemove_ThrowsPathNotFoundException_ForNonExistingProperty() + { + // Arrange + var adapter = new DynamicObjectAdapter(); + dynamic target = new DynamicTestObject(); + var segment = "NewProperty"; + var resolver = new DefaultContractResolver(); + + // Act + var removeStatus = adapter.TryRemove(target, segment, resolver, out string removeErrorMessage); + + // Assert + Assert.False(removeStatus); + Assert.Equal($"The target location specified by path segment '{segment}' was not found.", removeErrorMessage); + } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicTestObject.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicTestObject.cs new file mode 100644 index 0000000000..4268d5526c --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/DynamicTestObject.cs @@ -0,0 +1,87 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Dynamic; + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class DynamicTestObject : DynamicObject + { + private Dictionary _dictionary = new Dictionary(); + + public object this[string key] { get => ((IDictionary)_dictionary)[key]; set => ((IDictionary)_dictionary)[key] = value; } + + public ICollection Keys => ((IDictionary)_dictionary).Keys; + + public ICollection Values => ((IDictionary)_dictionary).Values; + + public int Count => ((IDictionary)_dictionary).Count; + + public bool IsReadOnly => ((IDictionary)_dictionary).IsReadOnly; + + public void Add(string key, object value) + { + ((IDictionary)_dictionary).Add(key, value); + } + + public void Add(KeyValuePair item) + { + ((IDictionary)_dictionary).Add(item); + } + + public void Clear() + { + ((IDictionary)_dictionary).Clear(); + } + + public bool Contains(KeyValuePair item) + { + return ((IDictionary)_dictionary).Contains(item); + } + + public bool ContainsKey(string key) + { + return ((IDictionary)_dictionary).ContainsKey(key); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + ((IDictionary)_dictionary).CopyTo(array, arrayIndex); + } + + public IEnumerator> GetEnumerator() + { + return ((IDictionary)_dictionary).GetEnumerator(); + } + + public bool Remove(string key) + { + return ((IDictionary)_dictionary).Remove(key); + } + + public bool Remove(KeyValuePair item) + { + return ((IDictionary)_dictionary).Remove(item); + } + + public bool TryGetValue(string key, out object value) + { + return ((IDictionary)_dictionary).TryGetValue(key, out value); + } + + public override bool TryGetMember(GetMemberBinder binder, out object result) + { + var name = binder.Name; + + return TryGetValue(name, out result); + } + + public override bool TrySetMember(SetMemberBinder binder, object value) + { + _dictionary[binder.Name] = value; + + return true; + } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/InheritedDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/InheritedObject.cs similarity index 85% rename from test/Microsoft.AspNetCore.JsonPatch.Test/InheritedDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/InheritedObject.cs index a784a6304b..37b8a10dc9 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/InheritedDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/InheritedObject.cs @@ -3,7 +3,7 @@ namespace Microsoft.AspNetCore.JsonPatch { - public class InheritedDTO : SimpleDTO + public class InheritedObject : SimpleObject { public string AdditionalStringProperty { get; set; } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/IntegrationTests/DynamicObjectIntegrationTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/IntegrationTests/DynamicObjectIntegrationTests.cs new file mode 100644 index 0000000000..4b5fc96e24 --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/IntegrationTests/DynamicObjectIntegrationTests.cs @@ -0,0 +1,263 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Microsoft.AspNetCore.JsonPatch.Exceptions; +using Xunit; + +namespace Microsoft.AspNetCore.JsonPatch.Internal +{ + public class DynamicObjectIntegrationTests + { + [Fact] + 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 patchDoc = new JsonPatchDocument(); + patchDoc.Add("/Nested/DynamicProperty/InBetweenFirst/InBetweenSecond/StringProperty", "B"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal("B", dynamicTestObject.Nested.DynamicProperty.InBetweenFirst.InBetweenSecond.StringProperty); + } + + [Fact] + public void ShouldNotBeAbleToAdd_ToNonExistingProperty_ThatIsNotTheRoot() + { + //Adding to a Nonexistent Target + // + // An example target JSON document: + // { "foo": "bar" } + // A JSON Patch document: + // [ + // { "op": "add", "path": "/baz/bat", "value": "qux" } + // ] + // This JSON Patch document, applied to the target JSON document above, + // would result in an error (therefore, it would not be applied), + // because the "add" operation's target location that references neither + // the root of the document, nor a member of an existing object, nor a + // member of an existing array. + + // Arrange + var nestedObject = new NestedObject() + { + DynamicProperty = new DynamicTestObject() + }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Add("DynamicProperty/OtherProperty/IntProperty", 1); + + // Act + var exception = Assert.Throws(() => + { + patchDoc.ApplyTo(nestedObject); + }); + + // Assert + Assert.Equal( + string.Format( + "The target location specified by path segment '{0}' was not found.", + "OtherProperty"), + exception.Message); + } + + [Fact] + public void CopyProperties_InNestedDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.NestedDynamicObject = new DynamicTestObject(); + dynamicTestObject.NestedDynamicObject.StringProperty = "A"; + dynamicTestObject.NestedDynamicObject.AnotherStringProperty = "B"; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy("NestedDynamicObject/StringProperty", "NestedDynamicObject/AnotherStringProperty"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal("A", dynamicTestObject.NestedDynamicObject.AnotherStringProperty); + } + + + [Fact] + public void MoveToNonExistingProperty_InDynamicObject_ShouldAddNewProperty() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.StringProperty = "A"; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Move("StringProperty", "AnotherStringProperty"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + dynamicTestObject.TryGetValue("StringProperty", out object valueFromDictionary); + + // Assert + Assert.Equal("A", dynamicTestObject.AnotherStringProperty); + Assert.Null(valueFromDictionary); + } + + [Fact] + public void MovePropertyValue_FromDynamicObject_ToTypedObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.StringProperty = "A"; + dynamicTestObject.SimpleObject = new SimpleObject() { AnotherStringProperty = "B" }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Move("StringProperty", "SimpleObject/AnotherStringProperty"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + dynamicTestObject.TryGetValue("StringProperty", out object valueFromDictionary); + + // Assert + Assert.Equal("A", dynamicTestObject.SimpleObject.AnotherStringProperty); + Assert.Null(valueFromDictionary); + } + + [Fact] + public void MovePropertyValue_FromListToNonList_InNestedTypedObject_InDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.Nested = new SimpleObject() + { + IntegerList = new List() { 1, 2, 3 } + }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Move("Nested/IntegerList/0", "Nested/IntegerValue"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal(new List() { 2, 3 }, dynamicTestObject.Nested.IntegerList); + Assert.Equal(1, dynamicTestObject.Nested.IntegerValue); + } + + [Fact] + public void RemoveNestedProperty_FromDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.Test = new DynamicTestObject(); + dynamicTestObject.Test.AnotherTest = "A"; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove("Test"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + dynamicTestObject.TryGetValue("Test", out object valueFromDictionary); + + // Assert + Assert.Null(valueFromDictionary); + } + + [Fact] + public void RemoveFromNestedObject_InDynamicObject_MixedCase_ThrowsPathNotFoundException() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.SimpleObject = new SimpleObject() + { + StringProperty = "A" + }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove("Simpleobject/stringProperty"); + + // Act + var exception = Assert.Throws(() => + { + patchDoc.ApplyTo(dynamicTestObject); + }); + + // Assert + Assert.Equal( + string.Format("The target location specified by path segment '{0}' was not found.", + "Simpleobject"), + exception.Message); + } + + [Fact] + public void RemoveFromList_NestedInDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.SimpleObject = new SimpleObject() + { + IntegerList = new List() { 1, 2, 3 } + }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove("SimpleObject/IntegerList/2"); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal(new List() { 1, 2 }, dynamicTestObject.SimpleObject.IntegerList); + } + + [Fact] + public void ReplaceNestedTypedObject_InDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.SimpleObject = new SimpleObject() + { + IntegerValue = 5, + IntegerList = new List() { 1, 2, 3 } + }; + + var newObject = new SimpleObject() + { + DoubleValue = 1 + }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace("SimpleObject", newObject); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal(1, dynamicTestObject.SimpleObject.DoubleValue); + Assert.Equal(0, dynamicTestObject.SimpleObject.IntegerValue); + Assert.Null(dynamicTestObject.SimpleObject.IntegerList); + } + + [Fact] + public void ReplaceFullList_InDynamicObject() + { + // Arrange + dynamic dynamicTestObject = new DynamicTestObject(); + dynamicTestObject.IntegerList = new List() { 1, 2, 3 }; + + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace("IntegerList", new List() { 4, 5, 6 }); + + // Act + patchDoc.ApplyTo(dynamicTestObject); + + // Assert + Assert.Equal(new List() { 4, 5, 6 }, dynamicTestObject.IntegerList); + } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPatchDocumentJsonPropertyAttributeTest.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPatchDocumentJsonPropertyAttributeTest.cs index efc780b388..3948b79484 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPatchDocumentJsonPropertyAttributeTest.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPatchDocumentJsonPropertyAttributeTest.cs @@ -14,14 +14,14 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_WithExpression_RespectsJsonPropertyName_ForModelProperty() { - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(p => p.Name, "John"); var serialized = JsonConvert.SerializeObject(patchDoc); // serialized value should have "AnotherName" as path // deserialize to a JsonPatchDocument to check var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); // get path var pathToCheck = deserialized.Operations.First().path; @@ -65,19 +65,19 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_WithExpression_RespectsJsonPropertyName_WhenApplyingToDifferentlyTypedClassWithPropertyMatchingJsonPropertyName() { - var patchDocToSerialize = new JsonPatchDocument(); + var patchDocToSerialize = new JsonPatchDocument(); patchDocToSerialize.Add(p => p.Name, "John"); // the patchdoc will deserialize to "anothername". We should thus be able to apply // it to a class that HAS that other property name. - var doc = new JsonPropertyWithAnotherNameDTO() + var doc = new JsonPropertyWithAnotherNameObject() { AnotherName = "InitialValue" }; var serialized = JsonConvert.SerializeObject(patchDocToSerialize); var deserialized = - JsonConvert.DeserializeObject> + JsonConvert.DeserializeObject> (serialized); deserialized.ApplyTo(doc); @@ -88,21 +88,21 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_WithExpression_RespectsJsonPropertyName_WhenApplyingToSameTypedClassWithMatchingJsonPropertyName() { - var patchDocToSerialize = new JsonPatchDocument(); + var patchDocToSerialize = new JsonPatchDocument(); patchDocToSerialize.Add(p => p.Name, "John"); // the patchdoc will deserialize to "anothername". As JsonPropertyDTO has // a JsonProperty signifying that "Name" should be deseriallized from "AnotherName", // we should be able to apply the patchDoc. - var doc = new JsonPropertyDTO() + var doc = new JsonPropertyObject() { Name = "InitialValue" }; var serialized = JsonConvert.SerializeObject(patchDocToSerialize); var deserialized = - JsonConvert.DeserializeObject> + JsonConvert.DeserializeObject> (serialized); deserialized.ApplyTo(doc); @@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_OnApplyFromJson_RespectsJsonPropertyNameOnJsonDocument() { - var doc = new JsonPropertyDTO() + var doc = new JsonPropertyObject() { Name = "InitialValue" }; @@ -121,7 +121,7 @@ namespace Microsoft.AspNetCore.JsonPatch // serialization should serialize to "AnotherName" var serialized = "[{\"value\":\"Kevin\",\"path\":\"/AnotherName\",\"op\":\"add\"}]"; var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); deserialized.ApplyTo(doc); @@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Remove_OnApplyFromJson_RespectsJsonPropertyNameOnJsonDocument() { - var doc = new JsonPropertyDTO() + var doc = new JsonPropertyObject() { Name = "InitialValue" }; @@ -139,7 +139,7 @@ namespace Microsoft.AspNetCore.JsonPatch // serialization should serialize to "AnotherName" var serialized = "[{\"path\":\"/AnotherName\",\"op\":\"remove\"}]"; var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); deserialized.ApplyTo(doc); @@ -149,7 +149,7 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_OnApplyFromJson_RespectsInheritedJsonPropertyNameOnJsonDocument() { - var doc = new JsonPropertyWithInheritanceDTO() + var doc = new JsonPropertyWithInheritanceObject() { Name = "InitialName" }; @@ -157,7 +157,7 @@ namespace Microsoft.AspNetCore.JsonPatch // serialization should serialize to "AnotherName" var serialized = "[{\"value\":\"Kevin\",\"path\":\"/AnotherName\",\"op\":\"add\"}]"; var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); deserialized.ApplyTo(doc); @@ -167,14 +167,14 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_WithExpression_RespectsJsonPropertyName_ForInheritedModelProperty() { - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(p => p.Name, "John"); var serialized = JsonConvert.SerializeObject(patchDoc); // serialized value should have "AnotherName" as path // deserialize to a JsonPatchDocument to check var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); // get path var pathToCheck = deserialized.Operations.First().path; @@ -184,10 +184,10 @@ namespace Microsoft.AspNetCore.JsonPatch [Fact] public void Add_OnApplyFromJson_EscapingHandledOnComplexJsonPropertyNameOnJsonDocument() { - var doc = new JsonPropertyComplexNameDTO() + var doc = new JsonPropertyComplexNameObject() { FooSlashBars = "InitialName", - FooSlashTilde = new SimpleDTO + FooSlashTilde = new SimpleObject { StringProperty = "Initial Value" } @@ -196,7 +196,7 @@ namespace Microsoft.AspNetCore.JsonPatch // serialization should serialize to "AnotherName" var serialized = "[{\"value\":\"Kevin\",\"path\":\"/foo~1bar~0\",\"op\":\"add\"},{\"value\":\"Final Value\",\"path\":\"/foo~1~0/StringProperty\",\"op\":\"replace\"}]"; var deserialized = - JsonConvert.DeserializeObject>(serialized); + JsonConvert.DeserializeObject>(serialized); deserialized.ApplyTo(doc); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameObject.cs similarity index 78% rename from test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameObject.cs index 7ff66481ad..a39aa8e30c 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyComplexNameObject.cs @@ -5,12 +5,12 @@ using Newtonsoft.Json; namespace Microsoft.AspNetCore.JsonPatch { - public class JsonPropertyComplexNameDTO + public class JsonPropertyComplexNameObject { [JsonProperty("foo/bar~")] public string FooSlashBars { get; set; } [JsonProperty("foo/~")] - public SimpleDTO FooSlashTilde { get; set; } + public SimpleObject FooSlashTilde { get; set; } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyObject.cs similarity index 90% rename from test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyObject.cs index c926d9f5fd..245ae6bb65 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyObject.cs @@ -5,7 +5,7 @@ using Newtonsoft.Json; namespace Microsoft.AspNetCore.JsonPatch { - public class JsonPropertyDTO + public class JsonPropertyObject { [JsonProperty("AnotherName")] public string Name { get; set; } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameObject.cs similarity index 84% rename from test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameObject.cs index 9b61e09005..4581a4826d 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithAnotherNameObject.cs @@ -3,7 +3,7 @@ namespace Microsoft.AspNetCore.JsonPatch { - public class JsonPropertyWithAnotherNameDTO + public class JsonPropertyWithAnotherNameObject { public string AnotherName { get; set; } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceDTO.cs deleted file mode 100644 index fa69425ea9..0000000000 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceDTO.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Microsoft.AspNetCore.JsonPatch -{ - public class JsonPropertyWithInheritanceDTO : JsonPropertyWithInheritanceBaseDTO - { - public override string Name { get; set; } - } - - public abstract class JsonPropertyWithInheritanceBaseDTO - { - [JsonProperty("AnotherName")] - public abstract string Name { get; set; } - } -} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceObject.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceObject.cs new file mode 100644 index 0000000000..935ef275ad --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/JsonPropertyWithInheritanceObject.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; + +namespace Microsoft.AspNetCore.JsonPatch +{ + public class JsonPropertyWithInheritanceObject : JsonPropertyWithInheritanceBaseObject + { + public override string Name { get; set; } + } + + public abstract class JsonPropertyWithInheritanceBaseObject + { + [JsonProperty("AnotherName")] + public abstract string Name { get; set; } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/ListAdapterTest.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/ListAdapterTest.cs index 6a087edd8f..3c692ea150 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/ListAdapterTest.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/ListAdapterTest.cs @@ -18,10 +18,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new[] { 20, 30 }; var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "0", resolver.Object, "40", out message); + var addStatus = listAdapter.TryAdd(targetObject, "0", resolver.Object, "40", out var message); // Assert Assert.False(addStatus); @@ -41,10 +40,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal targetObject.Add(20); targetObject.Add(30); var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "40", out message); + var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "40", out var message); // Assert Assert.False(addStatus); @@ -62,11 +60,10 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { "James", "Mike" }; var listAdapter = new ListAdapter(); - string message = null; var position = targetObject.Count.ToString(); // Act - var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "Rob", out message); + var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "Rob", out var message); // Assert Assert.Null(message); @@ -85,10 +82,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { "James", "Mike" }; var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "40", out message); + var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "40", out var message); // Assert Assert.False(addStatus); @@ -106,10 +102,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { "James", "Mike" }; var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "40", out message); + var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, "40", out var message); // Assert Assert.False(addStatus); @@ -143,10 +138,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Arrange var resolver = new Mock(MockBehavior.Strict); var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "20", out message); + var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "20", out var message); // Assert Assert.True(addStatus); @@ -162,10 +156,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var listAdapter = new ListAdapter(); var targetObject = new List() { "James", "Mike" }; - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, value: null, errorMessage: out message); + var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, value: null, errorMessage: out var message); // Assert Assert.True(addStatus); @@ -178,21 +171,20 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal public void Add_CompatibleTypeWorks() { // Arrange - var sDto = new SimpleDTO(); - var iDto = new InheritedDTO(); + var sDto = new SimpleObject(); + var iDto = new InheritedObject(); var resolver = new Mock(MockBehavior.Strict); - var targetObject = new List() { sDto }; + var targetObject = new List() { sDto }; var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, iDto, out message); + var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, iDto, out var message); // Assert Assert.True(addStatus); Assert.True(string.IsNullOrEmpty(message), "Expected no error message"); Assert.Equal(2, targetObject.Count); - Assert.Equal(new List() { sDto, iDto }, targetObject); + Assert.Equal(new List() { sDto, iDto }, targetObject); } [Fact] @@ -202,10 +194,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { 10, 20 }; var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "James", out message); + var addStatus = listAdapter.TryAdd(targetObject, "-", resolver.Object, "James", out var message); // Assert Assert.False(addStatus); @@ -253,10 +244,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Arrange var resolver = new Mock(MockBehavior.Strict); var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, value, out message); + var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, value, out var message); // Assert Assert.True(addStatus); @@ -267,34 +257,34 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal public static TheoryData AddingKeepsObjectReferenceData { get { - var sDto1 = new SimpleDTO(); - var sDto2 = new SimpleDTO(); - var sDto3 = new SimpleDTO(); + var sDto1 = new SimpleObject(); + var sDto2 = new SimpleObject(); + var sDto3 = new SimpleObject(); return new TheoryData() { { - new List() { }, + new List() { }, sDto1, "-", - new List() { sDto1 } + new List() { sDto1 } }, { - new List() { sDto1, sDto2 }, + new List() { sDto1, sDto2 }, sDto3, "-", - new List() { sDto1, sDto2, sDto3 } + new List() { sDto1, sDto2, sDto3 } }, { - new List() { sDto1, sDto2 }, + new List() { sDto1, sDto2 }, sDto3, "0", - new List() { sDto3, sDto1, sDto2 } + new List() { sDto3, sDto1, sDto2 } }, { - new List() { sDto1, sDto2 }, + new List() { sDto1, sDto2 }, sDto3, "1", - new List() { sDto1, sDto3, sDto2 } + new List() { sDto1, sDto3, sDto2 } } }; } @@ -307,10 +297,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal // Arrange var resolver = new Mock(MockBehavior.Strict); var listAdapter = new ListAdapter(); - string message = null; // Act - var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, value, out message); + var addStatus = listAdapter.TryAdd(targetObject, position, resolver.Object, value, out var message); // Assert Assert.True(addStatus); @@ -329,11 +318,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List(input); var listAdapter = new ListAdapter(); - string message = null; - object value = null; // Act - var getStatus = listAdapter.TryGet(targetObject, position, resolver.Object, out value, out message); + var getStatus = listAdapter.TryGet(targetObject, position, resolver.Object, out var value, out var message); // Assert Assert.False(getStatus); @@ -352,11 +339,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List(input); var listAdapter = new ListAdapter(); - string message = null; - object value = null; // Act - var getStatus = listAdapter.TryGet(targetObject, position, resolver.Object, out value, out message); + var getStatus = listAdapter.TryGet(targetObject, position, resolver.Object, out var value, out var message); // Assert Assert.True(getStatus); @@ -374,10 +359,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List(input); var listAdapter = new ListAdapter(); - string message = null; // Act - var removeStatus = listAdapter.TryRemove(targetObject, position, resolver.Object, out message); + var removeStatus = listAdapter.TryRemove(targetObject, position, resolver.Object, out var message); // Assert Assert.False(removeStatus); @@ -396,10 +380,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List(input); var listAdapter = new ListAdapter(); - string message = null; // Act - var removeStatus = listAdapter.TryRemove(targetObject, position, resolver.Object, out message); + var removeStatus = listAdapter.TryRemove(targetObject, position, resolver.Object, out var message); // Assert Assert.True(removeStatus); @@ -413,10 +396,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { 10, 20 }; var listAdapter = new ListAdapter(); - string message = null; // Act - var replaceStatus = listAdapter.TryReplace(targetObject, "-", resolver.Object, "James", out message); + var replaceStatus = listAdapter.TryReplace(targetObject, "-", resolver.Object, "James", out var message); // Assert Assert.False(replaceStatus); @@ -432,10 +414,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { 10, 20 }; var listAdapter = new ListAdapter(); - string message = null; // Act - var replaceStatus = listAdapter.TryReplace(targetObject, "-", resolver.Object, "30", out message); + var replaceStatus = listAdapter.TryReplace(targetObject, "-", resolver.Object, "30", out var message); // Assert Assert.True(replaceStatus); @@ -469,10 +450,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var resolver = new Mock(MockBehavior.Strict); var targetObject = new List() { 10, 20 }; var listAdapter = new ListAdapter(); - string message = null; // Act - var replaceStatus = listAdapter.TryReplace(targetObject, position, resolver.Object, "30", out message); + var replaceStatus = listAdapter.TryReplace(targetObject, position, resolver.Object, "30", out var message); // Assert Assert.True(replaceStatus); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/NestedDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObject.cs similarity index 89% rename from test/Microsoft.AspNetCore.JsonPatch.Test/NestedDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/NestedObject.cs index 90be5152cb..8f0927297e 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/NestedDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObject.cs @@ -3,7 +3,7 @@ namespace Microsoft.AspNetCore.JsonPatch { - public class NestedDTO + public class NestedObject { public string StringProperty { get; set; } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObjectTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObjectTests.cs index 4aa25a3af1..a0b5bd7e3f 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObjectTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/NestedObjectTests.cs @@ -15,249 +15,249 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplacePropertyInNestedObject() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { IntegerValue = 1 }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.NestedDTO.StringProperty, "B"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.NestedObject.StringProperty, "B"); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("B", doc.NestedDTO.StringProperty); + Assert.Equal("B", doc.NestedObject.StringProperty); } [Fact] public void ReplacePropertyInNestedObjectWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { IntegerValue = 1 }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.NestedDTO.StringProperty, "B"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.NestedObject.StringProperty, "B"); // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("B", doc.NestedDTO.StringProperty); + Assert.Equal("B", doc.NestedObject.StringProperty); } [Fact] public void ReplaceNestedObject() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { IntegerValue = 1 }; - var newNested = new NestedDTO() { StringProperty = "B" }; + var newNested = new NestedObject() { StringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.NestedDTO, newNested); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.NestedObject, newNested); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("B", doc.NestedDTO.StringProperty); + Assert.Equal("B", doc.NestedObject.StringProperty); } [Fact] public void ReplaceNestedObjectWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { IntegerValue = 1 }; - var newNested = new NestedDTO() { StringProperty = "B" }; + var newNested = new NestedObject() { StringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.NestedDTO, newNested); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.NestedObject, newNested); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("B", doc.NestedDTO.StringProperty); + Assert.Equal("B", doc.NestedObject.StringProperty); } [Fact] public void AddResultsInReplace() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A" } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.StringProperty, "B"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.StringProperty, "B"); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTO.StringProperty); + Assert.Equal("B", doc.SimpleObject.StringProperty); } [Fact] public void AddResultsInReplaceWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A" } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.StringProperty, "B"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.StringProperty, "B"); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTO.StringProperty); + Assert.Equal("B", doc.SimpleObject.StringProperty); } [Fact] public void AddToList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, 0); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void AddToListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void AddToIntegerIList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => (List)o.SimpleDTO.IntegerIList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => (List)o.SimpleObject.IntegerIList, 4, 0); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTO.IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObject.IntegerIList); } [Fact] public void AddToIntegerIListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => (List)o.SimpleDTO.IntegerIList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => (List)o.SimpleObject.IntegerIList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTO.IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObject.IntegerIList); } [Fact] public void AddToNestedIntegerIList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOIList = new List + SimpleObjectIList = new List { - new SimpleDTO + new SimpleObject { IntegerIList = new List() { 1, 2, 3 } } @@ -265,25 +265,25 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => (List)o.SimpleDTOIList[0].IntegerIList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => (List)o.SimpleObjectIList[0].IntegerIList, 4, 0); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTOIList[0].IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObjectIList[0].IntegerIList); } [Fact] public void AddToNestedIntegerIListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOIList = new List + SimpleObjectIList = new List { - new SimpleDTO + new SimpleObject { IntegerIList = new List() { 1, 2, 3 } } @@ -291,32 +291,32 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => (List)o.SimpleDTOIList[0].IntegerIList, 4, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => (List)o.SimpleObjectIList[0].IntegerIList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleDTOIList[0].IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, doc.SimpleObjectIList[0].IntegerIList); } [Fact] public void AddToComplextTypeListSpecifyIndex() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOList = new List() + SimpleObjectList = new List() { - new SimpleDTO + new SimpleObject { StringProperty = "String1" }, - new SimpleDTO + new SimpleObject { StringProperty = "String2" } @@ -324,29 +324,29 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTOList[0].StringProperty, "ChangedString1"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObjectList[0].StringProperty, "ChangedString1"); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("ChangedString1", doc.SimpleDTOList[0].StringProperty); + Assert.Equal("ChangedString1", doc.SimpleObjectList[0].StringProperty); } [Fact] public void AddToComplextTypeListSpecifyIndexWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOList = new List() + SimpleObjectList = new List() { - new SimpleDTO + new SimpleObject { StringProperty = "String1" }, - new SimpleDTO + new SimpleObject { StringProperty = "String2" } @@ -354,34 +354,34 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTOList[0].StringProperty, "ChangedString1"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObjectList[0].StringProperty, "ChangedString1"); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("ChangedString1", doc.SimpleDTOList[0].StringProperty); + Assert.Equal("ChangedString1", doc.SimpleObjectList[0].StringProperty); } [Fact] public void AddToListInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, 4); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -395,20 +395,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, 4); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -424,19 +424,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListInvalidPositionTooLarge_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, 4); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -452,17 +452,17 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, -1); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -475,20 +475,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -504,19 +504,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListInvalidPositionTooSmall_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4, -1); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -532,164 +532,164 @@ namespace Microsoft.AspNetCore.JsonPatch public void AddToListAppend() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 4 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 4 }, doc.SimpleObject.IntegerList); } [Fact] public void AddToListAppendWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTO.IntegerList, 4); + var patchDoc = new JsonPatchDocument(); + patchDoc.Add(o => o.SimpleObject.IntegerList, 4); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 4 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 4 }, doc.SimpleObject.IntegerList); } [Fact] public void Remove() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A" } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.StringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.StringProperty); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Null(doc.SimpleDTO.StringProperty); + Assert.Null(doc.SimpleObject.StringProperty); } [Fact] public void RemoveWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A" } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.StringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.StringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Null(doc.SimpleDTO.StringProperty); + Assert.Null(doc.SimpleObject.StringProperty); } [Fact] public void RemoveFromList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, 2); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, 2); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } [Fact] public void RemoveFromListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, 2); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, 2); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } [Fact] public void RemoveFromListInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, 3); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -702,20 +702,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromListInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, 3); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -731,19 +731,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromListInvalidPositionTooLarge_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, 3); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -757,17 +757,17 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, -1); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -780,20 +780,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -809,19 +809,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromListInvalidPositionTooSmall_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList, -1); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -836,58 +836,58 @@ namespace Microsoft.AspNetCore.JsonPatch public void RemoveFromEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } [Fact] public void RemoveFromEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Remove(o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Remove(o => o.SimpleObject.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2 }, doc.SimpleObject.IntegerList); } [Fact] public void Replace() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", DecimalValue = 10 @@ -895,48 +895,48 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.StringProperty, "B"); - patchDoc.Replace(o => o.SimpleDTO.DecimalValue, 12); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.StringProperty, "B"); + patchDoc.Replace(o => o.SimpleObject.DecimalValue, 12); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTO.StringProperty); - Assert.Equal(12, doc.SimpleDTO.DecimalValue); + Assert.Equal("B", doc.SimpleObject.StringProperty); + Assert.Equal(12, doc.SimpleObject.DecimalValue); } [Fact] public void Replace_DTOWithNullCheck() { // Arrange - var doc = new SimpleDTOWithNestedDTOWithNullCheck() + var doc = new SimpleObjectWithNestedObjectWithNullCheck() { - SimpleDTOWithNullCheck = new SimpleDTOWithNullCheck() + SimpleObjectWithNullCheck = new SimpleObjectWithNullCheck() { StringProperty = "A" } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTOWithNullCheck.StringProperty, "B"); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObjectWithNullCheck.StringProperty, "B"); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTOWithNullCheck.StringProperty); + Assert.Equal("B", doc.SimpleObjectWithNullCheck.StringProperty); } [Fact] public void ReplaceWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", DecimalValue = 10 @@ -944,28 +944,28 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.StringProperty, "B"); - patchDoc.Replace(o => o.SimpleDTO.DecimalValue, 12); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.StringProperty, "B"); + patchDoc.Replace(o => o.SimpleObject.DecimalValue, 12); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTO.StringProperty); - Assert.Equal(12, doc.SimpleDTO.DecimalValue); + Assert.Equal("B", doc.SimpleObject.StringProperty); + Assert.Equal(12, doc.SimpleObject.DecimalValue); } [Fact] public void SerializationTests() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", DecimalValue = 10, @@ -976,288 +976,288 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.StringProperty, "B"); - patchDoc.Replace(o => o.SimpleDTO.DecimalValue, 12); - patchDoc.Replace(o => o.SimpleDTO.DoubleValue, 12); - patchDoc.Replace(o => o.SimpleDTO.FloatValue, 12); - patchDoc.Replace(o => o.SimpleDTO.IntegerValue, 12); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.StringProperty, "B"); + patchDoc.Replace(o => o.SimpleObject.DecimalValue, 12); + patchDoc.Replace(o => o.SimpleObject.DoubleValue, 12); + patchDoc.Replace(o => o.SimpleObject.FloatValue, 12); + patchDoc.Replace(o => o.SimpleObject.IntegerValue, 12); // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); - var deserizalized = JsonConvert.DeserializeObject>(serialized); + var deserizalized = JsonConvert.DeserializeObject>(serialized); // Act deserizalized.ApplyTo(doc); // Assert - Assert.Equal("B", doc.SimpleDTO.StringProperty); - Assert.Equal(12, doc.SimpleDTO.DecimalValue); - Assert.Equal(12, doc.SimpleDTO.DoubleValue); - Assert.Equal(12, doc.SimpleDTO.FloatValue); - Assert.Equal(12, doc.SimpleDTO.IntegerValue); + Assert.Equal("B", doc.SimpleObject.StringProperty); + Assert.Equal(12, doc.SimpleObject.DecimalValue); + Assert.Equal(12, doc.SimpleObject.DoubleValue); + Assert.Equal(12, doc.SimpleObject.FloatValue); + Assert.Equal(12, doc.SimpleObject.IntegerValue); } [Fact] public void ReplaceInList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, 0); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 5, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceInListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 5, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new List() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, new List() { 4, 5, 6 }); // Act patchDoc.ApplyTo(doc); // Arrange - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullListWithSerialiation() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new List() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullListFromEnumerable() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new List() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace>(o => o.SimpleObject.IntegerList, new List() { 4, 5, 6 }); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullListFromEnumerableWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new List() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace>(o => o.SimpleObject.IntegerList, new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullListWithCollection() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new Collection() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace>(o => o.SimpleObject.IntegerList, new Collection() { 4, 5, 6 }); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceFullListWithCollectionWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace>(o => o.SimpleDTO.IntegerList, new Collection() { 4, 5, 6 }); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace>(o => o.SimpleObject.IntegerList, new Collection() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 4, 5, 6 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceAtEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 5 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceAtEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 5 }, doc.SimpleObject.IntegerList); } [Fact] public void ReplaceInListInvalidInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, 3); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -1270,20 +1270,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplaceInListInvalidInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, 3); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -1299,19 +1299,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplaceInListInvalid_PositionTooLarge_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, 3); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, 3); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -1327,17 +1327,17 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplaceInListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, -1); // Act & Assert var exception = Assert.Throws(() => { patchDoc.ApplyTo(doc); }); @@ -1350,20 +1350,20 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplaceInListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => { deserialized.ApplyTo(doc); }); @@ -1376,19 +1376,19 @@ namespace Microsoft.AspNetCore.JsonPatch public void ReplaceInListInvalidPositionTooSmall_LogsError() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO.IntegerList, 5, -1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject.IntegerList, 5, -1); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -1404,9 +1404,9 @@ namespace Microsoft.AspNetCore.JsonPatch public void Copy() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -1414,23 +1414,23 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.StringProperty, o => o.SimpleDTO.AnotherStringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.StringProperty, o => o.SimpleObject.AnotherStringProperty); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); } [Fact] public void CopyWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -1438,173 +1438,173 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.StringProperty, o => o.SimpleDTO.AnotherStringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.StringProperty, o => o.SimpleObject.AnotherStringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); } [Fact] public void CopyInList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList, 1); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyInListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList, 1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyFromListToEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyFromListToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyFromListToNonList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerValue); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void CopyFromListToNonListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerValue); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void CopyFromNonListToList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -1612,23 +1612,23 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList, 0); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyFromNonListToListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -1636,25 +1636,25 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyToEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -1662,23 +1662,23 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } [Fact] public void CopyToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -1686,31 +1686,31 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } [Fact] public void Copy_DeepClonesObject() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }, - InheritedDTO = new InheritedDTO() + InheritedObject = new InheritedObject() { StringProperty = "C", AnotherStringProperty = "D" @@ -1718,69 +1718,69 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.InheritedDTO, o => o.SimpleDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.InheritedObject, o => o.SimpleObject); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("C", doc.SimpleDTO.StringProperty); - Assert.Equal("D", doc.SimpleDTO.AnotherStringProperty); - Assert.Equal("C", doc.InheritedDTO.StringProperty); - Assert.Equal("D", doc.InheritedDTO.AnotherStringProperty); - Assert.NotSame(doc.SimpleDTO.StringProperty, doc.InheritedDTO.StringProperty); + Assert.Equal("C", doc.SimpleObject.StringProperty); + Assert.Equal("D", doc.SimpleObject.AnotherStringProperty); + Assert.Equal("C", doc.InheritedObject.StringProperty); + Assert.Equal("D", doc.InheritedObject.AnotherStringProperty); + Assert.NotSame(doc.SimpleObject.StringProperty, doc.InheritedObject.StringProperty); } [Fact] public void Copy_KeepsObjectType() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO(), - InheritedDTO = new InheritedDTO() + SimpleObject = new SimpleObject(), + InheritedObject = new InheritedObject() }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.InheritedDTO, o => o.SimpleDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.InheritedObject, o => o.SimpleObject); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(typeof(InheritedDTO), doc.SimpleDTO.GetType()); + Assert.Equal(typeof(InheritedObject), doc.SimpleObject.GetType()); } [Fact] public void Copy_BreaksObjectReference() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO(), - InheritedDTO = new InheritedDTO() + SimpleObject = new SimpleObject(), + InheritedObject = new InheritedObject() }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Copy(o => o.InheritedDTO, o => o.SimpleDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Copy(o => o.InheritedObject, o => o.SimpleObject); // Act patchDoc.ApplyTo(doc); // Assert - Assert.NotSame(doc.SimpleDTO, doc.InheritedDTO); + Assert.NotSame(doc.SimpleObject, doc.InheritedObject); } [Fact] public void Move() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -1788,24 +1788,24 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.StringProperty, o => o.SimpleDTO.AnotherStringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.StringProperty, o => o.SimpleObject.AnotherStringProperty); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); - Assert.Null(doc.SimpleDTO.StringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); + Assert.Null(doc.SimpleObject.StringProperty); } [Fact] public void MoveWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" @@ -1813,150 +1813,150 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.StringProperty, o => o.SimpleDTO.AnotherStringProperty); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.StringProperty, o => o.SimpleObject.AnotherStringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("A", doc.SimpleDTO.AnotherStringProperty); - Assert.Null(doc.SimpleDTO.StringProperty); + Assert.Equal("A", doc.SimpleObject.AnotherStringProperty); + Assert.Null(doc.SimpleObject.StringProperty); } [Fact] public void Move_KeepsObjectReference() { // Arrange - var sDto = new SimpleDTO() + var sDto = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; - var iDto = new InheritedDTO() + var iDto = new InheritedObject() { StringProperty = "C", AnotherStringProperty = "D" }; - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = sDto, - InheritedDTO = iDto + SimpleObject = sDto, + InheritedObject = iDto }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.InheritedDTO, o => o.SimpleDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.InheritedObject, o => o.SimpleObject); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal("C", doc.SimpleDTO.StringProperty); - Assert.Equal("D", doc.SimpleDTO.AnotherStringProperty); - Assert.Same(iDto, doc.SimpleDTO); - Assert.Null(doc.InheritedDTO); + Assert.Equal("C", doc.SimpleObject.StringProperty); + Assert.Equal("D", doc.SimpleObject.AnotherStringProperty); + Assert.Same(iDto, doc.SimpleObject); + Assert.Null(doc.InheritedObject); } [Fact] public void Move_KeepsObjectReferenceWithSerialization() { // Arrange - var sDto = new SimpleDTO() + var sDto = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; - var iDto = new InheritedDTO() + var iDto = new InheritedObject() { StringProperty = "C", AnotherStringProperty = "D" }; - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = sDto, - InheritedDTO = iDto + SimpleObject = sDto, + InheritedObject = iDto }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.InheritedDTO, o => o.SimpleDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.InheritedObject, o => o.SimpleObject); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal("C", doc.SimpleDTO.StringProperty); - Assert.Equal("D", doc.SimpleDTO.AnotherStringProperty); - Assert.Same(iDto, doc.SimpleDTO); - Assert.Null(doc.InheritedDTO); + Assert.Equal("C", doc.SimpleObject.StringProperty); + Assert.Equal("D", doc.SimpleObject.AnotherStringProperty); + Assert.Same(iDto, doc.SimpleObject); + Assert.Null(doc.InheritedObject); } [Fact] public void MoveInList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList, 1); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 1, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 1, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveInListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList, 1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 1, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 1, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void Move_KeepsObjectReferenceInList() { // Arrange - var sDto1 = new SimpleDTO() { IntegerValue = 1 }; - var sDto2 = new SimpleDTO() { IntegerValue = 2 }; - var sDto3 = new SimpleDTO() { IntegerValue = 3 }; - var doc = new SimpleDTOWithNestedDTO() + var sDto1 = new SimpleObject() { IntegerValue = 1 }; + var sDto2 = new SimpleObject() { IntegerValue = 2 }; + var sDto3 = new SimpleObject() { IntegerValue = 3 }; + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOList = new List() { + SimpleObjectList = new List() { sDto1, sDto2, sDto3 @@ -1964,30 +1964,30 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTOList, 0, o => o.SimpleDTOList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObjectList, 0, o => o.SimpleObjectList, 1); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { sDto2, sDto1, sDto3 }, doc.SimpleDTOList); - Assert.Equal(2, doc.SimpleDTOList[0].IntegerValue); - Assert.Equal(1, doc.SimpleDTOList[1].IntegerValue); - Assert.Same(sDto2, doc.SimpleDTOList[0]); - Assert.Same(sDto1, doc.SimpleDTOList[1]); + Assert.Equal(new List() { sDto2, sDto1, sDto3 }, doc.SimpleObjectList); + Assert.Equal(2, doc.SimpleObjectList[0].IntegerValue); + Assert.Equal(1, doc.SimpleObjectList[1].IntegerValue); + Assert.Same(sDto2, doc.SimpleObjectList[0]); + Assert.Same(sDto1, doc.SimpleObjectList[1]); } [Fact] public void Move_KeepsObjectReferenceInListWithSerialization() { // Arrange - var sDto1 = new SimpleDTO() { IntegerValue = 1 }; - var sDto2 = new SimpleDTO() { IntegerValue = 2 }; - var sDto3 = new SimpleDTO() { IntegerValue = 3 }; - var doc = new SimpleDTOWithNestedDTO() + var sDto1 = new SimpleObject() { IntegerValue = 1 }; + var sDto2 = new SimpleObject() { IntegerValue = 2 }; + var sDto3 = new SimpleObject() { IntegerValue = 3 }; + var doc = new SimpleObjectWithNestedObject() { - SimpleDTOList = new List() { + SimpleObjectList = new List() { sDto1, sDto2, sDto3 @@ -1995,144 +1995,144 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTOList, 0, o => o.SimpleDTOList, 1); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObjectList, 0, o => o.SimpleObjectList, 1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { sDto2, sDto1, sDto3 }, doc.SimpleDTOList); - Assert.Equal(2, doc.SimpleDTOList[0].IntegerValue); - Assert.Equal(1, doc.SimpleDTOList[1].IntegerValue); - Assert.Same(sDto2, doc.SimpleDTOList[0]); - Assert.Same(sDto1, doc.SimpleDTOList[1]); + Assert.Equal(new List() { sDto2, sDto1, sDto3 }, doc.SimpleObjectList); + Assert.Equal(2, doc.SimpleObjectList[0].IntegerValue); + Assert.Equal(1, doc.SimpleObjectList[1].IntegerValue); + Assert.Same(sDto2, doc.SimpleObjectList[0]); + Assert.Same(sDto1, doc.SimpleObjectList[1]); } [Fact] public void MoveFromListToEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveFromListToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3, 1 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 3, 1 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveFomListToNonList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerValue); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3 }, doc.SimpleDTO.IntegerList); - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(new List() { 2, 3 }, doc.SimpleObject.IntegerList); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void MoveFomListToNonListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.SimpleDTO.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.SimpleObject.IntegerValue); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3 }, doc.SimpleDTO.IntegerList); - Assert.Equal(1, doc.SimpleDTO.IntegerValue); + Assert.Equal(new List() { 2, 3 }, doc.SimpleObject.IntegerList); + Assert.Equal(1, doc.SimpleObject.IntegerValue); } [Fact] public void MoveFomListToNonListBetweenHierarchy() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.IntegerValue); // Act patchDoc.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 3 }, doc.SimpleObject.IntegerList); Assert.Equal(1, doc.IntegerValue); } @@ -2140,26 +2140,26 @@ namespace Microsoft.AspNetCore.JsonPatch public void MoveFomListToNonListBetweenHierarchyWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } } }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerList, 0, o => o.IntegerValue); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerList, 0, o => o.IntegerValue); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(new List() { 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 2, 3 }, doc.SimpleObject.IntegerList); Assert.Equal(1, doc.IntegerValue); } @@ -2167,9 +2167,9 @@ namespace Microsoft.AspNetCore.JsonPatch public void MoveFromNonListToList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -2177,24 +2177,24 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList, 0); // Act patchDoc.ApplyTo(doc); // Assert Assert.Equal(0, doc.IntegerValue); - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveFromNonListToListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -2202,27 +2202,27 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList, 0); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert Assert.Equal(0, doc.IntegerValue); - Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 5, 1, 2, 3 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveToEndOfList() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -2230,24 +2230,24 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList); // Act patchDoc.ApplyTo(doc); // Assert Assert.Equal(0, doc.IntegerValue); - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } [Fact] public void MoveToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } @@ -2255,18 +2255,18 @@ namespace Microsoft.AspNetCore.JsonPatch }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Move(o => o.SimpleDTO.IntegerValue, o => o.SimpleDTO.IntegerList); + var patchDoc = new JsonPatchDocument(); + patchDoc.Move(o => o.SimpleObject.IntegerValue, o => o.SimpleObject.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert Assert.Equal(0, doc.IntegerValue); - Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleDTO.IntegerList); + Assert.Equal(new List() { 1, 2, 3, 5 }, doc.SimpleObject.IntegerList); } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectAdapterTests.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectAdapterTests.cs index 34a8c97b67..d35f8eb4e9 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectAdapterTests.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectAdapterTests.cs @@ -16,13 +16,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddResultsShouldReplace() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.StringProperty, "B"); // Act @@ -36,17 +36,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddResultsShouldReplaceWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.StringProperty, "B"); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -59,13 +59,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 0); // Act @@ -79,17 +79,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -102,13 +102,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToIntegerIList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerIList, 4, 0); // Act @@ -122,17 +122,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToIntegerIListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerIList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -145,13 +145,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 4); // Act & Assert @@ -165,17 +165,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 4); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => { deserialized.ApplyTo(doc); }); @@ -188,16 +188,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooLarge_LogsError() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 4); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -212,13 +212,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListAtBeginning() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 0); // Act @@ -232,17 +232,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListAtBeginningWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -255,13 +255,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, -1); // Act & Assert @@ -275,17 +275,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => { deserialized.ApplyTo(doc); }); @@ -298,16 +298,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListInvalidPositionTooSmall_LogsError() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4, -1); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -321,13 +321,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListAppend() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4); // Act @@ -341,17 +341,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddToListAppendWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerList, 4); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -364,13 +364,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Remove() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.StringProperty); // Act @@ -384,17 +384,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.StringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -407,13 +407,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, 2); // Act @@ -427,17 +427,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, 2); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -450,13 +450,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, 3); // Act & Assert @@ -470,17 +470,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, 3); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => { deserialized.ApplyTo(doc); }); @@ -493,16 +493,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooLarge_LogsError() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, 3); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -517,13 +517,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, -1); // Act & Assert @@ -537,17 +537,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => { deserialized.ApplyTo(doc); }); @@ -560,16 +560,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromListInvalidPositionTooSmall_LogsError() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList, -1); - var logger = new TestErrorLogger(); + var logger = new TestErrorLogger(); patchDoc.ApplyTo(doc, logger.LogErrorMessage); @@ -585,13 +585,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList); // Act @@ -605,17 +605,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void RemoveFromEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -628,14 +628,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Replace() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", DecimalValue = 10 }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); patchDoc.Replace(o => o.DecimalValue, 12); @@ -652,13 +652,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Replace_DTOWithNullCheck() { // Arrange - var doc = new SimpleDTOWithNullCheck() + var doc = new SimpleObjectWithNullCheck() { StringProperty = "A", }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); // Act @@ -672,20 +672,20 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", DecimalValue = 10 }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); patchDoc.Replace(o => o.DecimalValue, 12); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -699,7 +699,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void SerializationMustNotIncudeEnvelope() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", DecimalValue = 10, @@ -709,7 +709,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); patchDoc.Replace(o => o.DecimalValue, 12); patchDoc.Replace(o => o.DoubleValue, 12); @@ -728,7 +728,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void DeserializationMustWorkWithoutEnvelope() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", DecimalValue = 10, @@ -738,7 +738,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); patchDoc.Replace(o => o.DecimalValue, 12); patchDoc.Replace(o => o.DoubleValue, 12); @@ -749,23 +749,23 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters var serialized = JsonConvert.SerializeObject(patchDoc); // Act - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Assert - Assert.IsType>(deserialized); + Assert.IsType>(deserialized); } [Fact] public void DeserializationMustFailWithEnvelope() { // Arrange - string serialized = "{\"Operations\": [{ \"op\": \"replace\", \"path\": \"/title\", \"value\": \"New Title\"}]}"; + var serialized = "{\"Operations\": [{ \"op\": \"replace\", \"path\": \"/title\", \"value\": \"New Title\"}]}"; // Act & Assert var exception = Assert.Throws(() => { var deserialized - = JsonConvert.DeserializeObject>(serialized); + = JsonConvert.DeserializeObject>(serialized); }); Assert.Equal("The type 'JsonPatchDocument`1' was malformed and could not be parsed.", exception.Message); @@ -775,7 +775,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void SerializationTests() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", DecimalValue = 10, @@ -785,7 +785,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.StringProperty, "B"); patchDoc.Replace(o => o.DecimalValue, 12); patchDoc.Replace(o => o.DoubleValue, 12); @@ -794,7 +794,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); - var deserizalized = JsonConvert.DeserializeObject>(serialized); + var deserizalized = JsonConvert.DeserializeObject>(serialized); // Act deserizalized.ApplyTo(doc); @@ -811,19 +811,19 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void SerializeAndReplaceGuidTest() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { GuidValue = Guid.NewGuid() }; var newGuid = Guid.NewGuid(); // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.GuidValue, newGuid); // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); - var deserizalized = JsonConvert.DeserializeObject>(serialized); + var deserizalized = JsonConvert.DeserializeObject>(serialized); // Act deserizalized.ApplyTo(doc); @@ -836,48 +836,48 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void SerializeAndReplaceNestedObjectTest() { // Arrange - var doc = new SimpleDTOWithNestedDTO() + var doc = new SimpleObjectWithNestedObject() { - SimpleDTO = new SimpleDTO() + SimpleObject = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } } }; - var newDTO = new SimpleDTO() + var newDTO = new SimpleObject() { DoubleValue = 1 }; // create patch - var patchDoc = new JsonPatchDocument(); - patchDoc.Replace(o => o.SimpleDTO, newDTO); + var patchDoc = new JsonPatchDocument(); + patchDoc.Replace(o => o.SimpleObject, newDTO); // serialize & deserialize var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); // Assert - Assert.Equal(1, doc.SimpleDTO.DoubleValue); - Assert.Equal(0, doc.SimpleDTO.IntegerValue); - Assert.Null(doc.SimpleDTO.IntegerList); + Assert.Equal(1, doc.SimpleObject.DoubleValue); + Assert.Equal(0, doc.SimpleObject.IntegerValue); + Assert.Null(doc.SimpleObject.IntegerList); } [Fact] public void ReplaceInList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, 0); // Act @@ -891,17 +891,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceInListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -914,13 +914,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new List() { 4, 5, 6 }); // Act @@ -934,17 +934,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -957,13 +957,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullListFromEnumerable() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new List() { 4, 5, 6 }); // Act @@ -977,17 +977,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullListFromEnumerableWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new List() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1000,13 +1000,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullListWithCollection() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new Collection() { 4, 5, 6 }); // Act @@ -1020,17 +1020,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceFullListWithCollectionWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace>(o => o.IntegerList, new Collection() { 4, 5, 6 }); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1043,13 +1043,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceAtEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5); // Act @@ -1063,16 +1063,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceAtEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1085,13 +1085,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceInListInvalidInvalidPositionTooLarge() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, 3); // Act & Assert @@ -1108,16 +1108,16 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceInListInvalidInvalidPositionTooLargeWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, 3); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -1133,13 +1133,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceInListInvalidPositionTooSmall() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, -1); // Act & Assert @@ -1156,17 +1156,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void ReplaceInListInvalidPositionTooSmallWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Replace(o => o.IntegerList, 5, -1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act & Assert var exception = Assert.Throws(() => @@ -1182,14 +1182,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Copy() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.StringProperty, o => o.AnotherStringProperty); // Act @@ -1203,17 +1203,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.StringProperty, o => o.AnotherStringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1226,13 +1226,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyInList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerList, 1); // Act @@ -1246,17 +1246,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyInListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerList, 1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1269,13 +1269,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromListToEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerList); // Act @@ -1289,17 +1289,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromListToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1312,13 +1312,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromListToNonList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerValue); // Act @@ -1332,17 +1332,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromListToNonListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerList, 0, o => o.IntegerValue); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1355,14 +1355,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromNonListToList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerValue, o => o.IntegerList, 0); // Act @@ -1376,18 +1376,18 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyFromNonListToListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerValue, o => o.IntegerList, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1400,14 +1400,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyToEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerValue, o => o.IntegerList); // Act @@ -1421,18 +1421,18 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void CopyToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Copy(o => o.IntegerValue, o => o.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1445,14 +1445,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Move() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.StringProperty, o => o.AnotherStringProperty); // Act @@ -1467,18 +1467,18 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A", AnotherStringProperty = "B" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.StringProperty, o => o.AnotherStringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1492,13 +1492,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveInList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerList, 1); // Act @@ -1512,17 +1512,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveInListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerList, 1); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1535,13 +1535,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFromListToEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerList); // Act @@ -1555,17 +1555,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFromListToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1578,13 +1578,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFomListToNonList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerValue); // Act @@ -1599,17 +1599,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFomListToNonListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerList, 0, o => o.IntegerValue); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1623,14 +1623,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFromNonListToList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerValue, o => o.IntegerList, 0); // Act @@ -1645,18 +1645,18 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveFromNonListToListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerValue, o => o.IntegerList, 0); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1670,14 +1670,14 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveToEndOfList() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerValue, o => o.IntegerList); // Act @@ -1692,18 +1692,18 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void MoveToEndOfListWithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerValue = 5, IntegerList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Move(o => o.IntegerValue, o => o.IntegerList); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); @@ -1950,13 +1950,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddMember_OnPOCO_WithNullPropertyValue_ShouldAddPropertyValue() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = null }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.StringProperty, "B"); // Act @@ -2175,13 +2175,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void AddElement_ToList_OnPOCO_ShouldAddValue_AtSuppliedPosition() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Add(o => o.IntegerIList, 4, 0); // Act @@ -2193,7 +2193,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters class Class3 { - public SimpleDTO SimpleDTOProperty { get; set; } = new SimpleDTO(); + public SimpleObject SimpleObjectProperty { get; set; } = new SimpleObject(); } [Fact] @@ -2202,19 +2202,19 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters // Arrange var model = new Class3() { - SimpleDTOProperty = new SimpleDTO() + SimpleObjectProperty = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } } }; var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTOProperty.IntegerIList, value: 4, position: 0); + patchDoc.Add(o => o.SimpleObjectProperty.IntegerIList, value: 4, position: 0); // Act patchDoc.ApplyTo(model); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, model.SimpleDTOProperty.IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, model.SimpleObjectProperty.IntegerIList); } [Fact] @@ -2223,13 +2223,13 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters // Arrange var model = new Class3() { - SimpleDTOProperty = new SimpleDTO() + SimpleObjectProperty = new SimpleObject() { IntegerIList = new List() { 1, 2, 3 } } }; var patchDoc = new JsonPatchDocument(); - patchDoc.Add(o => o.SimpleDTOProperty.IntegerIList, value: 4, position: 0); + patchDoc.Add(o => o.SimpleObjectProperty.IntegerIList, value: 4, position: 0); var serialized = JsonConvert.SerializeObject(patchDoc); var deserialized = JsonConvert.DeserializeObject>(serialized); @@ -2237,7 +2237,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters deserialized.ApplyTo(model); // Assert - Assert.Equal(new List() { 4, 1, 2, 3 }, model.SimpleDTOProperty.IntegerIList); + Assert.Equal(new List() { 4, 1, 2, 3 }, model.SimpleObjectProperty.IntegerIList); } class Class4 @@ -2267,17 +2267,17 @@ namespace Microsoft.AspNetCore.JsonPatch.Adapters public void Remove_OnNonReferenceType_POCOProperty_ShouldSetDefaultValue_WithSerialization() { // Arrange - var doc = new SimpleDTO() + var doc = new SimpleObject() { StringProperty = "A" }; // create patch - var patchDoc = new JsonPatchDocument(); + var patchDoc = new JsonPatchDocument(); patchDoc.Remove(o => o.StringProperty); var serialized = JsonConvert.SerializeObject(patchDoc); - var deserialized = JsonConvert.DeserializeObject>(serialized); + var deserialized = JsonConvert.DeserializeObject>(serialized); // Act deserialized.ApplyTo(doc); diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectVisitorTest.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectVisitorTest.cs index 391b5ebe2c..5eddac8685 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectVisitorTest.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/ObjectVisitorTest.cs @@ -46,11 +46,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal { // Arrange var visitor = new ObjectVisitor(new ParsedPath(path), new DefaultContractResolver()); - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.True(visitStatus); @@ -81,11 +79,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal { // Arrange var visitor = new ObjectVisitor(new ParsedPath(path), new DefaultContractResolver()); - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.True(visitStatus); @@ -112,11 +108,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal { // Arrange var visitor = new ObjectVisitor(new ParsedPath(path), new DefaultContractResolver()); - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.True(visitStatus); @@ -146,11 +140,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal { // Arrange var visitor = new ObjectVisitor(new ParsedPath(path), new DefaultContractResolver()); - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.True(visitStatus); @@ -168,11 +160,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var visitor = new ObjectVisitor(new ParsedPath($"/Customers/{position}/States/-"), new DefaultContractResolver()); var automobileDepartment = new Class1Nested(); object targetObject = automobileDepartment; - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.False(visitStatus); @@ -190,11 +180,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var visitor = new ObjectVisitor(new ParsedPath($"/Customers/{position}/States/-"), new DefaultContractResolver()); var automobileDepartment = new Class1Nested(); object targetObject = automobileDepartment; - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.False(visitStatus); @@ -211,16 +199,30 @@ namespace Microsoft.AspNetCore.JsonPatch.Internal var visitor = new ObjectVisitor(new ParsedPath($"/NonExisting"), new DefaultContractResolver()); var model = new Class1(); object targetObject = model; - IAdapter adapter = null; - string message = null; // Act - var visitStatus = visitor.TryVisit(ref targetObject, out adapter, out message); + var visitStatus = visitor.TryVisit(ref targetObject, out var adapter, out var message); // Assert Assert.True(visitStatus); Assert.True(string.IsNullOrEmpty(message), "Expected no error message"); Assert.IsType(adapter); } + + [Fact] + public void Visit_NullTarget_ReturnsNullAdapter() + { + // Arrange + var visitor = new ObjectVisitor(new ParsedPath("test"), new DefaultContractResolver()); + + // Act + object target = null; + var visitStatus = visitor.TryVisit(ref target, out var adapter, out var message); + + // Assert + Assert.False(visitStatus); + Assert.Null(adapter); + Assert.Null(message); + } } } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTO.cs deleted file mode 100644 index de089eb25f..0000000000 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTO.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Generic; - -namespace Microsoft.AspNetCore.JsonPatch -{ - public class SimpleDTOWithNestedDTO - { - public int IntegerValue { get; set; } - - public NestedDTO NestedDTO { get; set; } - - public SimpleDTO SimpleDTO { get; set; } - - public InheritedDTO InheritedDTO { get; set; } - - public List SimpleDTOList { get; set; } - - public IList SimpleDTOIList { get; set; } - - public SimpleDTOWithNestedDTO() - { - this.NestedDTO = new NestedDTO(); - this.SimpleDTO = new SimpleDTO(); - this.InheritedDTO = new InheritedDTO(); - this.SimpleDTOList = new List(); - } - } -} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTOWithNullCheck.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTOWithNullCheck.cs deleted file mode 100644 index 308f23b470..0000000000 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNestedDTOWithNullCheck.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNetCore.JsonPatch -{ - public class SimpleDTOWithNestedDTOWithNullCheck - { - public SimpleDTOWithNullCheck SimpleDTOWithNullCheck { get; set; } - - public SimpleDTOWithNestedDTOWithNullCheck() - { - SimpleDTOWithNullCheck = new SimpleDTOWithNullCheck(); - } - } -} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTO.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObject.cs similarity index 95% rename from test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTO.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObject.cs index 6dc1f173de..28a9570c2b 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTO.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObject.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Microsoft.AspNetCore.JsonPatch { - public class SimpleDTO + public class SimpleObject { public List IntegerList { get; set; } public IList IntegerIList { get; set; } diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObject.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObject.cs new file mode 100644 index 0000000000..4d7c0e2bd8 --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObject.cs @@ -0,0 +1,30 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace Microsoft.AspNetCore.JsonPatch +{ + public class SimpleObjectWithNestedObject + { + public int IntegerValue { get; set; } + + public NestedObject NestedObject { get; set; } + + public SimpleObject SimpleObject { get; set; } + + public InheritedObject InheritedObject { get; set; } + + public List SimpleObjectList { get; set; } + + public IList SimpleObjectIList { get; set; } + + public SimpleObjectWithNestedObject() + { + NestedObject = new NestedObject(); + SimpleObject = new SimpleObject(); + InheritedObject = new InheritedObject(); + SimpleObjectList = new List(); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObjectWithNullCheck.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObjectWithNullCheck.cs new file mode 100644 index 0000000000..f2423700d8 --- /dev/null +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNestedObjectWithNullCheck.cs @@ -0,0 +1,15 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.JsonPatch +{ + public class SimpleObjectWithNestedObjectWithNullCheck + { + public SimpleObjectWithNullCheck SimpleObjectWithNullCheck { get; set; } + + public SimpleObjectWithNestedObjectWithNullCheck() + { + SimpleObjectWithNullCheck = new SimpleObjectWithNullCheck(); + } + } +} diff --git a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNullCheck.cs b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNullCheck.cs similarity index 93% rename from test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNullCheck.cs rename to test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNullCheck.cs index d2a5fe51a4..83338c5a23 100644 --- a/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleDTOWithNullCheck.cs +++ b/test/Microsoft.AspNetCore.JsonPatch.Test/SimpleObjectWithNullCheck.cs @@ -5,7 +5,7 @@ using System; namespace Microsoft.AspNetCore.JsonPatch { - public class SimpleDTOWithNullCheck + public class SimpleObjectWithNullCheck { private string stringProperty;