public void DoNotMerge() { Dictionary <string, object> responseA = GetResponseA(); Dictionary <string, object> responseB = GetResponseB(); ResponseMergeUtil merger = new ResponseMergeUtil(); merger.AddFieldMerger("fieldInBoth", ResponseMergeUtil.DoNotMergeIfExists); Dictionary <string, object> merged = merger.Merge(responseA, responseB); Assert.AreEqual("i am a", merged["fieldInBoth"], "Did not merge when existed"); Assert.AreEqual(33, merged["fieldOnlyInB"], "Merged when did not exist"); }
public void MergeListsConcat() { Dictionary <string, object> responseA = GetResponseA(); Dictionary <string, object> responseB = GetResponseB(); ResponseMergeUtil merger = new ResponseMergeUtil(); merger.AddFieldMerger("fieldHasList", ResponseMergeUtil.MergeListsConcat); Dictionary <string, object> merged = merger.Merge(responseA, responseB); Assert.AreEqual(2, ((List <object>)merged["fieldHasList"]).Count, "Has two elements"); Assert.AreEqual(0, ((List <object>)merged["fieldHasList"])[0], "First value was correct"); Assert.AreEqual(1, ((List <object>)merged["fieldHasList"])[1], "Second value was correct"); }
public void CustomFieldMerger() { Dictionary <string, object> responseA = GetResponseA(); Dictionary <string, object> responseB = GetResponseB(); ResponseMergeUtil merger = new ResponseMergeUtil(); merger.AddFieldMerger("fieldInBoth", (string field, Dictionary <string, object> into, Dictionary <string, object> dataA, Dictionary <string, object> dataB) => { into[field] = (string)dataA[field] + (string)dataB[field]; }); Dictionary <string, object> merged = merger.Merge(responseA, responseB); Assert.AreEqual("i am ai am b", merged["fieldInBoth"], "Custom merger worked"); }
public void TestNestedMerge() { Dictionary <string, object> responseA = GetResponseA(); Dictionary <string, object> responseB = GetResponseB(); ResponseMergeUtil merger = new ResponseMergeUtil(); merger.AddObjectMerger("fieldHasDictionary", new ResponseMergeUtil()); Dictionary <string, object> merged = merger.Merge(responseA, responseB); Assert.AreEqual(3, merged["fieldOnlyInA"], "Brought in field from A"); Assert.AreEqual("i am b", merged["fieldInBoth"], "Overwrote field in A from B"); Assert.IsFalse(Object.ReferenceEquals(responseA["fieldHasDictionary"], merged["fieldHasDictionary"]), "Created a new nested object that was not responseA"); Assert.IsFalse(Object.ReferenceEquals(responseB["fieldHasDictionary"], merged["fieldHasDictionary"]), "Created a new nested object that was not responseB"); }
public void TestDefaultMerge() { Dictionary <string, object> responseA = GetResponseA(); Dictionary <string, object> responseB = GetResponseB(); ResponseMergeUtil merger = new ResponseMergeUtil(); Dictionary <string, object> merged = merger.Merge(responseA, responseB); Assert.IsFalse(Object.ReferenceEquals(responseA, merged)); Assert.IsFalse(Object.ReferenceEquals(responseB, merged)); Assert.AreNotEqual(responseA, merged, "The merged dictionary is not responseA"); Assert.AreNotEqual(responseB, merged, "The merged dictionary is not responseB"); Assert.AreEqual(3, merged["fieldOnlyInA"], "Brought in field from A"); Assert.AreEqual("i am b", merged["fieldInBoth"], "Overwrote field in A from B"); Assert.AreEqual(1, ((List <int>)merged["fieldHasList"])[0], "Overwrote field in A from B that is a list"); Assert.AreEqual("monkey", ((Dictionary <string, object>)merged["fieldHasDictionary"])["keyA"], "Overwrote field in A from B that is a list"); Assert.IsTrue(Object.ReferenceEquals(responseB["fieldHasDictionary"], merged["fieldHasDictionary"])); }