diff options
author | Eric Avdey <eiri@eiri.ca> | 2017-07-07 16:54:59 -0300 |
---|---|---|
committer | Nick Vatamaniuc <nickva@users.noreply.github.com> | 2017-07-13 12:28:15 -0400 |
commit | 779f00e2bd8fa6a59be112418801def559623c8a (patch) | |
tree | dfa07d4d904d8a0d0fd9ce39330aaf2b2cc2c13c | |
parent | 022925aefb8bbdc9ff818beff4c6f37382f1f248 (diff) | |
download | couchdb-779f00e2bd8fa6a59be112418801def559623c8a.tar.gz |
Add tests for queries against _users db
-rw-r--r-- | src/mango/test/13-users-db-find-test.py | 83 | ||||
-rw-r--r-- | src/mango/test/mango.py | 11 | ||||
-rw-r--r-- | src/mango/test/user_docs.py | 36 |
3 files changed, 130 insertions, 0 deletions
diff --git a/src/mango/test/13-users-db-find-test.py b/src/mango/test/13-users-db-find-test.py new file mode 100644 index 000000000..d8d32ad93 --- /dev/null +++ b/src/mango/test/13-users-db-find-test.py @@ -0,0 +1,83 @@ +# -*- coding: latin-1 -*- +# Licensed 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. + + +import mango, requests + + +class UsersDbFindTests(mango.UsersDbTests): + + def test_simple_find(self): + docs = self.db.find({"name": {"$eq": "demo02"}}) + assert len(docs) == 1 + assert docs[0]["_id"] == "org.couchdb.user:demo02" + + def test_multi_cond_and(self): + self.db.create_index(["type", "roles"]) + docs = self.db.find({"type": "user", "roles": {"$eq": ["reader"]}}) + assert len(docs) == 1 + assert docs[0]["_id"] == "org.couchdb.user:demo02" + + def test_multi_cond_or(self): + docs = self.db.find({ + "$and":[ + {"type": "user"}, + {"$or": [ + {"order": 1}, + {"order": 3} + ]} + ] + }) + assert len(docs) == 2 + assert docs[0]["_id"] == "org.couchdb.user:demo01" + assert docs[1]["_id"] == "org.couchdb.user:demo03" + + def test_sort(self): + self.db.create_index(["order", "name"]) + selector = {"name": {"$gt": "demo01"}} + docs1 = self.db.find(selector, sort=[{"order": "asc"}]) + docs2 = list(sorted(docs1, key=lambda d: d["order"])) + assert docs1 is not docs2 and docs1 == docs2 + + docs1 = self.db.find(selector, sort=[{"order": "desc"}]) + docs2 = list(reversed(sorted(docs1, key=lambda d: d["order"]))) + assert docs1 is not docs2 and docs1 == docs2 + + def test_fields(self): + selector = {"name": {"$eq": "demo02"}} + docs = self.db.find(selector, fields=["name", "order"]) + assert len(docs) == 1 + assert sorted(docs[0].keys()) == ["name", "order"] + + def test_empty(self): + docs = self.db.find({}) + assert len(docs) == 3 + + +class UsersDbIndexFindTests(UsersDbFindTests): + + def setUp(self): + self.db.create_index(["name"]) + + def test_multi_cond_and(self): + self.db.create_index(["type", "roles"]) + super(UsersDbIndexFindTests, self).test_multi_cond_and() + + def test_multi_cond_or(self): + self.db.create_index(["type", "order"]) + super(UsersDbIndexFindTests, self).test_multi_cond_or() + + def test_sort(self): + self.db.create_index(["order", "name"]) + super(UsersDbIndexFindTests, self).test_sort() + diff --git a/src/mango/test/mango.py b/src/mango/test/mango.py index da51180b1..bd34edcec 100644 --- a/src/mango/test/mango.py +++ b/src/mango/test/mango.py @@ -192,6 +192,17 @@ class Database(object): return None +class UsersDbTests(unittest.TestCase): + + @classmethod + def setUpClass(klass): + klass.db = Database("127.0.0.1", "15984", "_users") + user_docs.setup_users(klass.db) + + def setUp(self): + self.db = self.__class__.db + + class DbPerClass(unittest.TestCase): @classmethod diff --git a/src/mango/test/user_docs.py b/src/mango/test/user_docs.py index e2f1705b0..41d860287 100644 --- a/src/mango/test/user_docs.py +++ b/src/mango/test/user_docs.py @@ -54,6 +54,11 @@ With this pattern: import copy +def setup_users(db, **kwargs): + db.recreate() + db.save_docs(copy.deepcopy(USERS_DOCS)) + + def setup(db, index_type="view", **kwargs): db.recreate() db.save_docs(copy.deepcopy(DOCS)) @@ -488,3 +493,34 @@ DOCS = [ ] } ] + + +USERS_DOCS = [ + { + "_id": "org.couchdb.user:demo01", + "name": "demo01", + "username": "demo01", + "password": "apple01", + "roles": ["design"], + "order": 1, + "type": "user" + }, + { + "_id": "org.couchdb.user:demo02", + "name": "demo02", + "username": "demo02", + "password": "apple02", + "roles": ["reader"], + "order": 2, + "type": "user" + }, + { + "_id": "org.couchdb.user:demo03", + "name": "demo03", + "username": "demo03", + "password": "apple03", + "roles": ["reader", "writer"], + "order": 3, + "type": "user" + } +] |