BAEL-1051: Introduction to Hoverfly Java (#2320)
* BAEL-1051: Fixed merge issue * BAEL-1051: Updated examples based on review * BAEL-1051: Fixed Merge Issues
This commit is contained in:
parent
ed92182fbf
commit
a3ed5a57a3
|
@ -20,7 +20,6 @@
|
|||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<type>maven-plugin</type>
|
||||
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<extensions>true</extensions>
|
||||
|
@ -182,6 +181,11 @@
|
|||
<artifactId>jetty-servlet</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.specto</groupId>
|
||||
<artifactId>hoverfly-java</artifactId>
|
||||
<version>0.8.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
package com.baeldung.hoverfly;
|
||||
|
||||
import static io.specto.hoverfly.junit.core.SimulationSource.dsl;
|
||||
import static io.specto.hoverfly.junit.dsl.HoverflyDsl.service;
|
||||
import static io.specto.hoverfly.junit.dsl.HttpBodyConverter.jsonWithSingleQuotes;
|
||||
import static io.specto.hoverfly.junit.dsl.ResponseCreators.success;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.any;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.equalsTo;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.equalsToJson;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.equalsToXml;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.matches;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.startsWith;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.matchesJsonPath;
|
||||
import static io.specto.hoverfly.junit.dsl.matchers.HoverflyMatchers.matchesXPath;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.commons.lang3.time.StopWatch;
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Test;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import io.specto.hoverfly.junit.core.SimulationSource;
|
||||
import io.specto.hoverfly.junit.rule.HoverflyRule;
|
||||
|
||||
public class HoverflyApiTest {
|
||||
|
||||
private static final SimulationSource source = dsl(
|
||||
service("http://www.baeldung.com")
|
||||
.get("/api/courses/1")
|
||||
.willReturn(success().body(
|
||||
jsonWithSingleQuotes("{'id':'1','name':'HCI'}")))
|
||||
|
||||
.post("/api/courses")
|
||||
.willReturn(success())
|
||||
|
||||
.andDelay(3, TimeUnit.SECONDS)
|
||||
.forMethod("POST"),
|
||||
|
||||
service(matches("www.*dung.com"))
|
||||
.get(startsWith("/api/student"))
|
||||
.queryParam("page", any())
|
||||
.willReturn(success())
|
||||
|
||||
.post(equalsTo("/api/student"))
|
||||
.body(equalsToJson(jsonWithSingleQuotes("{'id':'1','name':'Joe'}")))
|
||||
.willReturn(success())
|
||||
|
||||
.put("/api/student/1")
|
||||
.body(matchesJsonPath("$.name"))
|
||||
.willReturn(success())
|
||||
|
||||
.post("/api/student")
|
||||
.body(equalsToXml("<student><id>2</id><name>John</name></student>"))
|
||||
.willReturn(success())
|
||||
|
||||
.put("/api/student/2")
|
||||
.body(matchesXPath("/student/name"))
|
||||
.willReturn(success()));
|
||||
|
||||
@ClassRule
|
||||
public static final HoverflyRule rule = HoverflyRule.inSimulationMode(source);
|
||||
private final RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
@Test
|
||||
public void givenGetCourseById_whenRequestSimulated_thenAPICalledSuccessfully() throws URISyntaxException {
|
||||
final ResponseEntity<String> courseResponse = restTemplate.getForEntity(
|
||||
"http://www.baeldung.com/api/courses/1", String.class);
|
||||
|
||||
assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
|
||||
assertEquals("{\"id\":\"1\",\"name\":\"HCI\"}", courseResponse.getBody());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPostCourse_whenDelayInRequest_thenResponseIsDelayed() throws URISyntaxException {
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
final ResponseEntity<Void> postResponse = restTemplate.postForEntity(
|
||||
"http://www.baeldung.com/api/courses", null, Void.class);
|
||||
stopWatch.stop();
|
||||
long postTime = stopWatch.getTime();
|
||||
|
||||
assertEquals(HttpStatus.OK, postResponse.getStatusCode());
|
||||
assertTrue(3L <= TimeUnit.MILLISECONDS.toSeconds(postTime));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenGetStudent_whenRequestMatcher_thenAPICalledSuccessfully() throws URISyntaxException {
|
||||
final ResponseEntity<Void> courseResponse = restTemplate.getForEntity(
|
||||
"http://www.baeldung.com/api/student?page=3", Void.class);
|
||||
|
||||
assertEquals(HttpStatus.OK, courseResponse.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPostStudent_whenBodyRequestMatcherJson_thenResponseContainsEqualJson() throws URISyntaxException {
|
||||
final ResponseEntity<Void> postResponse = restTemplate.postForEntity(
|
||||
"http://www.baeldung.com/api/student", "{\"id\":\"1\",\"name\":\"Joe\"}", Void.class);
|
||||
|
||||
assertEquals(HttpStatus.OK, postResponse.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPutStudent_whenJsonPathMatcher_thenRequestJsonContainsElementInPath() throws URISyntaxException {
|
||||
RequestEntity<String> putRequest = RequestEntity
|
||||
.put(new URI("http://www.baeldung.com/api/student/1"))
|
||||
.body("{\"id\":\"1\",\"name\":\"Trevor\"}");
|
||||
|
||||
ResponseEntity<String> putResponse = restTemplate.exchange(putRequest, String.class);
|
||||
assertEquals(HttpStatus.OK, putResponse.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPostStudent_whenBodyRequestMatcherXml_thenResponseContainsEqualXml() throws URISyntaxException {
|
||||
final ResponseEntity<Void> postResponse = restTemplate.postForEntity(
|
||||
"http://www.baeldung.com/api/student", "<student><id>2</id><name>John</name></student>", Void.class);
|
||||
|
||||
assertEquals(HttpStatus.OK, postResponse.getStatusCode());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void givenPutStudent_whenXPathMatcher_thenRequestXmlContainsElementInXPath() throws URISyntaxException {
|
||||
RequestEntity<String> putRequest = RequestEntity
|
||||
.put(new URI("http://www.baeldung.com/api/student/2"))
|
||||
.body("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
|
||||
+ "<student><id>2</id><name>Monica</name></student>");
|
||||
|
||||
ResponseEntity<String> putResponse = restTemplate.exchange(putRequest, String.class);
|
||||
assertEquals(HttpStatus.OK, putResponse.getStatusCode());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue