| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- // 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;
- using Microsoft.AspNetCore.JsonPatch.Exceptions;
- using Microsoft.AspNetCore.JsonPatch.Operations;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using Xunit;
- namespace Microsoft.AspNetCore.JsonPatch
- {
- public class JsonPatchDocumentJObjectTest
- {
- [Fact]
- public void ApplyTo_Array_Add()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { Emails = new[] { "[email protected]" } })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("add", "/CustomData/Emails/-", null, "[email protected]"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal("[email protected]", model.CustomData["Emails"][1].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Test1()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { Email = "[email protected]", Name = "Bar" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("test", "/CustomData/Email", null, "[email protected]"));
- patch.Operations.Add(new Operation<ObjectWithJObject>("add", "/CustomData/Name", null, "Bar Baz"));
- // Act & Assert
- Assert.Throws<JsonPatchException>(() => patch.ApplyTo(model));
- }
- [Fact]
- public void ApplyTo_Model_Test2()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { Email = "[email protected]", Name = "Bar" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("test", "/CustomData/Email", null, "[email protected]"));
- patch.Operations.Add(new Operation<ObjectWithJObject>("add", "/CustomData/Name", null, "Bar Baz"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal("Bar Baz", model.CustomData["Name"].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Copy()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { Email = "[email protected]" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("copy", "/CustomData/UserName", "/CustomData/Email"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal("[email protected]", model.CustomData["UserName"].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Remove()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { FirstName = "Foo", LastName = "Bar" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("remove", "/CustomData/LastName", null));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.False(model.CustomData.ContainsKey("LastName"));
- }
- [Fact]
- public void ApplyTo_Model_Move()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { FirstName = "Bar" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("move", "/CustomData/LastName", "/CustomData/FirstName"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.False(model.CustomData.ContainsKey("FirstName"));
- Assert.Equal("Bar", model.CustomData["LastName"].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Add()
- {
- // Arrange
- var model = new ObjectWithJObject();
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("add", "/CustomData/Name", null, "Foo"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal("Foo", model.CustomData["Name"].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Add_Null()
- {
- // Arrange
- var model = new ObjectWithJObject();
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("add", "/CustomData/Name", null, null));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal(JTokenType.Null, model.CustomData["Name"].Type);
- }
- [Fact]
- public void ApplyTo_Model_Replace()
- {
- // Arrange
- var model = new ObjectWithJObject{ CustomData = JObject.FromObject(new { Email = "[email protected]", Name = "Bar" })};
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("replace", "/CustomData/Email", null, "[email protected]"));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal("[email protected]", model.CustomData["Email"].Value<string>());
- }
- [Fact]
- public void ApplyTo_Model_Replace_Null()
- {
- // Arrange
- var model = new ObjectWithJObject { CustomData = JObject.FromObject(new { Email = "[email protected]", Name = "Bar" }) };
- var patch = new JsonPatchDocument<ObjectWithJObject>();
- patch.Operations.Add(new Operation<ObjectWithJObject>("replace", "/CustomData/Email", null, null));
- // Act
- patch.ApplyTo(model);
- // Assert
- Assert.Equal(JTokenType.Null, model.CustomData["Email"].Type);
- }
- }
- }
|