BAEL-2736 rest assured spring mock mvc (#6466)
* Include rest-assured.spring-mock-mvc dependency BAEL-2736 * Rest Assured Spring Mock MVC Tests BAEL-2736
This commit is contained in:
parent
d84dedbb95
commit
fda8a29eb6
|
@ -19,6 +19,10 @@
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-json</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
@ -143,15 +147,6 @@
|
||||||
<artifactId>wiremock</artifactId>
|
<artifactId>wiremock</artifactId>
|
||||||
<version>${wiremock.version}</version>
|
<version>${wiremock.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>io.rest-assured</groupId>
|
|
||||||
<artifactId>rest-assured</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.rest-assured</groupId>
|
|
||||||
<artifactId>json-schema-validator</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.fge</groupId>
|
<groupId>com.github.fge</groupId>
|
||||||
<artifactId>json-schema-validator</artifactId>
|
<artifactId>json-schema-validator</artifactId>
|
||||||
|
@ -167,6 +162,23 @@
|
||||||
<artifactId>commons-collections</artifactId>
|
<artifactId>commons-collections</artifactId>
|
||||||
<version>${commons-collections.version}</version>
|
<version>${commons-collections.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Rest Assured Dependencies-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.rest-assured</groupId>
|
||||||
|
<artifactId>rest-assured</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.rest-assured</groupId>
|
||||||
|
<artifactId>spring-mock-mvc</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.rest-assured</groupId>
|
||||||
|
<artifactId>json-schema-validator</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
class Course {
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
public Course() {
|
||||||
|
}
|
||||||
|
|
||||||
|
Course(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(path = "/courses")
|
||||||
|
public class CourseController {
|
||||||
|
|
||||||
|
private final CourseService courseService;
|
||||||
|
|
||||||
|
public CourseController(CourseService courseService) {
|
||||||
|
this.courseService = courseService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(produces = APPLICATION_JSON_UTF8_VALUE)
|
||||||
|
public Collection<Course> getCourses() {
|
||||||
|
return courseService.getCourses();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(path = "/{code}", produces = APPLICATION_JSON_UTF8_VALUE)
|
||||||
|
public Course getCourse(@PathVariable String code) {
|
||||||
|
return courseService.getCourse(code);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
|
||||||
|
|
||||||
|
@ControllerAdvice(assignableTypes = CourseController.class)
|
||||||
|
public class CourseControllerExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
|
|
||||||
|
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||||
|
@ExceptionHandler(CourseNotFoundException.class)
|
||||||
|
@SuppressWarnings("ThrowablePrintedToSystemOut")
|
||||||
|
public void handleCourseNotFoundException(CourseNotFoundException cnfe) {
|
||||||
|
System.out.println(cnfe);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
class CourseNotFoundException extends RuntimeException {
|
||||||
|
|
||||||
|
CourseNotFoundException(String code) {
|
||||||
|
super(code);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class CourseService {
|
||||||
|
|
||||||
|
private static final Map<String, Course> COURSE_MAP = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
Course wizardry = new Course("Wizardry");
|
||||||
|
COURSE_MAP.put(wizardry.getCode(), wizardry);
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<Course> getCourses() {
|
||||||
|
return COURSE_MAP.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
Course getCourse(String code) {
|
||||||
|
return Optional.ofNullable(COURSE_MAP.get(code)).orElseThrow(() -> new CourseNotFoundException(code));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
import static io.restassured.module.mockmvc.RestAssuredMockMvc.given;
|
||||||
|
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||||
|
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import org.springframework.web.context.WebApplicationContext;
|
||||||
|
|
||||||
|
import io.restassured.module.mockmvc.RestAssuredMockMvc;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest(webEnvironment = RANDOM_PORT)
|
||||||
|
public class CourseControllerIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WebApplicationContext webApplicationContext;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initialiseRestAssuredMockMvcWebApplicationContext() {
|
||||||
|
RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoMatchingCourseCodeWhenGetCourseThenRespondWithStatusNotFound() {
|
||||||
|
String nonMatchingCourseCode = "nonMatchingCourseCode";
|
||||||
|
|
||||||
|
given()
|
||||||
|
.when()
|
||||||
|
.get("/courses/" + nonMatchingCourseCode)
|
||||||
|
.then()
|
||||||
|
.log().ifValidationFails()
|
||||||
|
.statusCode(NOT_FOUND.value());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.baeldung.restassured.learner;
|
||||||
|
|
||||||
|
import io.restassured.module.mockmvc.RestAssuredMockMvc;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import static io.restassured.http.ContentType.JSON;
|
||||||
|
import static io.restassured.module.mockmvc.RestAssuredMockMvc.given;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||||
|
import static org.springframework.http.HttpStatus.OK;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class CourseControllerUnitTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private CourseService courseService;
|
||||||
|
@InjectMocks
|
||||||
|
private CourseController courseController;
|
||||||
|
@InjectMocks
|
||||||
|
private CourseControllerExceptionHandler courseControllerExceptionHandler;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initialiseRestAssuredMockMvcStandalone() {
|
||||||
|
RestAssuredMockMvc.standaloneSetup(courseController, courseControllerExceptionHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoExistingCoursesWhenGetCoursesThenRespondWithStatusOkAndEmptyArray() {
|
||||||
|
when(courseService.getCourses()).thenReturn(Collections.emptyList());
|
||||||
|
|
||||||
|
given()
|
||||||
|
.when()
|
||||||
|
.get("/courses")
|
||||||
|
.then()
|
||||||
|
.log().ifValidationFails()
|
||||||
|
.statusCode(OK.value())
|
||||||
|
.contentType(JSON)
|
||||||
|
.body(is(equalTo("[]")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoMatchingCoursesWhenGetCoursesThenRespondWithStatusNotFound() {
|
||||||
|
String nonMatchingCourseCode = "nonMatchingCourseCode";
|
||||||
|
|
||||||
|
when(courseService.getCourse(nonMatchingCourseCode)).thenThrow(new CourseNotFoundException(nonMatchingCourseCode));
|
||||||
|
|
||||||
|
given()
|
||||||
|
.when()
|
||||||
|
.get("/courses/" + nonMatchingCourseCode)
|
||||||
|
.then()
|
||||||
|
.log().ifValidationFails()
|
||||||
|
.statusCode(NOT_FOUND.value());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue