@Test public void test_Select_RelationshipStartLimit() throws UnsupportedEncodingException { Response response = target("/e2_RelationshipStartLimit") .queryParam("include", "id") .queryParam("include", URLEncoder.encode("{\"path\":\"" + E2.E3S.getName() + "\",\"start\":1,\"limit\":1}", "UTF-8")) .queryParam("exclude", E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request().get(); assertNotNull(response); }
@Test public void test_Select_RelationshipStartLimit() throws UnsupportedEncodingException { insert("e2", "id, name", "1, 'zzz'"); insert("e2", "id, name", "2, 'yyy'"); insert("e3", "id, name, e2_id", "8, 'aaa', 1"); insert("e3", "id, name, e2_id", "9, 'bbb', 1"); insert("e3", "id, name, e2_id", "10, 'ccc', 2"); Response response = target("/e2") .queryParam("include", "id") .queryParam("include", URLEncoder.encode("{\"path\":\"" + E2.E3S.getName() + "\",\"start\":1,\"limit\":1}", "UTF-8")) .queryParam("exclude", E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request().get(); onSuccess(response).bodyEquals(2, "{\"id\":1,\"e3s\":[{\"id\":9,\"name\":\"bbb\"}]}", "{\"id\":2,\"e3s\":[]}"); }
@GET @Path("e2_RelationshipStartLimit") public DataResponse<E2> getE2_RelationshipStartLimit(@QueryParam("include") List<Include> includes, @QueryParam("exclude") List<Exclude> excludes) { assertNotNull(includes); assertEquals(2, includes.size()); assertEquals("id", includes.get(0).getValue()); assertEquals(E2.E3S.getName(), includes.get(1).getPath()); assertNotNull(includes.get(1).getStart()); assertEquals(1, includes.get(1).getStart().getValue()); assertNotNull(includes.get(1).getLimit()); assertEquals(1, includes.get(1).getLimit().getValue()); assertNotNull(excludes); assertEquals(1, excludes.size()); assertEquals(E2.E3S.dot(E3.PHONE_NUMBER).getName(), excludes.get(0).getPath()); return DataResponse.forType(E2.class); }
@Test public void test_Select_MapByRootEntity_Related() { insert("e2", "id, name", "1, 'zzz'"); insert("e2", "id, name", "2, 'yyy'"); insert("e3", "id, e2_id, name", "8, 1, 'aaa'"); insert("e3", "id, e2_id, name", "9, 1, 'bbb'"); insert("e3", "id, e2_id, name", "10, 2, 'ccc'"); Response response = target("/e3") .queryParam("mapBy", E3.E2.dot(E2.ID_PK_COLUMN).getName()) .queryParam("exclude", E3.PHONE_NUMBER.getName()) .request() .get(); onSuccess(response).bodyEqualsMapBy(3, "\"1\":[{\"id\":8,\"name\":\"aaa\"},{\"id\":9,\"name\":\"bbb\"}]", "\"2\":[{\"id\":10,\"name\":\"ccc\"}]"); }
@Test public void test_Select_RelationshipSort() { insert("e2", "id, name", "1, 'zzz'"); insert("e2", "id, name", "2, 'yyy'"); insert("e2", "id, name", "3, 'xxx'"); insert("e3", "id, name, e2_id", "8, 'aaa', 1"); insert("e3", "id, name, e2_id", "9, 'bbb', 2"); insert("e3", "id, name, e2_id", "10, 'ccc', 3"); Response response = target("/e3") .queryParam("include", "id") .queryParam("include", E3.E2.getName()) .queryParam("sort", E3.E2.dot(E2.NAME).getName()) .request() .get(); onSuccess(response).bodyEquals(3, "{\"id\":10,\"e2\":{\"id\":3,\"address\":null,\"name\":\"xxx\"}}", "{\"id\":9,\"e2\":{\"id\":2,\"address\":null,\"name\":\"yyy\"}}", "{\"id\":8,\"e2\":{\"id\":1,\"address\":null,\"name\":\"zzz\"}}"); }
@Test public void testPUT_Single_ResponseToOneRelationshipFilter() { insert("e8", "id, name", "5, 'aaa'"); insert("e8", "id, name", "6, 'ert'"); insert("e9", "e8_id", "5"); insert("e9", "e8_id", "6"); Response response = target("/e7/6") .queryParam("include", "id", E7.E8.dot(E8.E9).getName()) .queryParam("exclude", E7.NAME.getName()) .request() .put(Entity.json("[{\"name\":\"yyy\",\"e8\":6}]")); onSuccess(response).bodyEquals(1, "{\"id\":6,\"e8\":{\"e9\":{\"id\":6}}}"); }
@Test public void testPost_ToMany() { insert("e3", "id, name", "1, 'xxx'"); insert("e3", "id, name", "8, 'yyy'"); Response response = target("/e2") .queryParam("include", E2.E3S.getName()) .queryParam("exclude", E2.ADDRESS.getName(), E2.E3S.dot(E3.NAME).getName(), E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request() .post(Entity.json("{\"e3s\":[1,8],\"name\":\"MM\"}")); E2 e2 = (E2) Cayenne.objectForQuery(newContext(), new SelectQuery<>(E2.class)); int id = Cayenne.intPKForObject(e2); onResponse(response) .statusEquals(Status.CREATED) .bodyEquals(1, "{\"id\":" + id + ",\"e3s\":[{\"id\":1},{\"id\":8}],\"name\":\"MM\"}"); assertEquals(2, intForQuery("SELECT COUNT(1) FROM utest.e3 WHERE e2_id = " + id)); }
@Test public void testPut_ToMany() { insert("e2", "id, name", "1, 'xxx'"); insert("e2", "id, name", "8, 'yyy'"); insert("e3", "id, name, e2_id", "3, 'zzz', null"); insert("e3", "id, name, e2_id", "4, 'aaa', 8"); insert("e3", "id, name, e2_id", "5, 'bbb', 8"); Response response = target("/e2/1") .queryParam("include", E2.E3S.getName()) .queryParam("exclude", E2.ADDRESS.getName(), E2.NAME.getName(), E2.E3S.dot(E3.NAME).getName(), E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request().put(Entity.json("{\"e3s\":[3,4,5]}")); onSuccess(response).bodyEquals(1, "{\"id\":1,\"e3s\":[{\"id\":3},{\"id\":4},{\"id\":5}]}"); assertEquals(3L, countRows("e3", "WHERE e2_id = 1")); }
@Test public void testPut_ToMany_UnrelateAll() { insert("e2", "id, name", "1, 'xxx'"); insert("e2", "id, name", "8, 'yyy'"); insert("e3", "id, name, e2_id", "3, 'zzz', null"); insert("e3", "id, name, e2_id", "4, 'aaa', 8"); insert("e3", "id, name, e2_id", "5, 'bbb', 8"); Response response = target("/e2/8") .queryParam("include", E2.E3S.getName()) .queryParam("exclude", E2.ADDRESS.getName(), E2.NAME.getName(), E2.E3S.dot(E3.NAME).getName(), E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request().put(Entity.json("{\"e3s\":[]}")); onSuccess(response).bodyEquals(1, "{\"id\":8,\"e3s\":[]}"); assertEquals(3, countRows("e3", "WHERE e2_id IS NULL")); }
@Test public void testPUT_Bulk_ResponseToManyRelationshipFilter() { insert("e8", "id, name", "5, 'aaa'"); insert("e8", "id, name", "6, 'ert'"); insert("e7", "id, e8_id, name", "45, 6, 'me'"); insert("e7", "id, e8_id, name", "78, 5, 'her'"); insert("e7", "id, e8_id, name", "81, 5, 'him'"); Response response = target("/e8") .queryParam("include", "id", E8.E7S.dot(E7.NAME).getName()) .queryParam("exclude", E8.NAME.getName()) .request() .put(Entity.json("[{\"id\":6,\"name\":\"yyy\"},{\"id\":5,\"name\":\"zzz\"}]")); onSuccess(response).bodyEquals(2, "{\"id\":6,\"e7s\":[{\"name\":\"me\"}]}", "{\"id\":5,\"e7s\":[{\"name\":\"her\"},{\"name\":\"him\"}]}"); }
@Test public void testPut_ToMany_UnrelateOne() { insert("e2", "id, name", "1, 'xxx'"); insert("e2", "id, name", "8, 'yyy'"); insert("e3", "id, name, e2_id", "3, 'zzz', null"); insert("e3", "id, name, e2_id", "4, 'aaa', 8"); insert("e3", "id, name, e2_id", "5, 'bbb', 8"); Response response = target("/e2/1") .queryParam("include", E2.E3S.getName()) .queryParam("exclude", E2.ADDRESS.getName(), E2.NAME.getName(), E2.E3S.dot(E3.NAME).getName(), E2.E3S.dot(E3.PHONE_NUMBER).getName()) .request() .put(Entity.json("{\"e3s\":[4]}")); onSuccess(response).bodyEquals(1, "{\"id\":1,\"e3s\":[{\"id\":4}]}"); assertEquals(1L, countRows("e3", "WHERE e2_id = 1 AND id = 4")); assertEquals(1L, countRows("e3", "WHERE e2_id = 8 AND id = 5")); }