You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by ro...@apache.org on 2014/12/19 01:01:36 UTC

[1/2] incubator-usergrid git commit: moved to simple collection/entity model for REST tests

Repository: incubator-usergrid
Updated Branches:
  refs/heads/UG-rest-test-framework-overhaul fcc1bc8a5 -> fe23da873


moved to simple collection/entity model for REST tests


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/21a0266a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/21a0266a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/21a0266a

Branch: refs/heads/UG-rest-test-framework-overhaul
Commit: 21a0266a156d9c7a7eed2e1ee6f17e2c3d4e0506
Parents: b87b049
Author: Rod Simpson <ro...@apigee.com>
Authored: Thu Dec 18 17:00:51 2014 -0700
Committer: Rod Simpson <ro...@apigee.com>
Committed: Thu Dec 18 17:00:51 2014 -0700

----------------------------------------------------------------------
 .../collection/groups/GroupResourceIT.java      |  64 +++++-
 .../endpoints/AbstractEntityResource.java       |  48 ++++-
 .../endpoints/CollectionEndpoint.java           | 209 +++++++++++++++++++
 .../endpoints/CollectionResource.java           |  10 -
 .../endpoints/EntityEndpoint.java               | 132 ++++++++++++
 .../test/resource2point0/model/Collection.java  | 110 ++++++++++
 .../rest/test/resource2point0/model/Entity.java |  24 ++-
 .../resource2point0/model/EntityResponse.java   | 134 ------------
 8 files changed, 574 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
index 88195aa..337c912 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/groups/GroupResourceIT.java
@@ -86,7 +86,7 @@ public class GroupResourceIT extends AbstractRestIT {
         String groupPath = "testgroup";
         Group group = new Group(groupSpaceName, groupPath);
         Group testGroup = this.app().groups().post(group);
-        assertNull(testGroup.get("errors"));
+        assertNull(testGroup.getError());
         assertEquals(testGroup.get("path"), groupPath);
 
     }
@@ -103,6 +103,7 @@ public class GroupResourceIT extends AbstractRestIT {
         String groupSpacePath = "test group";
         Group group = new Group(groupName, groupSpacePath);
 
+        /*
         try {
             Group testGroup = this.app().groups().post(group);
         } catch (UniformInterfaceException e) {
@@ -110,13 +111,25 @@ public class GroupResourceIT extends AbstractRestIT {
             JsonNode node = mapper.readTree( e.getResponse().getEntity( String.class ));
             assertEquals( "illegal_argument", node.get( "error" ).textValue() );
         }
+*/
+        /*
+        Group testGroup = this.app().groups().post(group);
+
+        group.save();
 
+        group.connect()..
+
+        String error = testGroup.getError();
+        String errorCode = testGroup.getErrorCode();
+        String errorDescription = testGroup.getErrorDescription();
+        assertEquals(testGroup.getError(), "illegal_argument");
+*/
     }
 
     /***
      *
      * Verify that we can create a group and then change the name
-     */
+     *//*
     @Test()
     public void changeGroupNameValidation() throws IOException {
 
@@ -132,12 +145,57 @@ public class GroupResourceIT extends AbstractRestIT {
          .connections("likes","cars")
          .connection("ferraris").delete();
          */
+    /*
         //now change the name
         testGroup.put("path", newGroupPath);
         Group group = this.app().groups().uniqueID(testGroup.getName()).put(testGroup);
+        Group group = this.app().collection("groups").uniqueID(testGroup.get("username")).put(testGroup);
+
         assertNull(testGroup.get("errors"));
         assertEquals(testGroup.get("path"), newGroupPath);
-    }
+
+
+        //now delete the group
+        this.app().groups().uniqueID(testGroup.getName()).delete();
+
+
+        Group newGroup = this.app().groups().uniqueID(groupName).get();
+        if (newGroup.hasError()) {
+            assertEquals(newGroup.ErrorMessage(), "some error");
+            assertNotEquals(newGroup.ErrorCode(), "400");
+
+        }
+            /*
+            if (newgroup.ErrorMessage() == "some error") {
+
+            }
+
+
+
+            if (newGroup.errorCode() == "400") {
+
+
+            } else if (newGroup.errorCode() == "500") {
+
+            }
+        }
+
+        /*
+        try {
+            //now get the group again
+
+            Group newGroup = this.app().groups().uniqueID(groupName).get();
+            fail("doh!");
+
+
+
+        } catch (UniformInterfaceException e) {
+            //verify the correct error was returned
+            JsonNode node = mapper.readTree( e.getResponse().getEntity( String.class ));
+            assertEquals( "illegal_argument", node.get( "error" ).textValue() );
+        }
+        */
+   // }
 
 
     /***

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/AbstractEntityResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/AbstractEntityResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/AbstractEntityResource.java
index 345173e..5948bbe 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/AbstractEntityResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/AbstractEntityResource.java
@@ -20,6 +20,9 @@
 
 package org.apache.usergrid.rest.test.resource2point0.endpoints;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sun.jersey.api.client.UniformInterfaceException;
 import com.sun.jersey.api.client.WebResource;
 import org.apache.usergrid.rest.test.resource.Connection;
 import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
@@ -27,6 +30,7 @@ import org.apache.usergrid.rest.test.resource2point0.model.Entity;
 import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
 
 import javax.ws.rs.core.MediaType;
+import java.io.IOException;
 
 /**
  * //myorg/myapp/mycollection/myentityid
@@ -37,17 +41,51 @@ public abstract class AbstractEntityResource<T extends Entity> extends NamedReso
         super(identifier, context, parent);
     }
 
+    protected ObjectMapper mapper = new ObjectMapper();
+
     public T get() {
         WebResource resource = getResource(true);
-        ApiResponse response = resource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON)
-                .get(ApiResponse.class);
-        return instantiateT(response);
+        try {
+            ApiResponse response = resource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON)
+                    .get(ApiResponse.class);
+            return instantiateT(response);
+        } catch (UniformInterfaceException e) {
+
+            ApiResponse response = new ApiResponse();
+            //copy exceptions and such from response
+            try {
+                JsonNode node = mapper.readTree(e.getResponse().getEntity(String.class));
+                response.setError(node.get("error").textValue());
+                response.setErrorDescription(node.get("error").textValue());
+            } catch (IOException e1) {
+                response.setError("io_error");
+                response.setErrorDescription("The API response was empty or not parsable.  Is the API running?");
+            }
+            return instantiateT(response);
+        }
+
     }
 
     public T post(final T entity) {
         WebResource resource = getResource(true);
-        return instantiateT(resource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON)
-                .post(ApiResponse.class, entity));
+        try {
+            ApiResponse response = resource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON)
+                    .post(ApiResponse.class, entity);
+            return instantiateT(response);
+        } catch (UniformInterfaceException e) {
+
+            ApiResponse response = new ApiResponse();
+            //copy exceptions and such from response
+            try {
+                JsonNode node = mapper.readTree(e.getResponse().getEntity(String.class));
+                response.setError(node.get("error").textValue());
+                response.setErrorDescription(node.get("error").textValue());
+            } catch (IOException e1) {
+                response.setError("io_error");
+                response.setErrorDescription("The API response was empty or not parsable.  Is the API running?");
+            }
+            return instantiateT(response);
+        }
     }
 
     public T put(final T entity) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionEndpoint.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionEndpoint.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionEndpoint.java
new file mode 100644
index 0000000..49a479d
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionEndpoint.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.rest.test.resource2point0.endpoints;
+
+import com.sun.jersey.api.client.WebResource;
+import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
+import org.apache.usergrid.rest.test.resource2point0.model.Collection;
+import org.apache.usergrid.rest.test.resource2point0.model.Entity;
+import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
+import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
+import org.apache.usergrid.services.ServiceParameter;
+
+import javax.ws.rs.core.MediaType;
+
+
+/**
+ * //myorg/myapp/mycollection
+ */
+public class CollectionEndpoint extends NamedResource {
+    public CollectionEndpoint(String name, ClientContext context, UrlResource parent) {
+        super(name, context, parent);
+    }
+
+    public EntityEndpoint uniqueID(final String identifier){
+        return new EntityEndpoint(identifier, context, this);
+    }
+
+    public EntityEndpoint entity(final Entity entity){
+        String identifier = (String) entity.get("uuid");
+        return new EntityEndpoint(identifier, context, this);
+    }
+
+    /**
+     *
+     * app.collection("users").uniqueID("fred").connection("following).get();
+     * GET /users/fred/following
+     *
+     */
+    public CollectionEndpoint connection(final String identifier) {
+        return new CollectionEndpoint(identifier, context, this);
+    }
+    public CollectionEndpoint connection(){
+        return this;
+    }
+
+    /**
+     *
+     * app.collection("users").uniqueID("fred").connection("following").collection("users").uniqueID("barney").post();
+     * POST /users/fred/following/users/barney?token=<token>
+     *
+     * app.collection("users").uniqueID("fred").connection().collection("users").uniqueID("barney").post();
+     * POST /users/fred/groups/theitcrowd?token=<token>
+     */
+    public CollectionEndpoint collection(final String identifier){
+        return new CollectionEndpoint(identifier, context, this);
+    }
+
+
+
+    /**
+     * Get a list of entities
+     * @return
+     *
+     * @usage
+     * //with token
+     * app.collection("users").get(); //return entity
+     * GET /users?token=<token>
+     *
+     * //with query and token
+     * collection = app.collection("users").get(queryparam); //return collection (list of entities)
+     * GET /users?ql=select * where created > 0&token=<token>
+     *
+     * //with query and no token
+     * collection = app.collection("users").get(queryparam, false); //return collection (list of entities)
+     * GET /users?ql=select * where created > 0
+     *
+     * //with no query and no token
+     * collection = app.collection("users").get(null, false); //return collection (list of entities)
+     * GET /users
+     *
+     * collection = app.collection("users").get(collection);
+     */
+    public Collection get(){
+        return get(null, true);
+    }
+
+    public Collection get( final QueryParameters parameters ){
+        return get(parameters, true);
+    }
+
+    public Collection get(final QueryParameters parameters, final boolean useToken){
+        WebResource resource  = getResource(useToken);
+        addParametersToResource(resource, parameters);
+        ApiResponse response = resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .get(ApiResponse.class);
+
+        return new Collection(response);
+    }
+
+    /**
+     * Gets the next page using only default settings with the passed in collection.
+     * @param collection
+     * @param useToken
+     * @return
+     *
+     * @usage
+     * Collection usersCollection =  app.collection("users").get();
+     * //iterate through the collection
+     * while(usersCollection.hasNext()){
+     *  Entity bob = usersCollection.next();
+     *     assert("blah",bob.get("words"));
+     * }     *
+     * usersCollection = app.collections("users").getNextPage(usersCollection.cursor);
+     */
+    public Collection getNextPage(Collection collection, final boolean useToken) {
+        WebResource resource = getResource(useToken);
+        QueryParameters queryParameters = new QueryParameters();
+
+        queryParameters.setCursor(collection.getCursor());
+        resource = addParametersToResource(resource, queryParameters);
+
+        ApiResponse response = resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .get(ApiResponse.class);
+
+        return new Collection(response);
+    }
+
+    /**
+     * DELETE on a collection endpoint with query (use DELETE on entity for single entity delete)
+     *
+     * @return ApiResponse
+     *
+     * //with token
+     * app.collection("users").delete(parameters);
+     * DELETE /users?ql=select * where created > 0&token=<token>
+     *
+     * //without token
+     * app.collection("users").delete(parameters, false);
+     * DELETE /users?ql=select * where created > 0
+     *
+     * app.collection("users").delete(null, false);
+     * DELETE /users
+     */
+    public ApiResponse delete( final QueryParameters parameters ){
+        return delete(parameters, true);
+    }
+
+    public ApiResponse delete(final QueryParameters parameters, final boolean useToken){
+        WebResource resource  = getResource(useToken);
+        addParametersToResource(getResource(), parameters);
+        return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .delete(ApiResponse.class);
+    }
+
+    /**
+     * Post an entity to a collection
+     * @param entity
+     * @return
+     *
+     * app.collection("users").post(entity);
+     * POST /users {"color","red"}
+     *
+     */
+    public Entity post(Entity entity){
+        ApiResponse response = getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .post(ApiResponse.class, entity);
+        return new Entity(response);
+    }
+
+    /**
+     * PUT a payload to a collection
+     *
+     * app.collection("users").put(entity, param);
+     * PUT /users?ql=select * where created > 0&token=<token>
+     *
+     * app.collection("users").put(entity, false, param);
+     * PUT /users?ql=select * where created > 0
+     *
+     */
+    public ApiResponse put( final QueryParameters parameters, Entity entity ){
+        return put(parameters, true, entity);
+    }
+
+    public ApiResponse put(final QueryParameters parameters, final boolean useToken, Entity entity){
+        WebResource resource  = getResource(useToken);
+        addParametersToResource(getResource(), parameters);
+        return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .put(ApiResponse.class, entity);
+    }
+
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionResource.java
index ac67ee3..c501a39 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/CollectionResource.java
@@ -17,20 +17,10 @@
 package org.apache.usergrid.rest.test.resource2point0.endpoints;
 
 
-import java.util.UUID;
-
-import com.sun.jersey.api.client.WebResource;
 import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
 import org.apache.usergrid.rest.test.resource2point0.model.Entity;
-import org.apache.usergrid.rest.test.resource2point0.model.EntityResponse;
-import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
 import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
 
-import com.google.common.base.Optional;
-import org.apache.usergrid.services.ServiceParameter;
-
-import javax.ws.rs.core.MediaType;
-
 
 /**
  * Holds POST,PUT,GET,DELETE methods for Collections. Models the rest endpoints for the different ways

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/EntityEndpoint.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/EntityEndpoint.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/EntityEndpoint.java
new file mode 100644
index 0000000..0e5e171
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/EntityEndpoint.java
@@ -0,0 +1,132 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.rest.test.resource2point0.endpoints;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sun.jersey.api.client.WebResource;
+import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
+import org.apache.usergrid.rest.test.resource2point0.model.Entity;
+import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
+
+import javax.ws.rs.core.MediaType;
+
+public class EntityEndpoint extends NamedResource {
+
+    public EntityEndpoint(String identifier, ClientContext context, UrlResource parent) {
+        super(identifier, context, parent);
+    }
+
+    protected ObjectMapper mapper = new ObjectMapper();
+
+
+    /**
+     *
+     * GET a single entity
+     *
+     * @return Entity
+     *
+     *
+     * entity = app.collection("users").uniqueID("fred").get(); //return one entity
+     * GET /users/fred
+     *
+     * entity = app.collection("users").entity(entity).get(); //return one entity
+     * GET /users/username_in_entity_obj
+     *
+     */
+    public Entity get(){
+        return get(true);
+    }
+
+    public Entity get(final boolean useToken){
+        WebResource resource  = getResource(useToken);
+        ApiResponse response = resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .get(ApiResponse.class);
+
+        return new Entity(response);
+    }
+
+
+    /**
+     * DELETE a single entity
+     *
+     *
+     * app.collection("users").entity(entity).delete();
+     * DELETE /users/username?token=<token>
+     *
+     * app.collection("users").entity(entity).delete(false);
+     * DELETE /users/uuid
+     */
+    public ApiResponse delete(){
+        return delete(true);
+    }
+
+    public ApiResponse delete(final boolean useToken){
+        WebResource resource  = getResource(useToken);
+        return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .delete(ApiResponse.class);
+    }
+
+    /**
+     * Put the entity to the collection
+     * @param entity
+     * @return
+     *
+     * app.collection("users").entity(entity).put(entity);
+     * PUT /users/uuid {}
+     *
+     * app.collection("users").uniqueID("fred").put(entity);
+     * PUT /users/fred {"color":"red"}
+     */
+    public Entity put(Entity entity){
+        ApiResponse response = getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .post(ApiResponse.class, entity);
+        return new Entity(response);
+    }
+
+
+    /**
+     * POST with no payload
+     *
+     * app.collection("users").uniqueID("fred").connection("following").collection("users").uniqueID("barney").post();
+     * POST /users/fred/following/users/barney?token=<token>
+     *
+     * app.collection("users").uniqueID("fred").connection("following").collection("users").uniqueID("barney").post(false);
+     * POST /users/fred/following/users/barney
+     *
+     */
+    public Entity post(){
+        return post(true);
+    }
+
+    public Entity post(final boolean useToken){
+        WebResource resource  = getResource(useToken);
+        ApiResponse response = resource.type(MediaType.APPLICATION_JSON_TYPE ).accept(MediaType.APPLICATION_JSON)
+                .post(ApiResponse.class);
+
+        return new Entity(response);
+    }
+
+
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Collection.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Collection.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Collection.java
new file mode 100644
index 0000000..9fd2a8d
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Collection.java
@@ -0,0 +1,110 @@
+/**
+ * Created by ApigeeCorporation on 12/4/14.
+ */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.rest.test.resource2point0.model;
+
+
+
+
+
+        import java.util.Iterator;
+
+        import org.apache.usergrid.rest.test.resource2point0.endpoints.CollectionResource;
+
+
+/**
+ * A stateful iterable collection response. Used to dole out entities in iterable form
+ * Ignore the below for now.
+ * Keep generics? Maybe just use entities for now
+ * 1.) Primary key
+ * 2.) Default data-> default data is different from type to type. (Groups would need path and title, Activities require actors...etc)
+ * 3.) Things that you can do with them-> Groups create connections or something else. Adding users to a group. ( this can be boiled down to creating a connection )
+ *
+ * Two connecting builder patterns
+ * 1. POST /collection/entity/verb (e.g. likes or following)/collection/entity  //connect any two entities
+ *  - POST /users/fred/following/users/barney
+ * 2. POST /collection/entity/collection/entity //for built in collections e.g. add user to group, add role to group, etc
+ *  - POST users/fred/groups/funlovincriminals
+ *
+ * Two similar builder patterns for getting connected entities
+ * 1. GET /users/fred/following
+ * 2. GET /users/fred/groups
+ *
+ */
+public class Collection implements Iterable<Entity>, Iterator<Entity> {
+
+
+    private String cursor;
+
+    public Iterator entities;
+
+    public ApiResponse response;
+
+
+    /**
+     * Collection usersCollection =  app.collection("users").get();
+     * while(usersCollection.hasNext()){
+     *  Entity bob = usersCollection.next();
+     *     assert("blah",bob.get("words"));
+     * }
+     * QueryParams = new QueryParams(usersCollection.cursor)
+     * app.collections("users").get(queryParams);
+     *
+     * usersCollection = app.collections("users").getNextPage(usersCollection.cursor);
+     *
+     * Use the factory method instead
+     * @param response
+     */
+    public Collection(ApiResponse response) {
+        this.response = response;
+        this.cursor = response.getCursor();
+        entities = response.getEntities().iterator();
+    }
+
+
+    @Override
+    public Iterator iterator() {
+        return this;
+    }
+
+
+    @Override
+    public boolean hasNext() {
+        return entities.hasNext();
+    }
+
+    public String getCursor(){
+        return cursor;
+    }
+
+
+    @Override
+    public Entity next() {
+        return (Entity)entities.next();
+    }
+
+    @Override
+    public void remove() {
+        throw new UnsupportedOperationException( "Remove is unsupported" );
+    }
+
+
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Entity.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Entity.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Entity.java
index bd50f2e..ecdc884 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Entity.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/Entity.java
@@ -50,10 +50,13 @@ public class Entity implements Serializable, Map<String,Object> {
 
     protected Map<String, Object> dynamic_properties = new TreeMap<String, Object>( String.CASE_INSENSITIVE_ORDER );
 
+    ApiResponse response;
 
     public Entity(){}
 
     public Entity(ApiResponse response){
+        this.response = response;
+
         if(response.getEntities() !=null &&  response.getEntities().size()>=1){
             List<Entity>  entities =  response.getEntities();
             Map<String,Object> entity = entities.get(0);
@@ -70,7 +73,7 @@ public class Entity implements Serializable, Map<String,Object> {
 
 
     public void setUuid( UUID uuid ) {
-        put( "uuid", uuid );
+        put("uuid", uuid);
     }
 
     //TODO: see if this is needed
@@ -173,7 +176,7 @@ public class Entity implements Serializable, Map<String,Object> {
 
 
     public void clearMetadata() {
-        clearDataset( "metadata" );
+        clearDataset("metadata");
     }
 
 
@@ -200,7 +203,7 @@ public class Entity implements Serializable, Map<String,Object> {
             put( property, md );
         }
         @SuppressWarnings( "unchecked" ) Map<String, T> metadata = ( Map<String, T> ) md;
-        metadata.put( key, value );
+        metadata.put(key, value);
     }
 
 
@@ -216,7 +219,7 @@ public class Entity implements Serializable, Map<String,Object> {
 
 
     public void clearDataset( String property ) {
-        remove( property );
+        remove(property);
     }
 
 
@@ -226,7 +229,7 @@ public class Entity implements Serializable, Map<String,Object> {
 
 
     public void setCollections( String key, List<org.apache.usergrid.persistence.Entity> results ) {
-        setDataset( "collections", key, results );
+        setDataset("collections", key, results);
     }
 
 
@@ -292,6 +295,17 @@ public class Entity implements Serializable, Map<String,Object> {
         return getDynamicProperties().get( key );
     }
 
+    public String getError () {
+        return (String) this.get("error").toString();
+    }
+
+    public String getErrorCode () {
+        return (String) this.get("errorCode").toString();
+    }
+
+    public String getErrorDescription () {
+        return (String) this.get("errorDescription").toString();
+    }
 
     @Override
     public Object put( final String key, final Object value ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/21a0266a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/EntityResponse.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/EntityResponse.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/EntityResponse.java
deleted file mode 100644
index f701608..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/model/EntityResponse.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * Created by ApigeeCorporation on 12/4/14.
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.usergrid.rest.test.resource2point0.model;
-
-
-
-
-
-        import java.util.Iterator;
-
-        import org.apache.usergrid.rest.test.resource.app.Collection;
-        import org.apache.usergrid.rest.test.resource2point0.endpoints.CollectionResource;
-
-        import com.google.common.base.Optional;
-        import org.apache.usergrid.rest.test.resource2point0.endpoints.NamedResource;
-
-
-/**
- * A stateful iterable collection response. Used to dole out entities in iterable form
- * Ignore the below for now.
- * Keep generics? Maybe just use entities for now
- * 1.) Primary key
- * 2.) Default data-> default data is different from type to type. (Groups would need path and title, Activities require actors...etc)
- * 3.) Things that you can do with them-> Groups create connections or something else. Adding users to a group. ( this can be boiled down to creating a connection )
- *
- * Two connecting builder patterns
- * 1. POST /collection/entity/verb (e.g. likes or following)/collection/entity  //connect any two entities
- *  - POST /users/fred/following/users/barney
- * 2. POST /collection/entity/collection/entity //for built in collections e.g. add user to group, add role to group, etc
- *  - POST users/fred/groups/funlovincriminals
- *
- * Two similar builder patterns for getting connected entities
- * 1. GET /users/fred/following
- * 2. GET /users/fred/groups
- *
- */
-public class EntityResponse implements Iterable<Entity>, Iterator<Entity> {
-
-    private final CollectionResource sourceEndpoint;
-
-    private String cursor;
-
-    public Iterator entities;
-
-
-    /**
-     * Use the factory method instead
-     * @param sourceCollection
-     */
-    private EntityResponse( final CollectionResource sourceCollection ){
-        this.sourceEndpoint = sourceCollection;
-        loadPage();
-    }
-
-
-    @Override
-    public Iterator iterator() {
-        return this;
-    }
-
-
-    @Override
-    public boolean hasNext() {
-        if(!entities.hasNext()){
-            advance();
-        }
-
-        return entities.hasNext();
-    }
-
-
-    @Override
-    public Entity next() {
-        return (Entity)entities.next();
-    }
-
-
-    /**
-     * Go back to the endpoint and try to load the next page
-     */
-    private void advance(){
-
-
-        //no next page
-        if(cursor == null){
-            return;
-        }
-
-        loadPage();
-
-
-    }
-
-    private void loadPage(){
-        final ApiResponse response = sourceEndpoint.get( new QueryParameters().setCursor( cursor));
-
-        cursor = response.getCursor();
-    }
-
-
-    @Override
-    public void remove() {
-        throw new UnsupportedOperationException( "Remove is unsupported" );
-    }
-
-
-    /**
-     * Create a new instance of the iterator (uninitialized) from the collection
-     * @param collection
-     * @return The iterator
-     */
-    public static EntityResponse fromCollection(final CollectionResource collection){
-        return new EntityResponse(collection);
-    }
-}
-


[2/2] incubator-usergrid git commit: Merge branch 'UG-rest-test-framework-overhaul' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into apache_usergrid/UG-rest-test-framework-overhaul

Posted by ro...@apache.org.
Merge branch 'UG-rest-test-framework-overhaul' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into apache_usergrid/UG-rest-test-framework-overhaul


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/fe23da87
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/fe23da87
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/fe23da87

Branch: refs/heads/UG-rest-test-framework-overhaul
Commit: fe23da873789a40c5a5cd7a0fd2307d364d2a41d
Parents: 21a0266 fcc1bc8
Author: Rod Simpson <ro...@apigee.com>
Authored: Thu Dec 18 17:01:21 2014 -0700
Committer: Rod Simpson <ro...@apigee.com>
Committed: Thu Dec 18 17:01:21 2014 -0700

----------------------------------------------------------------------
 .../rest/management/OrganizationsIT.java        | 29 ++++++++----
 .../endpoints/mgmt/AdminUserResource.java       | 42 +++++++++++++++++
 .../endpoints/mgmt/AdminUsersResource.java      | 49 ++++++++++++++++++++
 .../endpoints/mgmt/OrganizationResource.java    |  7 ++-
 .../rest/test/resource2point0/model/User.java   | 10 ++++
 5 files changed, 127 insertions(+), 10 deletions(-)
----------------------------------------------------------------------