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