diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md
index c310463c26..d04a07fdc5 100644
--- a/mocks/jmockit/README.md
+++ b/mocks/jmockit/README.md
@@ -5,3 +5,4 @@
### Relevant Articles:
- [JMockit 101](http://www.baeldung.com/jmockit-101)
+- [A Guide to JMockit Expectations](http://www.baeldung.com/jmockit-expectations)
diff --git a/rest-assured-tutorial/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch b/rest-assured-tutorial/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch
deleted file mode 100644
index 627021fb96..0000000000
--- a/rest-assured-tutorial/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/rest-assured-tutorial/README.md b/rest-assured-tutorial/README.md
index 8b81626967..e69de29bb2 100644
--- a/rest-assured-tutorial/README.md
+++ b/rest-assured-tutorial/README.md
@@ -1,7 +0,0 @@
-=========
-
-## A Guide To REST-Assured
-
-
-### Relevant Articles:
-
diff --git a/rest-assured-tutorial/pom.xml b/rest-assured-tutorial/pom.xml
index 51b22fa0ff..0d5a73d075 100644
--- a/rest-assured-tutorial/pom.xml
+++ b/rest-assured-tutorial/pom.xml
@@ -1,143 +1,257 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.baeldung
- rest-assured
- 0.1.0-SNAPSHOT
-
+ rest-assured-tutorial
+ 1.0
rest-assured
-
-
-
- 3.5.1
- 2.19.1
-
- 1.10.19
- 4.12
- 2.1.7
- 1.3
- 1.2.5
- 2.2.6
- 3.0.0
-
-
- 1.7.13
- 1.1.3
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 8
+ 8
+
+
+
+
-
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1-b06
+
-
- org.slf4j
- slf4j-api
- ${org.slf4j.version}
-
-
- ch.qos.logback
- logback-classic
- ${logback.version}
-
-
-
- org.slf4j
- jcl-over-slf4j
- ${org.slf4j.version}
- runtime
-
-
- org.slf4j
- log4j-over-slf4j
- ${org.slf4j.version}
-
-
+
+
+ javax.servlet
+ servlet-api
+ 2.5
+
+
+
+
+ org.eclipse.jetty
+ jetty-security
+ 9.2.0.M1
+
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ 9.2.0.M1
+
+
+
+
+ org.eclipse.jetty
+ jetty-servlets
+ 9.2.0.M1
+
+
+
+
+ org.eclipse.jetty
+ jetty-io
+ 9.2.0.M1
+
+
+
+
+ org.eclipse.jetty
+ jetty-http
+ 9.2.0.M1
+
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-server
+ 9.2.0.M1
+
+
+
+
+ org.eclipse.jetty
+ jetty-util
+ 9.2.0.M1
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.21
+
+
+
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.5
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
+
+
+
+ com.github.fge
+ uri-template
+ 0.9
+
+
+
+
+ com.googlecode.libphonenumber
+ libphonenumber
+ 7.4.5
+
+
+
+ javax.mail
+ mail
+ 1.4.7
+
+
+
+ joda-time
+ joda-time
+ 2.9.4
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.8.0
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.0
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.8.0
+
+
+
+ com.github.fge
+ msg-simple
+ 1.1
+
+
+
+ com.github.fge
+ jackson-coreutils
+ 1.8
+
+
+
+
+
+ com.google.guava
+ guava
+ 18.0
+
+
+ com.github.fge
+ btf
+ 1.2
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.2
+
+
+
+ org.codehaus.groovy
+ groovy-all
+ 2.4.7
+
+
+
+ com.github.tomakehurst
+ wiremock
+ 2.1.7
+
io.rest-assured
rest-assured
- ${rest-assured.version}
+ 3.0.0
+ test
+
+
+ io.rest-assured
+ json-schema-validator
+ 3.0.0
+
+
+ com.github.fge
+ json-schema-validator
+ 2.2.6
+
+
+ com.github.fge
+ json-schema-core
+ 1.2.5
+
+
+ junit
+ junit
+ 4.3
test
-
- io.rest-assured
- json-schema-validator
- ${rest-assured.version}
-
-
-
- com.github.fge
- json-schema-validator
- ${json-schema-validator.version}
-
-
-
- com.github.fge
- json-schema-core
- ${json-schema-core.version}
-
-
-
-
-
- junit
- junit
- ${junit.version}
- test
-
-
-
- com.github.tomakehurst
- wiremock
- ${wiremock.version}
- test
-
-
org.hamcrest
hamcrest-all
- ${hamcrest-all.version}
- test
+ 1.3
-
-
- org.mockito
- mockito-core
- ${mockito.version}
- test
-
+
+
+ commons-collections
+ commons-collections
+ 3.2.2
+
-
-
- rest-assured
-
-
- src/main/resources
- true
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssured2Test.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssured2Test.java
new file mode 100644
index 0000000000..067756823b
--- /dev/null
+++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssured2Test.java
@@ -0,0 +1,55 @@
+package com.baeldung.restassured;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.hamcrest.Matchers.hasItems;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static io.restassured.RestAssured.get;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+public class RestAssured2Test {
+ private WireMockServer wireMockServer = new WireMockServer();
+
+ private static final String EVENTS_PATH = "/odds";
+ private static final String APPLICATION_JSON = "application/json";
+ private static final String ODDS = getJson();
+
+ @Before
+ public void before() throws Exception {
+ System.out.println("Setting up!");
+ wireMockServer.start();
+ configureFor("localhost", 8080);
+ stubFor(get(urlEqualTo(EVENTS_PATH)).willReturn(
+ aResponse().withStatus(200)
+ .withHeader("Content-Type", APPLICATION_JSON)
+ .withBody(ODDS)));
+ }
+
+ @Test
+ public void givenUrl_whenVerifiesOddPricesAccuratelyByStatus_thenCorrect() {
+ get("/odds").then().body("odds.findAll { it.status > 0 }.price",
+ hasItems(5.25f, 1.2f));
+ }
+
+ private static String getJson() {
+
+ return Util.inputStreamToString(new RestAssured2Test().getClass()
+ .getResourceAsStream("/odds.json"));
+
+ }
+
+ @After
+ public void after() throws Exception {
+ System.out.println("Running: tearDown");
+ wireMockServer.stop();
+ }
+
+}
diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java
index 6ac2d91ee0..e971efe3cb 100644
--- a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java
+++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java
@@ -1,206 +1,106 @@
package com.baeldung.restassured;
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static io.restassured.RestAssured.get;
+import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
+import static io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItems;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
import com.github.fge.jsonschema.SchemaVersion;
import com.github.fge.jsonschema.cfg.ValidationConfiguration;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
import com.github.tomakehurst.wiremock.WireMockServer;
-import com.github.tomakehurst.wiremock.client.WireMock;
-import io.restassured.module.jsv.JsonSchemaValidator;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static io.restassured.RestAssured.get;
-import static io.restassured.RestAssured.post;
-import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
-import static io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;
-import static org.hamcrest.Matchers.*;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.xml.HasXPath.hasXPath;
-
public class RestAssuredTest {
- @Test
- public void givenJsonResponse_whenKeyValuePairMatches_thenCorrect() {
- JsonSchemaFactory factory = JsonSchemaFactory
- .newBuilder()
- .setValidationConfiguration(
- ValidationConfiguration.newBuilder()
- .setDefaultVersion(SchemaVersion.DRAFTV3)
- .freeze()).freeze();
- JsonSchemaValidator.settings = settings().with()
- .jsonSchemaFactory(factory).and().with()
- .checkedValidation(false);
- }
-
- @Test
- public void givenJsonArrayOfSimilarObjects_whenHasGivenValuesForGivenKey_thenCorrect() {
-
- }
-
private WireMockServer wireMockServer = new WireMockServer();
private static final String EVENTS_PATH = "/events?id=390";
private static final String APPLICATION_JSON = "application/json";
+ private static final String GAME_ODDS = getEventJson();
- private static final String GAME_ODDS = "" +
- "{" +
- " \"id\": 390," +
- " \"data\": {" +
- " \"countryId\": 35," +
- " \"countryName\": \"Norway\"," +
- " \"leagueName\": \"Norway 3\"," +
- " \"status\": 0," +
- " \"sportName\": \"Soccer\"," +
- " \"time\": \"2016-06-12T12:00:00Z\"" +
- " }," +
- " \"odds\": [" +
- " {" +
- " \"price\": \"1.30\"," +
- " \"status\": 0," +
- " \"ck\": \"1\"," +
- " \"name\": \"1\"" +
- " }," +
- " {" +
- " \"price\": \"5.25\"," +
- " \"status\": 0," +
- " \"ck\": \"X\"," +
- " \"name\": \"X\"" +
- " }" +
- " ]" +
- "}";
-
-
- @Test
- public void givenUrl_whenSuccessOnGetsResponse_andJsonHasRequiredKV_thenCorrect() {
-
+ @Before
+ public void before() throws Exception {
+ System.out.println("Setting up!");
wireMockServer.start();
configureFor("localhost", 8080);
-
- stubFor(WireMock.get(urlEqualTo(EVENTS_PATH)).willReturn(aResponse()
- .withStatus(200)
- .withHeader("Content-Type", APPLICATION_JSON)
- .withBody(GAME_ODDS)));
-
- get("/events?id=390").then().statusCode(200).assertThat()
- .body("id", equalTo(390));
-
- wireMockServer.stop();
+ stubFor(get(urlEqualTo(EVENTS_PATH)).willReturn(
+ aResponse().withStatus(200)
+ .withHeader("Content-Type", APPLICATION_JSON)
+ .withBody(GAME_ODDS)));
}
+ @Test
+ public void givenUrl_whenCheckingFloatValuePasses_thenCorrect() {
+ get("/events?id=390").then().assertThat()
+ .body("odd.ck", equalTo(12.2f));
+ }
+
+ @Test
+ public void givenUrl_whenSuccessOnGetsResponse_andJsonHasRequiredKV_thenCorrect() {
+
+ get("/events?id=390").then().statusCode(200).assertThat()
+ .body("id", equalTo("390"));
+
+ }
@Test
public void givenUrl_whenJsonResponseHasArrayWithGivenValuesUnderKey_thenCorrect() {
-
- wireMockServer.start();
- configureFor("localhost", 8080);
-
- stubFor(WireMock.get(urlEqualTo(EVENTS_PATH)).willReturn(aResponse()
- .withStatus(200)
- .withHeader("Content-Type", APPLICATION_JSON)
- .withBody(GAME_ODDS)));
-
get("/events?id=390").then().assertThat()
- .body("odds.price", hasItems("1.30", "5.25"));
-
- wireMockServer.stop();
+ .body("odds.price", hasItems("1.30", "5.25", "2.70", "1.20"));
}
-
- @Test @Ignore
+ @Test
public void givenUrl_whenJsonResponseConformsToSchema_thenCorrect() {
+
get("/events?id=390").then().assertThat()
- .body(matchesJsonSchemaInClasspath("event_0.json"));
+ .body(matchesJsonSchemaInClasspath("event_0.json"));
}
- @Test @Ignore
+ @Test
public void givenUrl_whenValidatesResponseWithInstanceSettings_thenCorrect() {
JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory
.newBuilder()
.setValidationConfiguration(
ValidationConfiguration.newBuilder()
- .setDefaultVersion(SchemaVersion.DRAFTV4)
- .freeze()).freeze();
+ .setDefaultVersion(SchemaVersion.DRAFTV4)
+ .freeze()).freeze();
get("/events?id=390")
- .then()
- .assertThat()
- .body(matchesJsonSchemaInClasspath("event_0.json").using(
- jsonSchemaFactory));
+ .then()
+ .assertThat()
+ .body(matchesJsonSchemaInClasspath("event_0.json").using(
+ jsonSchemaFactory));
}
- @Test @Ignore
+ @Test
public void givenUrl_whenValidatesResponseWithStaticSettings_thenCorrect() {
get("/events?id=390")
- .then()
- .assertThat()
- .body(matchesJsonSchemaInClasspath("event_0.json").using(
- settings().with().checkedValidation(false)));
-
+ .then()
+ .assertThat()
+ .body(matchesJsonSchemaInClasspath("event_0.json").using(
+ settings().with().checkedValidation(false)));
}
- @Test @Ignore
- public void givenUrl_whenCheckingFloatValuePasses_thenCorrect() {
- get("/odd").then().assertThat().body("odd.ck", equalTo(12.2f));
+ @After
+ public void after() throws Exception {
+ System.out.println("Running: tearDown");
+ wireMockServer.stop();
}
- @Test @Ignore
- public void givenUrl_whenXmlResponseValueTestsEqual_thenCorrect() {
- post("/employees").then().assertThat()
- .body("employees.employee.first-name", equalTo("Jane"));
- }
-
- @Test @Ignore
- public void givenUrl_whenMultipleXmlValuesTestEqual_thenCorrect() {
- post("/employees").then().assertThat()
- .body("employees.employee.first-name", equalTo("Jane"))
- .body("employees.employee.last-name", equalTo("Daisy"))
- .body("employees.employee.sex", equalTo("f"));
- }
-
- @Test @Ignore
- public void givenUrl_whenMultipleXmlValuesTestEqualInShortHand_thenCorrect() {
- post("/employees")
- .then()
- .assertThat()
- .body("employees.employee.first-name", equalTo("Jane"),
- "employees.employee.last-name", equalTo("Daisy"),
- "employees.employee.sex", equalTo("f"));
- }
-
- @Test @Ignore
- public void givenUrl_whenValidatesXmlUsingXpath_thenCorrect() {
- post("/employees")
- .then()
- .assertThat()
- .body(hasXPath("/employees/employee/first-name",
- containsString("Ja")));
-
- }
-
- @Test @Ignore
- public void givenUrl_whenValidatesXmlUsingXpath2_thenCorrect() {
- post("/employees")
- .then()
- .assertThat()
- .body(hasXPath("/employees/employee/first-name[text()='Jane']"));
-
- }
-
- @Test @Ignore
- public void givenUrl_whenVerifiesScienceTeacherFromXml_thenCorrect() {
- get("/teachers")
- .then()
- .body("teachers.teacher.find { it.@department == 'science' }.subject",
- hasItems("math", "physics"));
- }
-
- @Test @Ignore
- public void givenUrl_whenVerifiesOddPricesAccuratelyByStatus_thenCorrect() {
- get("/odds").then().body("odds.findAll { it.status > 0 }.price",
- hasItems(1.30f, 1.20f));
+ private static String getEventJson() {
+ return Util.inputStreamToString(RestAssuredTest.class
+ .getResourceAsStream("/event_0.json"));
}
}
diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXML2Test.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXML2Test.java
new file mode 100644
index 0000000000..597280c7c0
--- /dev/null
+++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXML2Test.java
@@ -0,0 +1,54 @@
+package com.baeldung.restassured;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.hamcrest.Matchers.hasItems;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static io.restassured.RestAssured.get;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+public class RestAssuredXML2Test {
+ private WireMockServer wireMockServer = new WireMockServer();
+
+ private static final String EVENTS_PATH = "/teachers";
+ private static final String APPLICATION_XML = "application/xml";
+ private static final String TEACHERS = getXml();
+
+ @Before
+ public void before() throws Exception {
+ System.out.println("Setting up!");
+ wireMockServer.start();
+ configureFor("localhost", 8080);
+ stubFor(get(urlEqualTo(EVENTS_PATH)).willReturn(
+ aResponse().withStatus(200)
+ .withHeader("Content-Type", APPLICATION_XML)
+ .withBody(TEACHERS)));
+ }
+ @Test
+ public void givenUrl_whenVerifiesScienceTeacherFromXml_thenCorrect() {
+ get("/teachers")
+ .then()
+ .body("teachers.teacher.find { it.@department == 'science' }.subject",
+ hasItems("math", "physics"));
+ }
+ private static String getXml() {
+
+ return Util
+ .inputStreamToString(new RestAssuredXML2Test().getClass().getResourceAsStream("/teachers.xml"));
+
+}
+ @After
+public void after() throws Exception {
+ System.out.println("Running: tearDown");
+ wireMockServer.stop();
+}
+
+}
diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXMLTest.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXMLTest.java
new file mode 100644
index 0000000000..315dc76169
--- /dev/null
+++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredXMLTest.java
@@ -0,0 +1,99 @@
+package com.baeldung.restassured;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.post;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static io.restassured.RestAssured.post;
+import static io.restassured.RestAssured.get;
+import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
+import static io.restassured.module.jsv.JsonSchemaValidatorSettings.settings;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.xml.HasXPath.hasXPath;
+
+import java.io.FileNotFoundException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.github.fge.jsonschema.SchemaVersion;
+import com.github.fge.jsonschema.cfg.ValidationConfiguration;
+import com.github.fge.jsonschema.main.JsonSchemaFactory;
+import com.github.tomakehurst.wiremock.WireMockServer;
+public class RestAssuredXMLTest {
+ private WireMockServer wireMockServer = new WireMockServer();
+ private static final String EVENTS_PATH = "/employees";
+ private static final String APPLICATION_XML = "application/xml";
+ private static final String EMPLOYEES = getXml();
+
+ @Before
+ public void before() throws Exception {
+ System.out.println("Setting up!");
+ wireMockServer.start();
+ configureFor("localhost", 8080);
+ stubFor(post(urlEqualTo(EVENTS_PATH)).willReturn(
+ aResponse().withStatus(200)
+ .withHeader("Content-Type", APPLICATION_XML)
+ .withBody(EMPLOYEES)));
+ }
+ @Test
+ public void givenUrl_whenXmlResponseValueTestsEqual_thenCorrect() {
+ post("/employees").then().assertThat()
+ .body("employees.employee.first-name", equalTo("Jane"));
+ }
+
+ @Test
+ public void givenUrl_whenMultipleXmlValuesTestEqual_thenCorrect() {
+ post("/employees").then().assertThat()
+ .body("employees.employee.first-name", equalTo("Jane"))
+ .body("employees.employee.last-name", equalTo("Daisy"))
+ .body("employees.employee.sex", equalTo("f"));
+ }
+
+ @Test
+ public void givenUrl_whenMultipleXmlValuesTestEqualInShortHand_thenCorrect() {
+ post("/employees")
+ .then()
+ .assertThat()
+ .body("employees.employee.first-name", equalTo("Jane"),
+ "employees.employee.last-name", equalTo("Daisy"),
+ "employees.employee.sex", equalTo("f"));
+ }
+
+ @Test
+ public void givenUrl_whenValidatesXmlUsingXpath_thenCorrect() {
+ post("/employees")
+ .then()
+ .assertThat()
+ .body(hasXPath("/employees/employee/first-name",
+ containsString("Ja")));
+
+ }
+
+ @Test
+ public void givenUrl_whenValidatesXmlUsingXpath2_thenCorrect() {
+ post("/employees")
+ .then()
+ .assertThat()
+ .body(hasXPath("/employees/employee/first-name[text()='Jane']"));
+
+ }
+
+
+ private static String getXml() {
+
+ return Util
+ .inputStreamToString(new RestAssuredXMLTest().getClass().getResourceAsStream("/employees.xml"));
+
+}
+ @After
+public void after() throws Exception {
+ System.out.println("Running: tearDown");
+ wireMockServer.stop();
+}
+}
diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/Util.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/Util.java
new file mode 100644
index 0000000000..c75c52eb34
--- /dev/null
+++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/Util.java
@@ -0,0 +1,36 @@
+package com.baeldung.restassured;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class Util {
+ public static String inputStreamToString(InputStream is) {
+ BufferedReader br = null;
+ StringBuilder sb = new StringBuilder();
+
+ String line;
+ try {
+
+ br = new BufferedReader(new InputStreamReader(is));
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (br != null) {
+ try {
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return sb.toString();
+
+ }
+}
diff --git a/rest-assured-tutorial/src/test/resources/.gitignore b/rest-assured-tutorial/src/test/resources/.gitignore
deleted file mode 100644
index 83c05e60c8..0000000000
--- a/rest-assured-tutorial/src/test/resources/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.class
-
-#folders#
-/target
-/neoDb*
-/data
-/src/main/webapp/WEB-INF/classes
-*/META-INF/*
-
-# Packaged files #
-*.jar
-*.war
-*.ear
\ No newline at end of file
diff --git a/rest-assured-tutorial/src/test/resources/employees.xml b/rest-assured-tutorial/src/test/resources/employees.xml
index 64e382976d..388b422210 100644
--- a/rest-assured-tutorial/src/test/resources/employees.xml
+++ b/rest-assured-tutorial/src/test/resources/employees.xml
@@ -4,19 +4,4 @@
Daisy
f
-
- John
- Doe
- m
-
-
- Billy
- Getty
- m
-
-
- Hill
- Clinton
- f
-
\ No newline at end of file
diff --git a/rest-assured-tutorial/src/test/resources/event0.json b/rest-assured-tutorial/src/test/resources/event_0.json
similarity index 71%
rename from rest-assured-tutorial/src/test/resources/event0.json
rename to rest-assured-tutorial/src/test/resources/event_0.json
index 77e26c347e..a6e45239ec 100644
--- a/rest-assured-tutorial/src/test/resources/event0.json
+++ b/rest-assured-tutorial/src/test/resources/event_0.json
@@ -1,5 +1,11 @@
{
"id": "390",
+ "odd": {
+ "price": "1.20",
+ "status": 2,
+ "ck": 12.2,
+ "name": "2"
+ },
"data": {
"countryId": 35,
"countryName": "Norway",
@@ -9,25 +15,25 @@
"time": "2016-06-12T12:00:00Z"
},
"odds": [{
- "price": 1.30,
+ "price": "1.30",
"status": 0,
"ck": 12.2,
"name": "1"
},
{
- "price": 5.25,
+ "price":"5.25",
"status": 1,
"ck": 13.1,
"name": "X"
},
{
- "price": 2.70,
+ "price": "2.70",
"status": 0,
"ck": 12.2,
"name": "0"
},
{
- "price": 1.20,
+ "price": "1.20",
"status": 2,
"ck": 13.1,
"name": "2"
diff --git a/rest-assured-tutorial/src/test/resources/log4j.properties b/rest-assured-tutorial/src/test/resources/log4j.properties
new file mode 100644
index 0000000000..d3c6b9e783
--- /dev/null
+++ b/rest-assured-tutorial/src/test/resources/log4j.properties
@@ -0,0 +1,16 @@
+## Logger configure
+datestamp=yyyy-MM-dd HH:mm:ss
+log4j.rootLogger=TRACE, file, console
+
+log4j.appender.file=org.apache.log4j.RollingFileAppender
+log4j.appender.file.maxFileSize=1GB
+log4j.appender.file.maxBackupIndex=5
+log4j.appender.file.File=log/rest-assured.log
+log4j.appender.file.threshold=TRACE
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{${datestamp}} %5p: [%c] - %m%n
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.Threshold=INFO
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{${datestamp}} %5p\: [%c] - %m%n
\ No newline at end of file
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/SecurityWithoutCsrfConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/SecurityWithoutCsrfConfig.java
index fcb28f6ae2..aeb2428326 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/spring/SecurityWithoutCsrfConfig.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/SecurityWithoutCsrfConfig.java
@@ -44,8 +44,9 @@ public class SecurityWithoutCsrfConfig extends WebSecurityConfigurerAdapter {
http
.csrf().disable()
.authorizeRequests()
- .antMatchers("/admin/*").hasAnyRole("ROLE_ADMIN")
- .anyRequest().authenticated()
+ .antMatchers("/auth/admin/*").hasRole("ADMIN")
+ .antMatchers("/auth/*").hasAnyRole("ADMIN","USER")
+ .antMatchers("/*").permitAll()
.and()
.httpBasic()
.and()
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java
index 143e52d94e..3e5d6435b3 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java
@@ -14,24 +14,25 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
- public WebConfig() {
- super();
- }
+ public WebConfig() {
+ super();
+ }
- @Bean
- public ViewResolver viewResolver() {
- final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
- viewResolver.setPrefix("/WEB-INF/view/");
- viewResolver.setSuffix(".jsp");
- return viewResolver;
- }
+ @Bean
+ public ViewResolver viewResolver() {
+ final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
+ viewResolver.setPrefix("/WEB-INF/view/");
+ viewResolver.setSuffix(".jsp");
+ return viewResolver;
+ }
- // API
- @Override
- public void addViewControllers(final ViewControllerRegistry registry) {
- super.addViewControllers(registry);
- registry.addViewController("/graph.html");
- registry.addViewController("/csrfHome.html");
- }
+ // API
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ super.addViewControllers(registry);
+ registry.addViewController("/graph.html");
+ registry.addViewController("/csrfHome.html");
+ registry.addViewController("/homepage.html");
+ }
}
\ No newline at end of file
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/BankController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/BankController.java
index 1a4322c611..64a29f20d3 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/BankController.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/BankController.java
@@ -12,21 +12,22 @@ import org.springframework.web.bind.annotation.ResponseStatus;
// to test csrf
@Controller
+@RequestMapping(value = "/auth/")
public class BankController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
+ private final Logger logger = LoggerFactory.getLogger(getClass());
- @RequestMapping(value = "/transfer", method = RequestMethod.GET)
- @ResponseBody
- public int transfer(@RequestParam("accountNo") final int accountNo, @RequestParam("amount") final int amount) {
- logger.info("Transfer to {}", accountNo);
- return amount;
- }
+ @RequestMapping(value = "/transfer", method = RequestMethod.GET)
+ @ResponseBody
+ public int transfer(@RequestParam("accountNo") final int accountNo, @RequestParam("amount") final int amount) {
+ logger.info("Transfer to {}", accountNo);
+ return amount;
+ }
- // write - just for test
- @RequestMapping(value = "/transfer", method = RequestMethod.POST)
- @ResponseStatus(HttpStatus.OK)
- public void create(@RequestParam("accountNo") final int accountNo, @RequestParam("amount") final int amount) {
- logger.info("Transfer to {}", accountNo);
+ // write - just for test
+ @RequestMapping(value = "/transfer", method = RequestMethod.POST)
+ @ResponseStatus(HttpStatus.OK)
+ public void create(@RequestParam("accountNo") final int accountNo, @RequestParam("amount") final int amount) {
+ logger.info("Transfer to {}", accountNo);
- }
+ }
}
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java
index 20307447b2..1e00d6350b 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/FooController.java
@@ -29,93 +29,93 @@ import org.springframework.web.util.UriComponentsBuilder;
import com.google.common.base.Preconditions;
@Controller
-@RequestMapping(value = "/foos")
+@RequestMapping(value = "/auth/foos")
public class FooController {
- @Autowired
- private ApplicationEventPublisher eventPublisher;
+ @Autowired
+ private ApplicationEventPublisher eventPublisher;
- @Autowired
- private IFooService service;
+ @Autowired
+ private IFooService service;
- public FooController() {
- super();
- }
+ public FooController() {
+ super();
+ }
- // API
+ // API
- @RequestMapping(method = RequestMethod.GET, value = "/count")
- @ResponseBody
- @ResponseStatus(value = HttpStatus.OK)
- public long count() {
- return 2l;
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/count")
+ @ResponseBody
+ @ResponseStatus(value = HttpStatus.OK)
+ public long count() {
+ return 2l;
+ }
- // read - one
+ // read - one
- @RequestMapping(value = "/{id}", method = RequestMethod.GET)
- @ResponseBody
- public Foo findById(@PathVariable("id") final Long id, final HttpServletResponse response) {
- final Foo resourceById = RestPreconditions.checkFound(service.findOne(id));
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+ @ResponseBody
+ public Foo findById(@PathVariable("id") final Long id, final HttpServletResponse response) {
+ final Foo resourceById = RestPreconditions.checkFound(service.findOne(id));
- eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
- return resourceById;
- }
+ eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
+ return resourceById;
+ }
- // read - all
+ // read - all
- @RequestMapping(method = RequestMethod.GET)
- @ResponseBody
- public List findAll() {
- return service.findAll();
- }
+ @RequestMapping(method = RequestMethod.GET)
+ @ResponseBody
+ public List findAll() {
+ return service.findAll();
+ }
- @RequestMapping(params = { "page", "size" }, method = RequestMethod.GET)
- @ResponseBody
- public List findPaginated(@RequestParam("page") final int page, @RequestParam("size") final int size, final UriComponentsBuilder uriBuilder, final HttpServletResponse response) {
- final Page resultPage = service.findPaginated(page, size);
- if (page > resultPage.getTotalPages()) {
- throw new MyResourceNotFoundException();
- }
- eventPublisher.publishEvent(new PaginatedResultsRetrievedEvent(Foo.class, uriBuilder, response, page, resultPage.getTotalPages(), size));
+ @RequestMapping(params = { "page", "size" }, method = RequestMethod.GET)
+ @ResponseBody
+ public List findPaginated(@RequestParam("page") final int page, @RequestParam("size") final int size, final UriComponentsBuilder uriBuilder, final HttpServletResponse response) {
+ final Page resultPage = service.findPaginated(page, size);
+ if (page > resultPage.getTotalPages()) {
+ throw new MyResourceNotFoundException();
+ }
+ eventPublisher.publishEvent(new PaginatedResultsRetrievedEvent(Foo.class, uriBuilder, response, page, resultPage.getTotalPages(), size));
- return resultPage.getContent();
- }
+ return resultPage.getContent();
+ }
- // write
+ // write
- @RequestMapping(method = RequestMethod.POST)
- @ResponseStatus(HttpStatus.CREATED)
- @ResponseBody
- public Foo create(@RequestBody final Foo resource, final HttpServletResponse response) {
- Preconditions.checkNotNull(resource);
- final Foo foo = service.create(resource);
- final Long idOfCreatedResource = foo.getId();
+ @RequestMapping(method = RequestMethod.POST)
+ @ResponseStatus(HttpStatus.CREATED)
+ @ResponseBody
+ public Foo create(@RequestBody final Foo resource, final HttpServletResponse response) {
+ Preconditions.checkNotNull(resource);
+ final Foo foo = service.create(resource);
+ final Long idOfCreatedResource = foo.getId();
- eventPublisher.publishEvent(new ResourceCreatedEvent(this, response, idOfCreatedResource));
+ eventPublisher.publishEvent(new ResourceCreatedEvent(this, response, idOfCreatedResource));
- return foo;
- }
+ return foo;
+ }
- @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
- @ResponseStatus(HttpStatus.OK)
- public void update(@PathVariable("id") final Long id, @RequestBody final Foo resource) {
- Preconditions.checkNotNull(resource);
- RestPreconditions.checkFound(service.findOne(resource.getId()));
- service.update(resource);
- }
+ @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+ @ResponseStatus(HttpStatus.OK)
+ public void update(@PathVariable("id") final Long id, @RequestBody final Foo resource) {
+ Preconditions.checkNotNull(resource);
+ RestPreconditions.checkFound(service.findOne(resource.getId()));
+ service.update(resource);
+ }
- @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
- @ResponseStatus(HttpStatus.OK)
- public void delete(@PathVariable("id") final Long id) {
- service.deleteById(id);
- }
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+ @ResponseStatus(HttpStatus.OK)
+ public void delete(@PathVariable("id") final Long id) {
+ service.deleteById(id);
+ }
- @RequestMapping(method = RequestMethod.HEAD)
- @ResponseStatus(HttpStatus.OK)
- public void head(final HttpServletResponse resp) {
- resp.setContentType(MediaType.APPLICATION_JSON_VALUE);
- resp.setHeader("bar", "baz");
- }
+ @RequestMapping(method = RequestMethod.HEAD)
+ @ResponseStatus(HttpStatus.OK)
+ public void head(final HttpServletResponse resp) {
+ resp.setContentType(MediaType.APPLICATION_JSON_VALUE);
+ resp.setHeader("bar", "baz");
+ }
}
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java
new file mode 100644
index 0000000000..3e6a6627df
--- /dev/null
+++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/HomeController.java
@@ -0,0 +1,14 @@
+package org.baeldung.web.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping(value = "/")
+public class HomeController {
+
+ public String index() {
+ return "homepage";
+ }
+
+}
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/RootController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/RootController.java
index e83b8cf5ba..bcf0ceb5e6 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/RootController.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/RootController.java
@@ -20,65 +20,66 @@ import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriTemplate;
@Controller
+@RequestMapping(value = "/auth/")
public class RootController {
- @Autowired
- private IMetricService metricService;
+ @Autowired
+ private IMetricService metricService;
- @Autowired
- private IActuatorMetricService actMetricService;
+ @Autowired
+ private IActuatorMetricService actMetricService;
- public RootController() {
- super();
- }
+ public RootController() {
+ super();
+ }
- // API
+ // API
- // discover
+ // discover
- @RequestMapping(value = "admin", method = RequestMethod.GET)
- @ResponseStatus(value = HttpStatus.NO_CONTENT)
- public void adminRoot(final HttpServletRequest request, final HttpServletResponse response) {
- final String rootUri = request.getRequestURL().toString();
+ @RequestMapping(value = "admin", method = RequestMethod.GET)
+ @ResponseStatus(value = HttpStatus.NO_CONTENT)
+ public void adminRoot(final HttpServletRequest request, final HttpServletResponse response) {
+ final String rootUri = request.getRequestURL().toString();
- final URI fooUri = new UriTemplate("{rootUri}/{resource}").expand(rootUri, "foo");
- final String linkToFoo = LinkUtil.createLinkHeader(fooUri.toASCIIString(), "collection");
- response.addHeader("Link", linkToFoo);
- }
+ final URI fooUri = new UriTemplate("{rootUri}/{resource}").expand(rootUri, "foo");
+ final String linkToFoo = LinkUtil.createLinkHeader(fooUri.toASCIIString(), "collection");
+ response.addHeader("Link", linkToFoo);
+ }
- @RequestMapping(value = "/metric", method = RequestMethod.GET)
- @ResponseBody
- public Map getMetric() {
- return metricService.getFullMetric();
- }
+ @RequestMapping(value = "/metric", method = RequestMethod.GET)
+ @ResponseBody
+ public Map getMetric() {
+ return metricService.getFullMetric();
+ }
- @PreAuthorize("hasRole('ROLE_ADMIN')")
- @RequestMapping(value = "/status-metric", method = RequestMethod.GET)
- @ResponseBody
- public Map getStatusMetric() {
- return metricService.getStatusMetric();
- }
+ @PreAuthorize("hasRole('ROLE_ADMIN')")
+ @RequestMapping(value = "/status-metric", method = RequestMethod.GET)
+ @ResponseBody
+ public Map getStatusMetric() {
+ return metricService.getStatusMetric();
+ }
- @RequestMapping(value = "/metric-graph", method = RequestMethod.GET)
- @ResponseBody
- public Object[][] drawMetric() {
- final Object[][] result = metricService.getGraphData();
- for (int i = 1; i < result[0].length; i++) {
- result[0][i] = result[0][i].toString();
- }
- return result;
- }
+ @RequestMapping(value = "/metric-graph", method = RequestMethod.GET)
+ @ResponseBody
+ public Object[][] drawMetric() {
+ final Object[][] result = metricService.getGraphData();
+ for (int i = 1; i < result[0].length; i++) {
+ result[0][i] = result[0][i].toString();
+ }
+ return result;
+ }
- @RequestMapping(value = "/admin/x", method = RequestMethod.GET)
- @ResponseBody
- public String sampleAdminPage() {
- return "Hello";
- }
+ @RequestMapping(value = "/admin/x", method = RequestMethod.GET)
+ @ResponseBody
+ public String sampleAdminPage() {
+ return "Hello";
+ }
- @RequestMapping(value = "/my-error-page", method = RequestMethod.GET)
- @ResponseBody
- public String sampleErrorPage() {
- return "Error Occurred";
- }
+ @RequestMapping(value = "/my-error-page", method = RequestMethod.GET)
+ @ResponseBody
+ public String sampleErrorPage() {
+ return "Error Occurred";
+ }
}
diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java
index 7c28ed8e80..2228287f4d 100644
--- a/spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java
+++ b/spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java
@@ -37,96 +37,97 @@ import cz.jirutka.rsql.parser.ast.Node;
//@EnableSpringDataWebSupport
@Controller
+@RequestMapping(value = "/auth/")
public class UserController {
- @Autowired
- private IUserDAO service;
+ @Autowired
+ private IUserDAO service;
- @Autowired
- private UserRepository dao;
+ @Autowired
+ private UserRepository dao;
- @Autowired
- private MyUserRepository myUserRepository;
+ @Autowired
+ private MyUserRepository myUserRepository;
- public UserController() {
- super();
- }
+ public UserController() {
+ super();
+ }
- // API - READ
+ // API - READ
- @RequestMapping(method = RequestMethod.GET, value = "/users")
- @ResponseBody
- public List findAll(@RequestParam(value = "search", required = false) final String search) {
- final List params = new ArrayList();
- if (search != null) {
- final Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
- final Matcher matcher = pattern.matcher(search + ",");
- while (matcher.find()) {
- params.add(new SearchCriteria(matcher.group(1), matcher.group(2), matcher.group(3)));
- }
- }
- return service.searchUser(params);
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/users")
+ @ResponseBody
+ public List findAll(@RequestParam(value = "search", required = false) final String search) {
+ final List params = new ArrayList();
+ if (search != null) {
+ final Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
+ final Matcher matcher = pattern.matcher(search + ",");
+ while (matcher.find()) {
+ params.add(new SearchCriteria(matcher.group(1), matcher.group(2), matcher.group(3)));
+ }
+ }
+ return service.searchUser(params);
+ }
- @RequestMapping(method = RequestMethod.GET, value = "/users/spec")
- @ResponseBody
- public List findAllBySpecification(@RequestParam(value = "search") final String search) {
- final UserSpecificationsBuilder builder = new UserSpecificationsBuilder();
- final String operationSetExper = Joiner.on("|").join(SearchOperation.SIMPLE_OPERATION_SET);
- final Pattern pattern = Pattern.compile("(\\w+?)(" + operationSetExper + ")(\\p{Punct}?)(\\w+?)(\\p{Punct}?),");
- final Matcher matcher = pattern.matcher(search + ",");
- while (matcher.find()) {
- builder.with(matcher.group(1), matcher.group(2), matcher.group(4), matcher.group(3), matcher.group(5));
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/users/spec")
+ @ResponseBody
+ public List findAllBySpecification(@RequestParam(value = "search") final String search) {
+ final UserSpecificationsBuilder builder = new UserSpecificationsBuilder();
+ final String operationSetExper = Joiner.on("|").join(SearchOperation.SIMPLE_OPERATION_SET);
+ final Pattern pattern = Pattern.compile("(\\w+?)(" + operationSetExper + ")(\\p{Punct}?)(\\w+?)(\\p{Punct}?),");
+ final Matcher matcher = pattern.matcher(search + ",");
+ while (matcher.find()) {
+ builder.with(matcher.group(1), matcher.group(2), matcher.group(4), matcher.group(3), matcher.group(5));
+ }
- final Specification spec = builder.build();
- return dao.findAll(spec);
- }
+ final Specification spec = builder.build();
+ return dao.findAll(spec);
+ }
- @RequestMapping(method = RequestMethod.GET, value = "/myusers")
- @ResponseBody
- public Iterable findAllByQuerydsl(@RequestParam(value = "search") final String search) {
- final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder();
- if (search != null) {
- final Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
- final Matcher matcher = pattern.matcher(search + ",");
- while (matcher.find()) {
- builder.with(matcher.group(1), matcher.group(2), matcher.group(3));
- }
- }
- final BooleanExpression exp = builder.build();
- return myUserRepository.findAll(exp);
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/myusers")
+ @ResponseBody
+ public Iterable findAllByQuerydsl(@RequestParam(value = "search") final String search) {
+ final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder();
+ if (search != null) {
+ final Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
+ final Matcher matcher = pattern.matcher(search + ",");
+ while (matcher.find()) {
+ builder.with(matcher.group(1), matcher.group(2), matcher.group(3));
+ }
+ }
+ final BooleanExpression exp = builder.build();
+ return myUserRepository.findAll(exp);
+ }
- @RequestMapping(method = RequestMethod.GET, value = "/users/rsql")
- @ResponseBody
- public List findAllByRsql(@RequestParam(value = "search") final String search) {
- final Node rootNode = new RSQLParser().parse(search);
- final Specification spec = rootNode.accept(new CustomRsqlVisitor());
- return dao.findAll(spec);
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/users/rsql")
+ @ResponseBody
+ public List findAllByRsql(@RequestParam(value = "search") final String search) {
+ final Node rootNode = new RSQLParser().parse(search);
+ final Specification spec = rootNode.accept(new CustomRsqlVisitor());
+ return dao.findAll(spec);
+ }
- @RequestMapping(method = RequestMethod.GET, value = "/api/myusers")
- @ResponseBody
- public Iterable findAllByWebQuerydsl(@QuerydslPredicate(root = MyUser.class) final Predicate predicate) {
- return myUserRepository.findAll(predicate);
- }
+ @RequestMapping(method = RequestMethod.GET, value = "/api/myusers")
+ @ResponseBody
+ public Iterable findAllByWebQuerydsl(@QuerydslPredicate(root = MyUser.class) final Predicate predicate) {
+ return myUserRepository.findAll(predicate);
+ }
- // API - WRITE
+ // API - WRITE
- @RequestMapping(method = RequestMethod.POST, value = "/users")
- @ResponseStatus(HttpStatus.CREATED)
- public void create(@RequestBody final User resource) {
- Preconditions.checkNotNull(resource);
- dao.save(resource);
- }
+ @RequestMapping(method = RequestMethod.POST, value = "/users")
+ @ResponseStatus(HttpStatus.CREATED)
+ public void create(@RequestBody final User resource) {
+ Preconditions.checkNotNull(resource);
+ dao.save(resource);
+ }
- @RequestMapping(method = RequestMethod.POST, value = "/myusers")
- @ResponseStatus(HttpStatus.CREATED)
- public void addMyUser(@RequestBody final MyUser resource) {
- Preconditions.checkNotNull(resource);
- myUserRepository.save(resource);
+ @RequestMapping(method = RequestMethod.POST, value = "/myusers")
+ @ResponseStatus(HttpStatus.CREATED)
+ public void addMyUser(@RequestBody final MyUser resource) {
+ Preconditions.checkNotNull(resource);
+ myUserRepository.save(resource);
- }
+ }
}
diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java
index 3af91b82a2..35b840a649 100644
--- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java
+++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java
@@ -23,26 +23,30 @@ import com.fasterxml.jackson.databind.ObjectMapper;
@WebAppConfiguration
public class CsrfAbstractIntegrationTest {
- @Autowired
- private WebApplicationContext context;
+ @Autowired
+ private WebApplicationContext context;
- @Autowired
- private Filter springSecurityFilterChain;
+ @Autowired
+ private Filter springSecurityFilterChain;
- protected MockMvc mvc;
+ protected MockMvc mvc;
- //
+ //
- @Before
- public void setup() {
- mvc = MockMvcBuilders.webAppContextSetup(context).addFilters(springSecurityFilterChain).build();
- }
+ @Before
+ public void setup() {
+ mvc = MockMvcBuilders.webAppContextSetup(context).addFilters(springSecurityFilterChain).build();
+ }
- protected RequestPostProcessor testUser() {
- return user("user").password("userPass").roles("USER");
- }
+ protected RequestPostProcessor testUser() {
+ return user("user").password("userPass").roles("USER");
+ }
- protected String createFoo() throws JsonProcessingException {
- return new ObjectMapper().writeValueAsString(new Foo(randomAlphabetic(6)));
- }
+ protected RequestPostProcessor testAdmin() {
+ return user("admin").password("adminPass").roles("USER", "ADMIN");
+ }
+
+ protected String createFoo() throws JsonProcessingException {
+ return new ObjectMapper().writeValueAsString(new Foo(randomAlphabetic(6)));
+ }
}
diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfDisabledIntegrationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfDisabledIntegrationTest.java
index 50b8ae3b44..1f5cf078f3 100644
--- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfDisabledIntegrationTest.java
+++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfDisabledIntegrationTest.java
@@ -1,5 +1,6 @@
package org.baeldung.security.csrf;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -13,14 +14,33 @@ import org.springframework.test.context.ContextConfiguration;
@ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class })
public class CsrfDisabledIntegrationTest extends CsrfAbstractIntegrationTest {
- @Test
- public void givenNotAuth_whenAddFoo_thenUnauthorized() throws Exception {
- mvc.perform(post("/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo())).andExpect(status().isUnauthorized());
- }
+ @Test
+ public void givenNotAuth_whenAddFoo_thenUnauthorized() throws Exception {
+ mvc.perform(post("/auth/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo())).andExpect(status().isUnauthorized());
+ }
- @Test
- public void givenAuth_whenAddFoo_thenCreated() throws Exception {
- mvc.perform(post("/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser())).andExpect(status().isCreated());
- }
+ @Test
+ public void givenAuth_whenAddFoo_thenCreated() throws Exception {
+ mvc.perform(post("/auth/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser())).andExpect(status().isCreated());
+ }
+
+ @Test
+ public void accessMainPageWithoutAuthorization() throws Exception {
+ mvc.perform(get("/graph.html").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
+ }
+
+ @Test
+ public void accessOtherPages() throws Exception {
+ mvc.perform(get("/auth/transfer").contentType(MediaType.APPLICATION_JSON).param("accountNo", "1").param("amount", "100"))
+ .andExpect(status().isUnauthorized()); // without authorization
+ mvc.perform(get("/auth/transfer").contentType(MediaType.APPLICATION_JSON).param("accountNo", "1").param("amount", "100").with(testUser()))
+ .andExpect(status().isOk()); // with authorization
+ }
+
+ @Test
+ public void accessAdminPage() throws Exception {
+ mvc.perform(get("/auth/admin/x").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isUnauthorized()); //without authorization
+ mvc.perform(get("/auth/admin/x").contentType(MediaType.APPLICATION_JSON).with(testAdmin())).andExpect(status().isOk()); //with authorization
+ }
}