@Override protected RestServer createServer(final int port) { return restServer(port, log()); }
@Test public void should_log_request_and_response() throws Exception { RestServer server = restServer(port(), log()); Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "0XCAFE"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "0XBABE"; server.resource("targets", get("1").response(json(resource1)), get("2").response(json(resource2)) ); File file = folder.newFile(); System.setOut(new PrintStream(new FileOutputStream(file))); running(server, new Runnable() { @Override public void run() throws Exception { helper.get(remoteUrl("/targets")); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XCAFE")); assertThat(actual, containsString("0XBABE")); }
@Test public void should_put() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", put("1").response(status(200)) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.putForResponse(remoteUrl("/targets/1"), Jsons.toJson(resource1)); assertThat(httpResponse.getStatusLine().getStatusCode(), is(200)); } }); }
@Test public void should_not_put_with_unknown_id() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", put("1").response(status(200)) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.putForResponse(remoteUrl("/targets/2"), Jsons.toJson(resource1)); assertThat(httpResponse.getStatusLine().getStatusCode(), is(404)); } }); }
@Test public void should_put_with_response_handler() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", put("1").response(status(409)) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.putForResponse(remoteUrl("/targets/1"), Jsons.toJson(resource1)); assertThat(httpResponse.getStatusLine().getStatusCode(), is(409)); } }); }
@Test public void should_return_404_for_post_with_id_by_default() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", post().response(status(201), header("Location", "/targets/123")) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.postForResponse(remoteUrl("/targets/1"), Jsons.toJson(resource1)); assertThat(httpResponse.getStatusLine().getStatusCode(), is(404)); } }); }
@Test public void should_post() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", post().response(status(201), header("Location", "/targets/123")) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.postForResponse(remoteUrl("/targets"), Jsons.toJson(resource1)); assertThat(httpResponse.getStatusLine().getStatusCode(), is(201)); assertThat(httpResponse.getFirstHeader("Location").getValue(), is("/targets/123")); } }); }
@Test public void should_query_with_condition() throws Exception { RestServer server = restServer(12306); Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; server.resource("targets", get().request(eq(query("foo"), "bar")).response(json(ImmutableList.of(resource1, resource2))) ); running(server, new Runnable() { @Override public void run() throws Exception { List<Plain> plains = Jsons.toObjects(helper.get(remoteUrl("/targets?foo=bar")), Plain.class); assertThat(plains.size(), is(2)); HttpResponse response = helper.getResponse(remoteUrl("/targets")); assertThat(response.getStatusLine().getStatusCode(), is(404)); } }); }
@Test public void should_put_with_any_id() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", put(anyId()).response(status(200)) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse1 = helper.putForResponse(remoteUrl("/targets/1"), Jsons.toJson(resource1)); assertThat(httpResponse1.getStatusLine().getStatusCode(), is(200)); HttpResponse httpResponse2 = helper.putForResponse(remoteUrl("/targets/2"), Jsons.toJson(resource1)); assertThat(httpResponse2.getStatusLine().getStatusCode(), is(200)); } }); }
@Test public void should_put_with_matcher() throws Exception { RestServer server = restServer(12306); final Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; server.resource("targets", put("1").request(eq(header(HttpHeaders.IF_MATCH), "moco")).response(status(200)) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.putForResponseWithHeaders(remoteUrl("/targets/1"), Jsons.toJson(resource1), of(HttpHeaders.IF_MATCH, "moco")); assertThat(httpResponse.getStatusLine().getStatusCode(), is(200)); } }); }
@Test public void should_post_with_header() throws Exception { RestServer server = restServer(12306); final Plain resource = new Plain(); resource.code = 1; resource.message = "hello"; server.resource("targets", post().request(eq(header(HttpHeaders.CONTENT_TYPE), "application/json")) .response(status(201), header("Location", "/targets/123")) ); running(server, new Runnable() { @Override public void run() throws Exception { HttpResponse httpResponse = helper.postForResponse(remoteUrl("/targets"), Jsons.toJson(resource), "application/json"); assertThat(httpResponse.getStatusLine().getStatusCode(), is(201)); assertThat(httpResponse.getFirstHeader("Location").getValue(), is("/targets/123")); HttpResponse badRequest = helper.postForResponse(remoteUrl("/targets"), Jsons.toJson(resource)); assertThat(badRequest.getStatusLine().getStatusCode(), is(400)); } }); }
@Test public void should_request_server_by_moco_config() throws Exception { RestServer server = restServer(12306, context("/rest"), Moco.response(header("foo", "bar"))); Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; server.resource("targets", get("1").response(json(resource1)), get("2").response(json(resource2)) ); running(server, new Runnable() { @Override public void run() throws Exception { Plain response1 = getResource("/rest/targets/1"); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); Plain response2 = getResource("/rest/targets/2"); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); org.apache.http.HttpResponse response = helper.getResponse(remoteUrl("/rest/targets/1")); assertThat(response.getHeaders("foo")[0].getValue(), is("bar")); } }); }
@Test public void should_verify_expected_request_and_log_at_same_time() throws Exception { Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; final RequestHit hit = requestHit(); final RestServer server = restServer(port(), hit, log()); server.resource("targets", get("1").response(json(resource1)), get("2").response(json(resource2)) ); running(server, new Runnable() { @Override public void run() throws Exception { Plain response1 = getResource("/targets/1"); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); Plain response2 = getResource("/targets/2"); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); } }); hit.verify(by(uri("/targets/1")), times(1)); hit.verify(by(uri("/targets/2")), times(1)); }