package lt.emasina.resthub.support; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lt.emasina.resthub.server.ServerSetup; import org.restlet.data.Header; import org.restlet.data.MediaType; import org.restlet.engine.header.HeaderConstants; import org.restlet.resource.ClientResource; import org.restlet.util.Series; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @Getter @Setter(AccessLevel.PROTECTED) public class TestRequest { private String prefix; private String path; private String entity; private HashMap headers; public String getUrl() { return ServerSetup.HOST + path; } public ClientResource post() throws IOException { ClientResource client = new ClientResource(getUrl()); client.post(this.entity); client.release(); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } public ClientResource get() throws IOException { ClientResource client = new ClientResource(getUrl()); if (headers != null) addHeaders(client); client.get(); client.release(); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } public ClientResource get(MediaType type) throws IOException { ClientResource client = new ClientResource(getUrl()); if (headers != null) addHeaders(client); client.get(type); client.release(); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } public ClientResource options() throws IOException { ClientResource client = new ClientResource(getUrl()); client.options(); client.release(); assertTrue(client.getStatus().isSuccess()); assertEquals(204, client.getStatus().getCode()); return client; } public ClientResource deleteQuery() throws IOException { return null; } public ClientResource cache() throws IOException { return null; } public ClientResource count() throws IOException { return null; } public ClientResource deleteCache() throws IOException { return null; } public void addHeaders(ClientResource client) { Series<Header> reqHeaders = (Series<Header>) client.getRequestAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS); if (reqHeaders == null) { reqHeaders = new Series(Header.class); client.getRequestAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, reqHeaders); } Iterator it = headers.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); reqHeaders.add(new Header(pairs.getKey().toString(), pairs.getValue().toString() )); } } public static class Builder { private final TestRequest req = new TestRequest(); public Builder(String path) { req.path = path; } public Builder(String prefix, String path) { req.prefix = prefix; req.path = path; } public Builder entity(String entity) { req.entity = entity; return this; } public TestRequest build() { return req; } } }