package restx.tests.json;
import com.google.common.collect.ImmutableMap;
import org.assertj.core.groups.Tuple;
import org.junit.Test;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Date: 3/2/14
* Time: 22:14
*/
public class JsonMergerTest {
JsonMerger merger = new JsonMerger();
@Test
public void should_merge_added_key_to_right() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{}"),
new StringJsonSource("", "{\"key1\": \"val1\"}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{ }");
}
@Test
public void should_merge_added_key_to_left() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{}"),
new StringJsonSource("", "{\"key1\": \"val1\"}"));
assertThat(merger.mergeToLeft(compare)).isEqualTo("{\n \"key1\" : \"val1\"\n}");
}
@Test
public void should_merge_with_ignored_keys() throws Exception {
JsonDiffer jsonDiffer = new JsonDiffer();
jsonDiffer.getLeftConfig().setIgnoreExtraFields(true);
JsonDiff compare = jsonDiffer.compare(
new StringJsonSource("", "{\"key1\": \"val1\", \"key2\": \"val2\"}"),
new StringJsonSource("", "{\"key1\": \"otherval\"}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{\n \"key1\" : \"val1\"\n}");
}
@Test
public void should_merge_added_sub_key_to_right() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{\"key1\": \"val1\", \"key2\": {}}"),
new StringJsonSource("", "{\"key1\": \"val1\", \"key2\": {\"key3\": \"val3\"}}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{\n \"key1\" : \"val1\",\n \"key2\" : { }\n}");
}
@Test
public void should_merge_added_sub_key_to_left() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{\"key1\": \"val1\", \"key2\": {}}"),
new StringJsonSource("", "{\"key1\": \"val1\", \"key2\": {\"key3\": \"val3\"}}"));
assertThat(merger.mergeToLeft(compare)).isEqualTo(
"{\n \"key1\" : \"val1\",\n \"key2\" : {\n \"key3\" : \"val3\"\n }\n}");
}
@Test
public void should_merge_added_in_array() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{\"key1\": []}"),
new StringJsonSource("", "{\"key1\": [{\"key2\": \"val2\"}]}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{\n \"key1\" : [ ]\n}");
}
@Test
public void should_merge_deleted_from_array_with_ignored_keys() throws Exception {
JsonDiffer jsonDiffer = new JsonDiffer();
jsonDiffer.getLeftConfig().setIgnoreExtraFields(true);
JsonDiff compare = jsonDiffer.compare(
new StringJsonSource("", "{\"key1\": [{\"key2\": \"val21\", \"key3\": \"val31\"}, {\"key2\": \"val22\", \"key3\": \"val32\"}]}"),
new StringJsonSource("", "{\"key1\": [{\"key2\": \"val22\"}]}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{\n" +
" \"key1\" : [ {\n" +
" \"key2\" : \"val21\",\n" +
" \"key3\" : \"val31\"\n" + // deducing that key3 is an ignored key from the other val is too error prone, we don't handle that
" }, {\n" +
" \"key2\" : \"val22\"\n" +
" } ]\n" +
"}");
}
@Test
public void should_merge_deleted_from_array() throws Exception {
JsonDiff compare = new JsonDiffer().compare(
new StringJsonSource("", "{\"key1\": [{\"key2\": \"val2\"}]}"),
new StringJsonSource("", "{\"key1\": []}"));
assertThat(merger.mergeToRight(compare)).isEqualTo("{\n" +
" \"key1\" : [ {\n" +
" \"key2\" : \"val2\"\n" +
" } ]\n" +
"}");
}
}