package lt.emasina.resthub.support; import java.io.IOException; import java.util.HashMap; import lombok.Getter; import lombok.extern.log4j.Log4j; import lt.emasina.resthub.server.ServerSetup; import org.restlet.data.MediaType; import org.restlet.resource.ClientResource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @Log4j @Getter public class TestQuery extends TestRequest { private String id; private String params; private Integer perPage; private Integer page; public void setParams(String params) { this.params = params; } protected String getPathData() { StringBuilder sb = new StringBuilder(); sb.append("/query/").append(id); if (perPage != null && page != null) { sb.append("/page/").append(perPage).append("/").append(page); } sb.append("/data"); return sb.toString(); } @Override public ClientResource deleteQuery() throws IOException { String url = ServerSetup.HOST + "/query/" + this.id; ClientResource client = new ClientResource(url); client.delete(); log.debug("Deleting query: " + url); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } @Override public ClientResource deleteCache() throws IOException { String url = ServerSetup.HOST + "/query/" + this.id + "/cache"; ClientResource client = new ClientResource(url); client.delete(); log.debug("Deleting cache: " + url); assertTrue(client.getStatus().isSuccess()); assertEquals(204, client.getStatus().getCode()); return client; } @Override public ClientResource count() throws IOException { String url = ServerSetup.HOST + "/query/" + this.id + "/count"; if (this.params != null) url += this.params; ClientResource client = new ClientResource(url); client.get(); log.debug("Checking query count: " + url); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } @Override public ClientResource cache() throws IOException { String url = ServerSetup.HOST + "/query/" + this.id + "/cache"; log.debug("Checking query cache: "+getUrl()); ClientResource client = new ClientResource(url); client.get(); log.debug("Checking query count: " + url); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } @Override public ClientResource get(MediaType type) throws IOException { String url = ServerSetup.HOST + getPathData(); if (this.params != null) url += this.params; ClientResource client = new ClientResource(url); client.get(type); assertTrue(client.getStatus().isSuccess()); assertEquals(200, client.getStatus().getCode()); return client; } @Override public ClientResource options() throws IOException { setPath("/query/" + this.id + "/data"); return super.options(); } public static class Builder { private final TestQuery q = new TestQuery(); public Builder(String prefix, String sql) { q.setPrefix(prefix); q.setPath("/query"); q.setEntity(sql); } public Builder params(String params) { q.setParams(params); return this; } public Builder headers(HashMap headers) { q.setHeaders(headers); return this; } public Builder page(int perPage, int page) { q.perPage = perPage; q.page = page; return this; } public TestQuery build() { try { ClientResource client = q.post(); q.id = client.getResponseEntity().getText(); q.setPath(q.getPathData()); } catch (IOException ex) { fail(ex.getMessage()); } return q; } } }