From aa9f89dcd4a5c3cd98c6829ce3b4520ab4d39587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 24 Sep 2010 12:47:03 +0000 Subject: [PATCH] added tests --- .../mysema/query/mongodb/MongodbQuery.java | 28 ++++++---- .../query/mongodb/MongodbQueryTest.java | 51 +++++++++++++++---- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java index 8fae52197..831b83e70 100644 --- a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java @@ -68,19 +68,16 @@ public class MongodbQuery implements SimpleQuery>, @Override public MongodbQuery limit(long limit) { - //TODO Add support return queryMixin.limit(limit); } @Override public MongodbQuery offset(long offset) { - //TODO Add support return queryMixin.offset(offset); } @Override public MongodbQuery restrict(QueryModifiers modifiers) { - //TODO Implement this return queryMixin.restrict(modifiers); } @@ -127,15 +124,20 @@ public class MongodbQuery implements SimpleQuery>, } return results; } - + private DBCursor createCursor() { QueryMetadata metadata = queryMixin.getMetadata(); - // Long queryLimit = metadata.getModifiers().getLimit(); - // Long queryOffset = metadata.getModifiers().getOffset(); + QueryModifiers modifiers = metadata.getModifiers(); //This is bit weird, but without it, repeated lists fail to have valid objects cache.flush(); DBCursor cursor = coll.find(createQuery()); + if (modifiers.getLimit() != null){ + cursor.limit(modifiers.getLimit().intValue()); + } + if (modifiers.getOffset() != null){ + cursor.skip(modifiers.getOffset().intValue()); + } if (metadata.getOrderBy().size() > 0) { cursor.sort(serializer.toSort(metadata.getOrderBy())); } @@ -144,7 +146,7 @@ public class MongodbQuery implements SimpleQuery>, @Override public List listDistinct() { - throw new UnsupportedOperationException(); + return list(); } @Override @@ -155,13 +157,17 @@ public class MongodbQuery implements SimpleQuery>, @Override public SearchResults listResults() { - //TODO Do this - throw new UnsupportedOperationException(); + long total = count(); + if (total > 0l){ + return new SearchResults(list(), queryMixin.getMetadata().getModifiers(), total); + }else{ + return SearchResults.emptyResults(); + } } @Override public SearchResults listDistinctResults() { - throw new UnsupportedOperationException(); + return listResults(); } @Override @@ -171,7 +177,7 @@ public class MongodbQuery implements SimpleQuery>, @Override public long countDistinct() { - throw new UnsupportedOperationException(); + return count(); } private DBObject createQuery() { diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java index 5c7278fe3..7c8318e79 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java @@ -8,6 +8,8 @@ package com.mysema.query.mongodb; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; +import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -17,6 +19,7 @@ import org.junit.Test; import com.google.code.morphia.Datastore; import com.google.code.morphia.Morphia; +import com.mysema.query.SearchResults; import com.mysema.query.mongodb.domain.QUser; import com.mysema.query.mongodb.domain.User; import com.mysema.query.types.OrderSpecifier; @@ -51,6 +54,39 @@ public class MongodbQueryTest { assertEquals(4, query().count()); } + @Test + public void testOrder(){ + List users = query().orderBy(user.age.asc()).list(); + assertEquals(Arrays.asList(u1, u2, u3, u4), users); + + users = query().orderBy(user.age.desc()).list(); + assertEquals(Arrays.asList(u4, u3, u2, u1), users); + } + + @Test + public void testRestrict(){ + assertEquals(Arrays.asList(u1, u2), query().limit(2).orderBy(user.age.asc()).list()); + assertEquals(Arrays.asList(u2, u3), query().limit(2).offset(1).orderBy(user.age.asc()).list()); + } + + @Test + public void testListResults(){ + SearchResults results = query().limit(2).orderBy(user.age.asc()).listResults(); + assertEquals(4l, results.getTotal()); + assertEquals(2, results.getResults().size()); + + results = query().offset(2).orderBy(user.age.asc()).listResults(); + assertEquals(4l, results.getTotal()); + assertEquals(2, results.getResults().size()); + } + + @Test + public void testEmptyResults(){ + SearchResults results = query().where(user.firstName.eq("XXX")).listResults(); + assertEquals(0l, results.getTotal()); + assertEquals(Collections.emptyList(), results.getResults()); + } + @Test public void testEqInAndOrderByQueries() { @@ -132,17 +168,10 @@ public class MongodbQueryTest { } @Test - public void testUniqueResultAndLimitAndOffset() { - - MongodbQuery q = query().where(user.firstName.startsWith("Ja")).orderBy(user.age.asc()); - - assertEquals(4, q.list().size()); - - assertEquals(u1, q.uniqueResult()); - - - - + public void testUniqueResultAndLimitAndOffset() { + MongodbQuery q = query().where(user.firstName.startsWith("Ja")).orderBy(user.age.asc()); + assertEquals(4, q.list().size()); + assertEquals(u1, q.uniqueResult()); }