diff --git a/json-path/pom.xml b/json-path/pom.xml
index ca37447a50..c03385cf1d 100644
--- a/json-path/pom.xml
+++ b/json-path/pom.xml
@@ -14,13 +14,6 @@
${json-path.version}
-
-
- joda-time
- joda-time
- ${joda-time.version}
-
-
junit
@@ -44,13 +37,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+
+ 1.8
+
+
+
+
+
2.1.0
-
- 2.9.2
-
4.12
diff --git a/json-path/src/main/resources/intro_service.json b/json-path/src/main/resources/intro_service.json
new file mode 100644
index 0000000000..448492463a
--- /dev/null
+++ b/json-path/src/main/resources/intro_service.json
@@ -0,0 +1,61 @@
+[
+ {
+ "id": 1,
+ "title": "Casino Royale",
+ "director": "Martin Campbell",
+ "starring":
+ [
+ "Daniel Craig",
+ "Eva Green"
+ ],
+
+ "desc": "Twenty-first James Bond movie",
+ "release date": 1163466000000,
+ "box office": 594275385
+ },
+
+ {
+ "id": 2,
+ "title": "Quantum of Solace",
+ "director": "Marc Forster",
+ "starring":
+ [
+ "Daniel Craig",
+ "Olga Kurylenko"
+ ],
+
+ "desc": "Twenty-second James Bond movie",
+ "release date": 1225242000000,
+ "box office": 591692078
+ },
+
+ {
+ "id": 3,
+ "title": "Skyfall",
+ "director": "Sam Mendes",
+ "starring":
+ [
+ "Daniel Craig",
+ "Naomie Harris"
+ ],
+
+ "desc": "Twenty-third James Bond movie",
+ "release date": 1350954000000,
+ "box office": 1110526981
+ },
+
+ {
+ "id": 4,
+ "title": "Spectre",
+ "director": "Sam Mendes",
+ "starring":
+ [
+ "Daniel Craig",
+ "Lea Seydoux"
+ ],
+
+ "desc": "Twenty-fourth James Bond movie",
+ "release date": 1445821200000,
+ "box office": 879376275
+ }
+]
\ No newline at end of file
diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java
deleted file mode 100644
index 9f616e1a32..0000000000
--- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.baeldung.jsonpath.introduction;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Scanner;
-
-import org.joda.time.DateTime;
-import org.joda.time.Years;
-
-import com.jayway.jsonpath.Configuration;
-import com.jayway.jsonpath.DocumentContext;
-import com.jayway.jsonpath.JsonPath;
-import com.jayway.jsonpath.Option;
-
-public class ChangingPasswordTest {
-
- enum Result {
- SUCCESS, FAILURE
- }
-
- InputStream jsonValueInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json");
- String jsonDataSourceString = new Scanner(jsonValueInputStream, "UTF-8").useDelimiter("\\Z").next();
-
- @Test
- public void givenUseCase_whenChangingPasswordOfNonExistentUser_thenFail() {
- String failedRequestBody = "{\"username\":\"jayway\", \"new_password\":\"JsonPath\"}";
- Result result = changingPasswordHelper(failedRequestBody);
-
- assertEquals(Result.FAILURE, result);
- }
-
- @Test
- public void givenUseCase_whenChangingToUnusedPassword_thenSucceed() {
- String successfulRequestBody = "{\"username\":\"oracle\", \"new_password\":\"Java_SE_9\"}";
- Result result = changingPasswordHelper(successfulRequestBody);
-
- assertEquals(Result.SUCCESS, result);
- }
-
- @Test
- public void givenUseCase_whenChangingToRecentlyUsedPassword_thenFail() {
- String failedRequestBody = "{\"username\":\"oracle\", \"new_password\":\"Java_SE_7\"}";
- Result result = changingPasswordHelper(failedRequestBody);
-
- assertEquals(Result.FAILURE, result);
- }
-
- @Test
- public void givenUseCase_whenChangingToLongTimeAgoPassword_thenSucceed() {
- String successfulRequestBody = "{\"username\":\"sun\", \"new_password\":\"J2SE_5.0\"}";
- Result result = changingPasswordHelper(successfulRequestBody);
-
- assertEquals(Result.SUCCESS, result);
- }
-
- private Result changingPasswordHelper(String requestBody) {
- DocumentContext requestContext = JsonPath.parse(requestBody);
- String extractedUsername = requestContext.read("$['username']");
- String extractedPassword = requestContext.read("$['new_password']");
-
- DocumentContext jsonContext = JsonPath.parse(jsonDataSourceString);
- List dataSourceUsername = jsonContext.read("$[?(@.username == '" + extractedUsername + "')]");
- if (dataSourceUsername.size() == 0)
- return Result.FAILURE;
-
- Configuration pathConfiguration = Configuration.builder().options(Option.AS_PATH_LIST).build();
- List pathToCurrentUser = JsonPath.using(pathConfiguration).parse(jsonDataSourceString).read("$[?(@.username == '" + extractedUsername + "')]");
- List passwordCreatedTimeList = jsonContext.read(pathToCurrentUser.get(0) + "['password']['old'][?(@.value == '" + extractedPassword + "')]['created']");
- if (passwordCreatedTimeList.size() == 0)
- return Result.SUCCESS;
-
- Long[] passwordCreatedTimeArray = (passwordCreatedTimeList.toArray(new Long[passwordCreatedTimeList.size()]));
- Arrays.sort(passwordCreatedTimeArray);
- DateTime oldDate = new DateTime(passwordCreatedTimeArray[passwordCreatedTimeArray.length - 1]);
- if (Years.yearsBetween(oldDate, new DateTime()).getYears() <= 10)
- return Result.FAILURE;
-
- return Result.SUCCESS;
- }
-}
diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java
deleted file mode 100644
index 9f0be349c9..0000000000
--- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.baeldung.jsonpath.introduction;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.Scanner;
-
-import com.jayway.jsonpath.DocumentContext;
-import com.jayway.jsonpath.JsonPath;
-
-public class LoggingInTest {
-
- enum Result {
- SUCCESS, FAILURE
- }
-
- InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json");
- String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next();
-
- @Test
- public void givenUseCase_whenLoggingInWithCorrectUserData_thenSucceed() {
- String correctRequestBody = "{\"username\":\"sun\", \"password\":\"Java_SE_6\"}";
- Result result = loggingInHelper(correctRequestBody);
-
- assertEquals(Result.SUCCESS, result);
- }
-
- @Test
- public void givenUseCase_whenLoggingInWithIncorrectUserData_thenFail() {
- String incorrectRequestBody = "{\"username\":\"oracle\", \"password\":\"Java_SE_9\"}";
- Result result = loggingInHelper(incorrectRequestBody);
-
- assertEquals(Result.FAILURE, result);
- }
-
- private Result loggingInHelper(String requestBody) {
- DocumentContext requestContext = JsonPath.parse(requestBody);
- String extractedUsername = requestContext.read("$['username']");
- String extractedPassword = requestContext.read("$['password']");
- List list = JsonPath.parse(jsonDataSourceString).read("$[?(@.username == '" + extractedUsername + "' && @.password.current.value == '" + extractedPassword + "')]");
-
- if (list.size() == 0)
- return Result.FAILURE;
- return Result.SUCCESS;
- }
-
-}
diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java
deleted file mode 100644
index 04bb04528a..0000000000
--- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.baeldung.jsonpath.introduction;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.Scanner;
-
-import com.jayway.jsonpath.JsonPath;
-
-public class RegisteringAccountTest {
-
- enum Result {
- SUCCESS, FAILURE
- }
-
- InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json");
- String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next();
-
- @Test
- public void givenUseCase_whenRegisteringUnusedAccount_thenSucceed() {
- String unusedRequestBody = "{\"username\":\"jayway\", \"password\":\"JsonPath\"}";
- Result result = registeringNewAccountHelper(unusedRequestBody);
-
- assertEquals(Result.SUCCESS, result);
- }
-
- @Test
- public void givenUseCase_whenRegisteringUsedAccount_thenFail() {
- String usedRequestBody = "{\"username\":\"oracle\", \"password\":\"Java_SE_9\"}";
- Result result = registeringNewAccountHelper(usedRequestBody);
-
- assertEquals(Result.FAILURE, result);
- }
-
- private Result registeringNewAccountHelper(String requestBody) {
- List userDataSource = JsonPath.parse(jsonDataSourceString).read("$[*]['username']");
- String extractedUsername = JsonPath.parse(requestBody).read("$['username']");
-
- if (userDataSource.toString().contains(extractedUsername))
- return Result.FAILURE;
- return Result.SUCCESS;
- }
-}
diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java
new file mode 100644
index 0000000000..868acac8d0
--- /dev/null
+++ b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java
@@ -0,0 +1,91 @@
+package com.baeldung.jsonpath.introduction;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.hamcrest.CoreMatchers.containsString;
+
+import org.junit.Test;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+
+import com.jayway.jsonpath.Configuration;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
+
+public class ServiceTest {
+ InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_service.json");
+ String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next();
+
+ @Test
+ public void givenId_whenRequestingRecordData_thenSucceed() {
+ Object dataObject = JsonPath.parse(jsonString).read("$[?(@.id == 2)]");
+ String dataString = dataObject.toString();
+
+ assertThat(dataString, containsString("2"));
+ assertThat(dataString, containsString("Quantum of Solace"));
+ assertThat(dataString, containsString("Twenty-second James Bond movie"));
+ }
+
+ @Test
+ public void givenStarring_whenRequestingMovieTitle_thenSucceed() {
+ List