package com.thoughtworks.inproctester.jetty.tests;
import com.thoughtworks.inproctester.core.InProcRequest;
import com.thoughtworks.inproctester.core.InProcResponseWrapper;
import com.thoughtworks.inproctester.jetty.HttpAppTester;
import com.thoughtworks.inproctester.jetty.testapp.TestServlet;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class InProcessJettyTest {
private static HttpAppTester httpAppTester;
@BeforeClass
public static void setUp() {
httpAppTester = new HttpAppTester("/");
httpAppTester.addServlet(TestServlet.class, "/*");
httpAppTester.start();
}
@AfterClass
public static void tearDown() {
httpAppTester.stop();
}
@Test
public void shouldAcceptBodyForPostRequest() throws Exception {
HashMap<String, String> headers = new HashMap<>();
headers.put("Host", "localhost");
headers.put("Content-Type", "text/plain");
URI uri = new URI("http://localhost/");
InProcRequest request = new TestRequest("POST", uri, "POST body", headers);
InProcResponseWrapper response = new InProcResponseWrapper(httpAppTester.getResponses(request));
assertThat(response.getContent(), is("POST body"));
}
@Test
public void shouldAcceptBodyForPutRequest() throws Exception {
HashMap<String, String> headers = new HashMap<>();
headers.put("Host", "localhost");
headers.put("Content-Type", "text/plain");
URI uri = new URI("http://localhost/");
InProcRequest request = new TestRequest("PUT", uri, "PUT body", headers);
InProcResponseWrapper response = new InProcResponseWrapper(httpAppTester.getResponses(request));
assertThat(response.getContent(), is("PUT body"));
}
private static class TestRequest implements InProcRequest {
private final String httpMethod;
private final URI uri;
private final String content;
private final Map<String, String> headers;
public TestRequest(
String httpMethod,
URI uri,
String content,
Map<String, String> headers) {
this.httpMethod = httpMethod;
this.uri = uri;
this.content = content;
this.headers = headers;
}
@Override public String getHttpMethod() {
return httpMethod;
}
@Override public URI getUri() {
return uri;
}
@Override public String getContent() {
return content;
}
@Override public Set<String> getHeaderNames() {
return headers.keySet();
}
@Override public String getHeader(String headerName) {
return headers.get(headerName);
}
@Override public void addHeader(String headerName, String header) {
headers.put(headerName, header);
}
}
}