public static RestSettingBuilder get(final String id) { return get(eq(checkId(id))); }
@Test(expected = IllegalArgumentException.class) public void should_throw_exception_for_get_id_with_space() { get("1 1").response(status(200)); }
@Test(expected = IllegalArgumentException.class) public void should_throw_exception_for_get_id_with_slash() throws Exception { get("1/1").response(status(200)); }
@Test(expected = IllegalArgumentException.class) public void should_throw_exception_for_resource_name_with_space() { server.resource("hello world", get().response("hello")); }
@Test(expected = IllegalArgumentException.class) public void should_throw_exception_for_resource_name_with_slash() { server.resource("hello/world", get().response("hello")); }
@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_get_all_resources_by_default() throws Exception { 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 { List<Plain> plains = getResources("/targets"); assertThat(plains.size(), is(2)); } }); }
@Test public void should_reply_404_for_unknown_resource() throws Exception { server.resource("targets", get("2").response(with(text("hello")))); running(server, new Runnable() { @Override public void run() throws Exception { org.apache.http.HttpResponse response = helper.getResponse(remoteUrl("/targets/1")); assertThat(response.getStatusLine().getStatusCode(), is(404)); } }); }
@Test public void should_get_all_resources() throws Exception { Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; server.resource("targets", get().response(json(ImmutableList.of(resource1, resource2))) ); running(server, new Runnable() { @Override public void run() throws Exception { String uri = "/targets"; List<Plain> plains = getResources(uri); assertThat(plains.size(), is(2)); } }); }
@Test public void should_get_resource_by_id() throws Exception { 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("/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")); } }); }
@Test public void should_work_with_other_http_configuration() throws Exception { 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)) ); server.response("hello"); 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")); assertThat(helper.get(remoteUrl("/hello")), is("hello")); } }); }
@Test public void should_get_sub_resource() throws Exception { Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; server.resource("targets", id("1").name("sub").settings( 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/sub/1"); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); Plain response2 = getResource("/targets/1/sub/2"); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); } }); }
@Test public void should_get_resource_by_any_id() throws Exception { Plain resource = new Plain(); resource.code = 1; resource.message = "hello"; server.resource("targets", get(anyId()).response(json(resource)) ); 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(1)); assertThat(response2.message, is("hello")); } }); }
@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_get_sub_resource_with_any_id() throws Exception { Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; server.resource("targets", id(anyId()).name("sub").settings( 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/sub/1"); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); Plain response2 = getResource("/targets/2/sub/2"); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); } }); }
@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_get_resource_by_id_with_request_config() throws Exception { 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").request(eq(header(HttpHeaders.CONTENT_TYPE), "application/json")).response(json(resource1)), get("2").request(eq(header(HttpHeaders.CONTENT_TYPE), "application/json")).response(json(resource2)) ); running(server, new Runnable() { @Override public void run() throws Exception { org.apache.http.HttpResponse response = helper.getResponseWithHeader(remoteUrl("/targets/1"), of(HttpHeaders.CONTENT_TYPE, "application/json")); Plain response1 = asPlain(response); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); org.apache.http.HttpResponse otherResponse = helper.getResponseWithHeader(remoteUrl("/targets/2"), of(HttpHeaders.CONTENT_TYPE, "application/json")); Plain response2 = asPlain(otherResponse); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); org.apache.http.HttpResponse notFoundResponse = helper.getResponse(remoteUrl("/targets/1")); assertThat(notFoundResponse.getStatusLine().getStatusCode(), is(404)); } }); }
@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)); }