private static string ToActual(JsonPatchBuilder builder) { var withSpaces = builder.ToString(); var crunched = String.Concat(withSpaces.Where(character => !Char.IsWhiteSpace(character))); return(crunched); }
public void WorkItemRemovals() { var before = GetBaselineWorkItem(); var after = GetBaselineWorkItem(); after.Relations.Remove(after.Relations.First(item => item.Index == 19)); after.Relations.Remove(after.Relations.First(item => item.Index == 12)); after.Relations.Remove(after.Relations.First(item => item.Index == 0)); var patch = JsonPatchBuilder.GenerateDeltaPatch <ADOWorkItem>(before, after); Assert.AreEqual(3, patch.PatchCount); AssertJsonContains(patch, JArray.FromObject(new dynamic[] { new { op = "remove", path = "/relations/0" }, new { op = "remove", path = "/relations/12" }, new { op = "remove", path = "/relations/19" } })); }
public void WorkItemAdditions() { ADOWorkItem from = GetBaselineWorkItem(); ADOWorkItem to = GetBaselineWorkItem(); var patchFromEmpty = JsonPatchBuilder.GenerateDeltaPatch(new ADOWorkItem(), to); AssertJsonContains(patchFromEmpty, JObject.FromObject(new { op = "add", path = "/id", value = to.Id })); AssertJsonContains(patchFromEmpty, JObject.FromObject(new { op = "add", path = "/fields/System.Title", value = to.Title })); var patch = JsonPatchBuilder.GenerateDeltaPatch(from, to); Assert.AreEqual(0, patch.PatchCount); to.AssignedTo = new ADOPerson() { DisplayName = "John Doe", Email = "*****@*****.**" }; to.Relations.Add(new ADOWorkItemRelationInfo() { Name = "Test Name", Type = "Test Type" }); patch = JsonPatchBuilder.GenerateDeltaPatch(from, to); Assert.AreEqual(2, patch.PatchCount); AssertJsonContains(patch, JObject.FromObject(new { op = "add", path = "/fields/System.AssignedTo", value = new { uniqueName = to.AssignedTo.Email } })); AssertJsonContains(patch, JObject.FromObject(new { op = "add", path = "/relations/-", value = new { rel = "ArtifactLink", url = (string)null, attributes = new { name = "Test Name" } } })); }
public void SingleRemove() { var builder = new JsonPatchBuilder() .Remove(this.removePath); Assert.AreEqual( ToExpectedFull("remove", this.removePath), ToActual(builder)); }
public void SingleAddNumber() { var builder = new JsonPatchBuilder() .Add(this.addPath, 3); Assert.AreEqual( ToExpectedFull("add", this.addPath, "3"), ToActual(builder)); }
public void SingleAddText() { var builder = new JsonPatchBuilder() .Add(this.addPath, this.testTextValue); Assert.AreEqual( ToExpectedFull("add", this.addPath, $"\"{this.testTextValue}\""), ToActual(builder)); }
public void CombinePatches() { var original = new JsonPatchBuilder() .Add(this.addPath, 4); var toBeAdded = new JsonPatchBuilder() .Remove(this.removePath); original += toBeAdded; Assert.AreEqual(2, original.PatchCount); }
public void WorkItemMixedOperations() { var before = GetBaselineWorkItem(); var after = GetBaselineWorkItem(); after.Title = "Modified title"; after.State = null; after.Relations.Remove(after.Relations.First(item => item.Index == 12)); after.Relations.Add(new ADOWorkItemRelationInfo() { Name = "New relation name", Url = "New relation url" }); var patch = JsonPatchBuilder.GenerateDeltaPatch(before, after); Assert.AreEqual(4, patch.PatchCount); AssertJsonContains(patch, JObject.FromObject(new { op = "replace", path = "/fields/System.Title", value = "Modified title" })); AssertJsonContains(patch, JObject.FromObject(new { op = "remove", path = "/fields/System.State" })); AssertJsonContains(patch, JObject.FromObject(new { op = "remove", path = "/relations/12" })); AssertJsonContains(patch, JObject.FromObject(new { op = "add", path = "/relations/-", value = new { rel = "ArtifactLink", url = "New relation url", attributes = new { name = "New relation name" }, } })); }
public void MultipleHeterogeneousOperations() { var builder = new JsonPatchBuilder() .Add(this.addPath, 4) .Remove(this.removePath) .Add(this.addPath, this.testDynamicValue) .Replace(this.replacePath, true) .Add(this.addPath, this.testTextValue); var expected = "[" + ToExpectedObject("add", this.addPath, "4") + "," + ToExpectedObject("remove", this.removePath) + "," + ToExpectedObject("add", this.addPath, this.testDynamicExpectedSerialized) + "," + ToExpectedObject("replace", this.replacePath, "true") + "," + ToExpectedObject("add", this.addPath, $"\"{this.testTextValue}\"") + "]"; Assert.AreEqual(5, builder.PatchCount); Assert.AreEqual(expected, ToActual(builder)); }
private void AssertJsonContains(JsonPatchBuilder builder, JToken item) => AssertJsonContains(JArray.Parse(builder.ToString()), item);