1+ package com .baeldung .jsonpath .introduction ;
2+
3+ import static org .junit .Assert .assertThat ;
4+ import static org .junit .Assert .assertEquals ;
5+ import static org .hamcrest .CoreMatchers .containsString ;
6+
7+ import org .junit .Test ;
8+
9+ import java .io .InputStream ;
10+ import java .util .ArrayList ;
11+ import java .util .Arrays ;
12+ import java .util .List ;
13+ import java .util .Map ;
14+ import java .util .Scanner ;
15+
16+ import com .jayway .jsonpath .Configuration ;
17+ import com .jayway .jsonpath .DocumentContext ;
18+ import com .jayway .jsonpath .JsonPath ;
19+ import com .jayway .jsonpath .Option ;
20+
21+ public class ServiceTest {
22+ InputStream jsonInputStream = this .getClass ().getClassLoader ().getResourceAsStream ("intro_service.json" );
23+ String jsonString = new Scanner (jsonInputStream , "UTF-8" ).useDelimiter ("\\ Z" ).next ();
24+
25+ @ Test
26+ public void givenId_whenRequestingRecordData_thenSucceed () {
27+ Object dataObject = JsonPath .parse (jsonString ).read ("$[?(@.id == 2)]" );
28+ String dataString = dataObject .toString ();
29+
30+ assertThat (dataString , containsString ("2" ));
31+ assertThat (dataString , containsString ("Quantum of Solace" ));
32+ assertThat (dataString , containsString ("Twenty-second James Bond movie" ));
33+ }
34+
35+ @ Test
36+ public void givenStarring_whenRequestingMovieTitle_thenSucceed () {
37+ List <Map <String , Object >> dataList = JsonPath .parse (jsonString ).read ("$[?('Eva Green' in @['starring'])]" );
38+ String title = (String ) dataList .get (0 ).get ("title" );
39+
40+ assertEquals ("Casino Royale" , title );
41+ }
42+
43+ @ Test
44+ public void givenCompleteStructure_whenCalculatingTotalRevenue_thenSucceed () {
45+ DocumentContext context = JsonPath .parse (jsonString );
46+ int length = context .read ("$.length()" );
47+ long revenue = 0 ;
48+ for (int i = 0 ; i < length ; i ++) {
49+ revenue += context .read ("$[" + i + "]['box office']" , Long .class );
50+ }
51+
52+ assertEquals (594275385L + 591692078L + 1110526981L + 879376275L , revenue );
53+ }
54+
55+ @ Test
56+ public void givenStructure_whenRequestingHighestRevenueMovieTitle_thenSucceed () {
57+ DocumentContext context = JsonPath .parse (jsonString );
58+ List <Object > revenueList = context .read ("$[*]['box office']" );
59+ Integer [] revenueArray = revenueList .toArray (new Integer [0 ]);
60+ Arrays .sort (revenueArray );
61+
62+ int highestRevenue = revenueArray [revenueArray .length - 1 ];
63+ Configuration pathConfiguration = Configuration .builder ().options (Option .AS_PATH_LIST ).build ();
64+ List <String > pathList = JsonPath .using (pathConfiguration ).parse (jsonString ).read ("$[?(@['box office'] == " + highestRevenue + ")]" );
65+
66+ Map <String , String > dataRecord = context .read (pathList .get (0 ));
67+ String title = dataRecord .get ("title" );
68+
69+ assertEquals ("Skyfall" , title );
70+ }
71+
72+ @ Test
73+ public void givenDirector_whenRequestingLatestMovieTitle_thenSucceed () {
74+ DocumentContext context = JsonPath .parse (jsonString );
75+ List <Map <String , Object >> dataList = context .read ("$[?(@.director == 'Sam Mendes')]" );
76+
77+ List <Object > dateList = new ArrayList <>();
78+ for (Map <String , Object > item : dataList ) {
79+ Object date = item .get ("release date" );
80+ dateList .add (date );
81+ }
82+ Long [] dateArray = dateList .toArray (new Long [0 ]);
83+ Arrays .sort (dateArray );
84+
85+ long latestTime = dateArray [dateArray .length - 1 ];
86+ List <Map <String , Object >> finalDataList = context .read ("$[?(@['director'] == 'Sam Mendes' && @['release date'] == " + latestTime + ")]" );
87+ String title = (String ) finalDataList .get (0 ).get ("title" );
88+
89+ assertEquals ("Spectre" , title );
90+ }
91+ }
0 commit comments