package com.jayway.jsonpath.old.internal;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
public class PredicatePathTokenTest {
private static final Object ARRAY = Configuration.defaultConfiguration().jsonProvider().parse(
"[" +
"{\n" +
" \"foo\" : \"foo-val-0\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-1\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-2\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-3\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-4\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-5\"\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-6\"\n" +
"}" +
"]");
private static Object ARRAY2 = Configuration.defaultConfiguration().jsonProvider().parse(
"[" +
"{\n" +
" \"foo\" : \"foo-val-0\",\n" +
" \"int\" : 0\n," +
" \"decimal\" : 0.0\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-1\",\n" +
" \"int\" : 1,\n" +
" \"decimal\" : 0.1\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-2\",\n" +
" \"int\" : 2,\n" +
" \"decimal\" : 0.2\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-3\",\n" +
" \"int\" : 3,\n" +
" \"decimal\" : 0.3\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-4\",\n" +
" \"int\" : 4,\n" +
" \"decimal\" : 0.4\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-5\",\n" +
" \"int\" : 5,\n" +
" \"decimal\" : 0.5\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-6\",\n" +
" \"int\" : 6,\n" +
" \"decimal\" : 0.6\n" +
"}," +
"{\n" +
" \"foo\" : \"foo-val-7\",\n" +
" \"int\" : 7,\n" +
" \"decimal\" : 0.7,\n" +
" \"bool\" : true\n" +
"}" +
"]");
@Test
public void a_filter_predicate_can_be_evaluated_on_string_criteria() {
List<Map> result = JsonPath.read (ARRAY, "$[?(@.foo == 'foo-val-1')]");
assertThat(result).containsOnly(singletonMap("foo", "foo-val-1"));
}
@Test
public void a_filter_predicate_can_be_evaluated_on_int_criteria() {
List<Map> result = JsonPath.read (ARRAY2, "$[?(@.int == 1)]");
assertThat(result).hasSize(1);
assertThat(result.get(0)).contains(entry("int", 1));
}
@Test
public void a_filter_predicate_can_be_evaluated_on_decimal_criteria() {
List<Map> result = JsonPath.read (ARRAY2, "$[?(@.decimal == 0.1)]");
assertThat(result).hasSize(1);
assertThat(result.get(0)).contains(entry("decimal", 0.1));
}
@Test
public void multiple_criteria_can_be_used() {
List<Map> result = JsonPath.read (ARRAY2, "$[?(@.decimal == 0.1 && @.int == 1)]");
assertThat(result).hasSize(1);
assertThat(result.get(0)).contains(entry("foo", "foo-val-1"));
}
@Test
public void field_existence_can_be_checked() {
List<Map> result = JsonPath.read (ARRAY2, "$[?(@.bool)]");
assertThat(result).hasSize(1);
assertThat(result.get(0)).contains(entry("foo", "foo-val-7"));
}
@Test
public void boolean_criteria_evaluates() {
List<Map> result = JsonPath.read (ARRAY2, "$[?(@.bool == true)]");
assertThat(result).hasSize(1);
assertThat(result.get(0)).contains(entry("foo", "foo-val-7"));
}
}