From 2be681a57d022e204b8d66cbcf3643c57c60cc20 Mon Sep 17 00:00:00 2001
From: Guy Paddock <guy@rosieapp.com>
Date: Fri, 27 Oct 2017 04:49:12 +0000
Subject: [PATCH] Adds subtree flattening to collections

---
 opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java |  164 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 119 insertions(+), 45 deletions(-)

diff --git a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
index 7b9c3ac..208023f 100644
--- a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
+++ b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
@@ -93,7 +93,7 @@
     private static final QueryFilter<JsonPointer> NO_FILTER = QueryFilter.alwaysTrue();
 
     @Test
-    public void testQueryAllWithNoSubtree() throws Exception {
+    public void testQueryAllWithNoSubtreeFlattening() throws Exception {
         final Connection connection = newConnection();
         final List<ResourceResponse> resources = new LinkedList<>();
         final QueryResponse result =
@@ -105,25 +105,76 @@
         assertThat(resources).hasSize(7);
         assertThat(result.getPagedResultsCookie()).isNull();
         assertThat(result.getTotalPagedResults()).isEqualTo(-1);
+
+        assertThat(resources.get(0).getContent().get("_ou").isNotNull());
+        assertThat(resources.get(0).getContent().get("_ou").asString()).isEqualTo("level1");
+
+        assertThat(resources.get(1).getContent().get("_ou").isNull());
+        assertThat(resources.get(1).getId()).isEqualTo("test1");
+
+        assertThat(resources.get(2).getContent().get("_ou").isNull());
+        assertThat(resources.get(2).getId()).isEqualTo("test2");
+
+        assertThat(resources.get(3).getContent().get("_ou").isNull());
+        assertThat(resources.get(3).getId()).isEqualTo("test3");
+
+        assertThat(resources.get(4).getContent().get("_ou").isNull());
+        assertThat(resources.get(4).getId()).isEqualTo("test4");
+
+        assertThat(resources.get(5).getContent().get("_ou").isNull());
+        assertThat(resources.get(5).getId()).isEqualTo("test5");
+
+        assertThat(resources.get(6).getContent().get("_ou").isNull());
+        assertThat(resources.get(6).getId()).isEqualTo("test6");
     }
 
-//    @Test
-//    public void testQueryAllWithSubtree() throws Exception {
-//        final Connection connection = newConnection();
-//        final List<ResourceResponse> resources = new LinkedList<>();
-//        final QueryResponse result =
-//            connection.query(
-//                newAuthConnectionContext(),
-//                newQueryRequest("").setQueryFilter(NO_FILTER),
-//                resources);
-//
-//        assertThat(resources).hasSize(7);
-//        assertThat(result.getPagedResultsCookie()).isNull();
-//        assertThat(result.getTotalPagedResults()).isEqualTo(-1);
-//    }
+    @Test
+    public void testQueryAllWithSubtreeFlattening() throws Exception {
+        final Connection connection = newConnection();
+        final List<ResourceResponse> resources = new LinkedList<>();
+        final QueryResponse result =
+            connection.query(
+                newAuthConnectionContext(),
+                newQueryRequest("all-users").setQueryFilter(NO_FILTER),
+                resources);
+
+        assertThat(resources).hasSize(10);
+        assertThat(result.getPagedResultsCookie()).isNull();
+        assertThat(result.getTotalPagedResults()).isEqualTo(-1);
+
+        assertThat(resources.get(0).getContent().get("_ou").isNotNull());
+        assertThat(resources.get(0).getContent().get("_ou").asString()).isEqualTo("level1");
+
+        assertThat(resources.get(1).getContent().get("_ou").isNotNull());
+        assertThat(resources.get(1).getContent().get("_ou").asString()).isEqualTo("level2");
+
+        assertThat(resources.get(2).getContent().get("_ou").isNull());
+        assertThat(resources.get(2).getId()).isEqualTo("sub2");
+
+        assertThat(resources.get(3).getContent().get("_ou").isNull());
+        assertThat(resources.get(3).getId()).isEqualTo("sub1");
+
+        assertThat(resources.get(4).getContent().get("_ou").isNull());
+        assertThat(resources.get(4).getId()).isEqualTo("test1");
+
+        assertThat(resources.get(5).getContent().get("_ou").isNull());
+        assertThat(resources.get(5).getId()).isEqualTo("test2");
+
+        assertThat(resources.get(6).getContent().get("_ou").isNull());
+        assertThat(resources.get(6).getId()).isEqualTo("test3");
+
+        assertThat(resources.get(7).getContent().get("_ou").isNull());
+        assertThat(resources.get(7).getId()).isEqualTo("test4");
+
+        assertThat(resources.get(8).getContent().get("_ou").isNull());
+        assertThat(resources.get(8).getId()).isEqualTo("test5");
+
+        assertThat(resources.get(9).getContent().get("_ou").isNull());
+        assertThat(resources.get(9).getId()).isEqualTo("test6");
+    }
 
     @Test
-    public void testQueryNone() throws Exception {
+    public void testQueryNoneWithNoSubtreeFlattening() throws Exception {
         final Connection connection = newConnection();
         final List<ResourceResponse> resources = new LinkedList<>();
         final QueryResponse result = connection.query(newAuthConnectionContext(),
@@ -135,6 +186,18 @@
     }
 
     @Test
+    public void testQueryNoneWithSubtreeFlattening() throws Exception {
+        final Connection connection = newConnection();
+        final List<ResourceResponse> resources = new LinkedList<>();
+        final QueryResponse result = connection.query(newAuthConnectionContext(),
+          newQueryRequest("all-users").setQueryFilter(QueryFilter.<JsonPointer> alwaysFalse()), resources);
+
+        assertThat(resources).hasSize(0);
+        assertThat(result.getPagedResultsCookie()).isNull();
+        assertThat(result.getTotalPagedResults()).isEqualTo(-1);
+    }
+
+    @Test
     public void testQueryPageResultsCookie() throws Exception {
         final Connection connection = newConnection();
         final List<ResourceResponse> resources = new ArrayList<>();
@@ -799,35 +862,46 @@
     private Rest2Ldap usersApi() throws IOException {
         return rest2Ldap(
             defaultOptions(),
-            resource("api").subResource(
-                collectionOf("user").dnTemplate("dc=test").useClientDnNaming("uid")),
-                resource("user").objectClasses("top", "person")
-                    .property(
-                        "schemas",
-                        constant(asList("urn:scim:schemas:core:1.0")))
-                    .property(
-                        "_id",
-                        simple("uid").isRequired(true).writability(CREATE_ONLY))
-                    .property(
-                        "_ou",
-                        simple("ou").isRequired(false).writability(CREATE_ONLY))
-                    .property(
-                        "name",
-                        object()
-                          .property("displayName", simple("cn").isRequired(true))
-                          .property("surname",     simple("sn").isRequired(true)))
-                    .property(
-                        "_rev",
-                        simple("etag").isRequired(true).writability(READ_ONLY))
-                    .property(
-                        "description",
-                        simple("description").isMultiValued(true))
-                    .property(
-                        "singleNumber",
-                        simple("singleNumber").decoder(byteStringToInteger()))
-                    .property(
-                        "multiNumber",
-                        simple("multiNumber").isMultiValued(true).decoder(byteStringToInteger()))
+            resource("api")
+                .subResource(
+                    collectionOf("user")
+                        .dnTemplate("dc=test")
+                        .useClientDnNaming("uid"))
+                .subResource(
+                    collectionOf("user")
+                        .urlTemplate("all-users")
+                        .dnTemplate("dc=test")
+                        .useClientDnNaming("uid")
+                        .isReadOnly(true)
+                        .flattenSubtree(true)),
+            resource("user")
+                .objectClasses("top", "person")
+                .property(
+                    "schemas",
+                    constant(asList("urn:scim:schemas:core:1.0")))
+                .property(
+                    "_id",
+                    simple("uid").isRequired(true).writability(CREATE_ONLY))
+                .property(
+                    "_ou",
+                    simple("ou").isRequired(false).writability(CREATE_ONLY))
+                .property(
+                    "name",
+                    object()
+                      .property("displayName", simple("cn").isRequired(true))
+                      .property("surname",     simple("sn").isRequired(true)))
+                .property(
+                    "_rev",
+                    simple("etag").isRequired(true).writability(READ_ONLY))
+                .property(
+                    "description",
+                    simple("description").isMultiValued(true))
+                .property(
+                    "singleNumber",
+                    simple("singleNumber").decoder(byteStringToInteger()))
+                .property(
+                    "multiNumber",
+                    simple("multiNumber").isMultiValued(true).decoder(byteStringToInteger()))
         );
     }
 

--
Gitblit v1.10.0