RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection"); requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection");
resourceParams.put("hint", "_id_"); RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection"); requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection");
@Test public void testGetStorageCollectionsQuery() throws Exception { DBCollection collection = db.getCollection("testQueryCollection"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQueryCollection", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // This should return 3 items // SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "[{$group:{_id:{country:'$country'},numPeople:{$sum:1}}}]"); RequestContext requestContext = new RequestContext.Builder() .returnFields(new DefaultReturnFields("*(*)")) .resourceParams(resourceParams) .build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection/_aggregate"); // verify response assertThat(result).isNotNull(); assertThat(result.id()).isEqualTo("_aggregate"); assertThat(result.getProperty("result")).isNotNull(); assertThat(result.getProperty("result")).isInstanceOf(List.class); List results = (List) result.getProperty("result"); assertThat(results.size()).isEqualTo(3); Set countries = checkAggregateItems(results); Set expected = new HashSet(Arrays.asList(new String[] { "DE", "FR", "US" })); assertThat(countries).isEqualTo(expected); }
.returnFields(new DefaultReturnFields("*(*)")) .sorting(new Sorting("lastName,-name")) .resourceParams(resourceParams).build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testSortCollection"); .returnFields(new DefaultReturnFields("*(*)")) .sorting(new Sorting("lastName,-name")) .resourceParams(resourceParams) .pagination(new DefaultPagination(0, 2)).build(); .returnFields(new DefaultReturnFields("*(*)")) .sorting(new Sorting("lastName,-name")) .resourceParams(resourceParams) .pagination(new DefaultPagination(2, 2)).build(); .returnFields(new DefaultReturnFields("*(*)")) .sorting(new Sorting("lastName,-name")) .resourceParams(resourceParams) .pagination(new DefaultPagination(4, 2)).build();
RequestContext requestContext = new RequestContext.Builder() .returnFields(new DefaultReturnFields("*(*)")) .resourceParams(resourceParams) .build();
@Test public void queryNonExistantIndex() throws Exception { DBCollection collection = db.getCollection("testQueryNonExistantIndex"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQueryCollection", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // This should return 2 items SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "{lastName:{$gt:'E', $lt:'R'}}"); resourceParams.put("hint", "foobar"); // NOTE: foobar does not correspond to an index we can use RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); try { client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection"); Fail.fail(); } catch (ResourceException iee) { // TODO fix me //assertThat(iee.message()).isEqualTo("Exception encountered trying to fetch data from the Mongo Database"); // Note: tying the test results to the internal mechanisms of Mongo is not a good idea, but // its the only way to make sure that the exception is because of the failure we want. //assertThat(iee.getCause().getClass().getName()).isEqualTo("com.mongodb.MongoException"); //assertThat(iee.getCause().getMessage()).isEqualTo("bad hint"); } // Rempve collection client.delete(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection"); }
@Test public void queryMalformedIndex() throws Exception { DBCollection collection = db.getCollection("testQueryMalformedIndex"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQueryCollection", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // This should return 2 items SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "{lastName:{$gt:'E', $lt:'R'}}"); resourceParams.put("hint", "{foobar, 1}"); // NOTE: foobar does not correspond to an index we can use RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); try { client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollection"); Fail.fail(); } catch (NotAcceptableException iee) { // TODO fix this //assertThat(iee.message()).isEqualTo("Invalid JSON format for the 'hint' parameter"); //assertThat(iee.getCause().getClass().getName()).isEqualTo("com.mongodb.util.JSONParseException"); } }
@Test public void getStorageCollectionsQueryAndSort() throws Exception { DBCollection collection = db.getCollection("testQuerySortCollection"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQuerySortCollection", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // going through DirectConnector will bypass phase where container sets up Pagination, Sorting, ReturnFields // so resourceParams are only relevant for 'q' parameter SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "{country:{$ne:'FR'}}"); // This should return 4 items ordered by lastName descending and name ascending RequestContext requestContext = new RequestContext.Builder() .returnFields(new DefaultReturnFields("*(*)")) .sorting(new Sorting("-lastName,name")) .resourceParams(resourceParams).build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQuerySortCollection"); String[] expectedAry = {"Helga", "Hans", "Jane", "John"}; assertThat(expectedAry).isEqualTo(getNames(result)); }
@Test public void getStorageCollectionsInvalidQueryString() throws Exception { DBCollection collection = db.getCollection("testQueryCollectionInvalid"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQueryCollectionInvalid", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // This should return 2 items SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "{lastName,\"foo\"}"); RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); try { client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollectionInvalid"); Fail.fail(); } catch (NotAcceptableException iee) { // TODO fix me //assertThat(iee.message()).isEqualTo("Invalid JSON format for the 'query' parameter"); //assertThat(iee.getCause().getClass().getName()).isEqualTo("com.mongodb.util.JSONParseException"); } }
@Test public void getStorageCollectionsQueryNoResult() throws Exception { DBCollection collection = db.getCollection("testQueryCollectionNoResults"); if (collection != null) { collection.drop(); } collection = db.createCollection("testQueryCollectionNoResults", new BasicDBObject("count", 0)); // insert data records for the test setupPeopleData(collection); assertThat(collection.count()).isEqualTo(6); // This should return 2 items SimpleResourceParams resourceParams = new SimpleResourceParams(); resourceParams.put("q", "{lastName:\"foo\"}"); RequestContext requestContext = new RequestContext.Builder().returnFields(new DefaultReturnFields("*(*)")).resourceParams(resourceParams).build(); ResourceState result = client.read(requestContext, "/testApp/" + BASEPATH + "/testQueryCollectionNoResults"); // verify response assertThat(result).isNotNull(); assertThat(result.id()).isEqualTo("testQueryCollectionNoResults"); assertThat(result.getProperty("type")).isEqualTo("collection"); assertThat(result.members().size()).isEqualTo(0); }