diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml
index 687a9a2fe4..5d3cac4aa3 100644
--- a/testing-modules/rest-assured/pom.xml
+++ b/testing-modules/rest-assured/pom.xml
@@ -8,16 +8,30 @@
com.baeldung
- parent-java
+ parent-boot-2
0.0.1-SNAPSHOT
- ../../parent-java
+ ../../parent-boot-2
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
javax.servlet
javax.servlet-api
- ${javax.servlet-api.version}
javax.servlet
@@ -27,49 +41,40 @@
org.eclipse.jetty
jetty-security
- ${jetty.version}
org.eclipse.jetty
jetty-servlet
- ${jetty.version}
org.eclipse.jetty
jetty-servlets
- ${jetty.version}
org.eclipse.jetty
jetty-io
- ${jetty.version}
org.eclipse.jetty
jetty-http
- ${jetty.version}
org.eclipse.jetty
jetty-server
- ${jetty.version}
org.eclipse.jetty
jetty-util
- ${jetty.version}
org.apache.httpcomponents
httpcore
- ${httpcore.version}
org.apache.commons
commons-lang3
- ${commons-lang3.version}
@@ -92,19 +97,16 @@
joda-time
- joda-time
- ${joda-time.version}
+ joda-time
com.fasterxml.jackson.core
jackson-annotations
- ${jackson.version}
com.fasterxml.jackson.core
jackson-databind
- ${jackson.version}
@@ -128,7 +130,6 @@
org.apache.httpcomponents
httpclient
- ${httpclient.version}
@@ -145,13 +146,11 @@
io.rest-assured
rest-assured
- ${rest-assured.version}
test
io.rest-assured
json-schema-validator
- ${rest-assured-json-schema-validator.version}
com.github.fge
@@ -171,6 +170,7 @@
+ 18.0
2.9.7
1.8
19.0
diff --git a/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/Application.java b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/Application.java
new file mode 100644
index 0000000000..8b53a9c63d
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/Application.java
@@ -0,0 +1,13 @@
+package com.baeldung.restassured;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/controller/AppController.java b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/controller/AppController.java
new file mode 100644
index 0000000000..d68ebf4b03
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/controller/AppController.java
@@ -0,0 +1,100 @@
+package com.baeldung.restassured.controller;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.restassured.model.Movie;
+import com.baeldung.restassured.service.AppService;
+
+@RestController
+public class AppController {
+
+ @Autowired
+ AppService appService;
+
+ @GetMapping("/movies")
+ public ResponseEntity> getMovies() {
+
+ Set result = appService.getAll();
+
+ return ResponseEntity.ok()
+ .body(result);
+ }
+
+ @PostMapping("/movie")
+ @ResponseStatus(HttpStatus.CREATED)
+ public Movie addMovie(@RequestBody Movie movie) {
+
+ appService.add(movie);
+ return movie;
+ }
+
+ @GetMapping("/movie/{id}")
+ public ResponseEntity> getMovie(@PathVariable int id) {
+
+ Movie movie = appService.findMovie(id);
+ if (movie == null) {
+ return ResponseEntity.badRequest()
+ .body("Invalid movie id");
+ }
+
+ return ResponseEntity.ok(movie);
+ }
+
+ @GetMapping("/welcome")
+ public ResponseEntity> welcome(HttpServletResponse response) {
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
+ headers.add("sessionId", UUID.randomUUID()
+ .toString());
+
+ Cookie cookie = new Cookie("token", "some-token");
+ cookie.setDomain("localhost");
+
+ response.addCookie(cookie);
+
+ return ResponseEntity.noContent()
+ .headers(headers)
+ .build();
+ }
+
+ @GetMapping("/download/{id}")
+ public ResponseEntity getFile(@PathVariable int id) throws FileNotFoundException {
+
+ File file = appService.getFile(id);
+
+ if (file == null) {
+ return ResponseEntity.notFound()
+ .build();
+ }
+
+ InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
+
+ return ResponseEntity.ok()
+ .contentLength(file.length())
+ .contentType(MediaType.parseMediaType("application/octet-stream"))
+ .body(resource);
+ }
+
+}
diff --git a/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/model/Movie.java b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/model/Movie.java
new file mode 100644
index 0000000000..00a446fc65
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/model/Movie.java
@@ -0,0 +1,58 @@
+package com.baeldung.restassured.model;
+
+public class Movie {
+
+ private Integer id;
+
+ private String name;
+
+ private String synopsis;
+
+ public Movie() {
+ }
+
+ public Movie(Integer id, String name, String synopsis) {
+ super();
+ this.id = id;
+ this.name = name;
+ this.synopsis = synopsis;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getSynopsis() {
+ return synopsis;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Movie other = (Movie) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ return true;
+ }
+
+}
diff --git a/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/service/AppService.java b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/service/AppService.java
new file mode 100644
index 0000000000..15685f2924
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/java/com/baeldung/restassured/service/AppService.java
@@ -0,0 +1,45 @@
+package com.baeldung.restassured.service;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Service;
+
+import com.baeldung.restassured.model.Movie;
+
+@Service
+public class AppService {
+
+ private Set movieSet = new HashSet<>();
+
+ public Set getAll() {
+ return movieSet;
+ }
+
+ public void add(Movie movie) {
+ movieSet.add(movie);
+ }
+
+ public Movie findMovie(int id) {
+ return movieSet.stream()
+ .filter(movie -> movie.getId()
+ .equals(id))
+ .findFirst()
+ .orElse(null);
+ }
+
+ public File getFile(int id) {
+ File file = null;
+ try {
+ file = new ClassPathResource(String.valueOf(id)).getFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return file;
+ }
+
+}
diff --git a/testing-modules/rest-assured/src/main/resources/1 b/testing-modules/rest-assured/src/main/resources/1
new file mode 100644
index 0000000000..49351eb5b7
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/resources/1
@@ -0,0 +1 @@
+File 1
\ No newline at end of file
diff --git a/testing-modules/rest-assured/src/main/resources/2 b/testing-modules/rest-assured/src/main/resources/2
new file mode 100644
index 0000000000..9fbb45ed08
--- /dev/null
+++ b/testing-modules/rest-assured/src/main/resources/2
@@ -0,0 +1 @@
+File 2
\ No newline at end of file
diff --git a/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java b/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java
new file mode 100644
index 0000000000..a55c0a69e4
--- /dev/null
+++ b/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java
@@ -0,0 +1,149 @@
+package com.baeldung.restassured.controller;
+
+import static io.restassured.RestAssured.get;
+import static io.restassured.RestAssured.given;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.PostConstruct;
+
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.http.HttpStatus;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.baeldung.restassured.model.Movie;
+import com.baeldung.restassured.service.AppService;
+
+import io.restassured.response.Response;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+public class AppControllerIntegrationTest {
+
+ @LocalServerPort
+ private int port;
+
+ private String uri;
+
+ @PostConstruct
+ public void init() {
+ uri = "http://localhost:" + port;
+ }
+
+ @MockBean
+ AppService appService;
+
+ @Test
+ public void givenMovieId_whenMakingGetRequestToMovieEndpoint_thenReturnMovie() {
+
+ Movie testMovie = new Movie(1, "movie1", "summary1");
+ when(appService.findMovie(1)).thenReturn(testMovie);
+
+ get(uri + "/movie/" + testMovie.getId()).then()
+ .assertThat()
+ .statusCode(HttpStatus.OK.value())
+ .body("id", equalTo(testMovie.getId()))
+ .body("name", equalTo(testMovie.getName()))
+ .body("synopsis", notNullValue());
+
+ Movie result = get(uri + "/movie/" + testMovie.getId()).then()
+ .assertThat()
+ .statusCode(HttpStatus.OK.value())
+ .extract()
+ .as(Movie.class);
+ assertThat(result).isEqualTo(testMovie);
+
+ String responseString = get(uri + "/movie/" + testMovie.getId()).then()
+ .assertThat()
+ .statusCode(HttpStatus.OK.value())
+ .extract()
+ .asString();
+ assertThat(responseString).isNotEmpty();
+ }
+
+ @Test
+ public void whenCallingMoviesEndpoint_thenReturnAllMovies() {
+
+ Set movieSet = new HashSet<>();
+ movieSet.add(new Movie(1, "movie1", "summary1"));
+ movieSet.add(new Movie(2, "movie2", "summary2"));
+ when(appService.getAll()).thenReturn(movieSet);
+
+ get(uri + "/movies").then()
+ .statusCode(HttpStatus.OK.value())
+ .assertThat()
+ .body("size()", is(2));
+
+ Movie[] movies = get(uri + "/movies").then()
+ .statusCode(200)
+ .extract()
+ .as(Movie[].class);
+ assertThat(movies.length).isEqualTo(2);
+ }
+
+ @Test
+ public void givenMovie_whenMakingPostRequestToMovieEndpoint_thenCorrect() {
+
+ Map request = new HashMap<>();
+ request.put("id", "11");
+ request.put("name", "movie1");
+ request.put("synopsis", "summary1");
+
+ int movieId = given().contentType("application/json")
+ .body(request)
+ .when()
+ .post(uri + "/movie")
+ .then()
+ .assertThat()
+ .statusCode(HttpStatus.CREATED.value())
+ .extract()
+ .path("id");
+ assertThat(movieId).isEqualTo(11);
+
+ }
+
+ @Test
+ public void whenCallingWelcomeEndpoint_thenCorrect() {
+
+ get(uri + "/welcome").then()
+ .assertThat()
+ .header("sessionId", notNullValue())
+ .cookie("token", notNullValue());
+
+ Response response = get(uri + "/welcome");
+
+ String headerName = response.getHeader("sessionId");
+ String cookieValue = response.getCookie("token");
+ assertThat(headerName).isNotBlank();
+ assertThat(cookieValue).isNotBlank();
+ }
+
+ @Test
+ public void givenId_whenCallingDowloadEndpoint_thenCorrect() throws IOException {
+
+ File file = new ClassPathResource("test.txt").getFile();
+ long fileSize = file.length();
+ when(appService.getFile(1)).thenReturn(file);
+
+ byte[] result = get(uri + "/download/1").asByteArray();
+
+ assertThat(result.length).isEqualTo(fileSize);
+ }
+
+}
diff --git a/testing-modules/rest-assured/src/test/resources/test.txt b/testing-modules/rest-assured/src/test/resources/test.txt
new file mode 100644
index 0000000000..84362ca046
--- /dev/null
+++ b/testing-modules/rest-assured/src/test/resources/test.txt
@@ -0,0 +1 @@
+Test file
\ No newline at end of file