diff --git a/src/mango/test/13-users-db-find-test.py b/src/mango/test/13-users-db-find-test.py deleted file mode 100644 index 7daf2ee7fd4..00000000000 --- a/src/mango/test/13-users-db-find-test.py +++ /dev/null @@ -1,73 +0,0 @@ -# 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/test/elixir/test/config/suite.elixir b/test/elixir/test/config/suite.elixir index b3fb950846c..0c193fe325d 100644 --- a/test/elixir/test/config/suite.elixir +++ b/test/elixir/test/config/suite.elixir @@ -735,5 +735,18 @@ ], "IgnoreDesignDocsForAllDocsIndexTests": [ "should not return design docs" + ], + "UsersDbFindTests": [ + "simple find", + "multi cond and", + "multi cond or", + "sort", + "fields", + "empty" + ], + "UsersDbIndexFindTests": [ + "multi cond and", + "multi cond or", + "sort" ] } diff --git a/test/elixir/test/mango/13_users_db_find_test.exs b/test/elixir/test/mango/13_users_db_find_test.exs new file mode 100644 index 00000000000..0e534b728de --- /dev/null +++ b/test/elixir/test/mango/13_users_db_find_test.exs @@ -0,0 +1,108 @@ +# 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. + +defmodule UsersDbFindTests do + use CouchTestCase + + @db_name "_users" + + setup do + UserDocs.setup_users(@db_name) + end + + test "simple find" do + {:ok, docs} = MangoDatabase.find(@db_name, %{"name" => %{"$eq" => "demo02"}}) + assert length(docs) == 1 + assert Enum.at(docs, 0)["_id"] == "org.couchdb.user:demo02" + end + + def multi_cond_and_test() do + MangoDatabase.create_index(@db_name, ["type", "roles"]) + selector = %{"type" => "user", "roles" => %{"$eq" => ["reader"]}} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + assert length(docs) == 1 + assert Enum.at(docs, 0)["_id"] == "org.couchdb.user:demo02" + end + + test "multi cond and" do + multi_cond_and_test() + end + + def multi_cond_or_test() do + selector = %{"$and" => [%{"type" => "user"}, %{"$or" => [%{"order" => 1}, %{"order" => 3}]}]} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + assert length(docs) == 2 + assert Enum.at(docs, 0)["_id"] == "org.couchdb.user:demo01" + assert Enum.at(docs, 1)["_id"] == "org.couchdb.user:demo03" + end + + test "multi cond or" do + multi_cond_or_test() + end + + def sort_test() do + MangoDatabase.create_index(@db_name, ["order", "name"]) + selector = %{"name" => %{"$gt" => "demo01"}} + {:ok, docs1} = MangoDatabase.find(@db_name, selector, sort: [%{"order" => "asc"}]) + docs2 = Enum.sort_by(docs1, & &1["order"]) + assert docs1 == docs2 + + {:ok, docs1} = MangoDatabase.find(@db_name, selector, sort: [%{"order" => "desc"}]) + docs2 = + docs1 + |> Enum.sort_by(& &1["order"]) + |> Enum.reverse() + assert docs1 == docs2 + end + + test "sort" do + sort_test() + end + + test "fields" do + selector = %{"name" => %{"$eq" => "demo02"}} + {:ok, docs} = MangoDatabase.find(@db_name, selector, fields: ["name", "order"]) + assert length(docs) == 1 + assert Map.keys(Enum.at(docs, 0)) == ["name", "order"] + end + + test "empty" do + {:ok, docs} = MangoDatabase.find(@db_name, %{}) + assert length(docs) == 3 + end +end + +defmodule UsersDbIndexFindTests do + use CouchTestCase + + @db_name "_users" + setup do + MangoDatabase.create_index(@db_name, ["name"]) + :ok + end + + test "multi cond and" do + MangoDatabase.create_index(@db_name, ["type", "roles"]) + :ok + UsersDbFindTests.multi_cond_and_test() + end + + test "multi cond or" do + MangoDatabase.create_index(@db_name, ["type", "order"]) + UsersDbFindTests.multi_cond_or_test() + end + + test "sort" do + MangoDatabase.create_index(@db_name, ["order", "name"]) + UsersDbFindTests.sort_test() + end +end diff --git a/test/elixir/test/support/user_docs.ex b/test/elixir/test/support/user_docs.ex index eb015cc64b5..3d56542b971 100644 --- a/test/elixir/test/support/user_docs.ex +++ b/test/elixir/test/support/user_docs.ex @@ -308,7 +308,7 @@ defmodule UserDocs do @users_docs [ %{ - "_id" => "org.couchdb.user =>demo01", + "_id" => "org.couchdb.user:demo01", "name" => "demo01", "username" => "demo01", "password" => "apple01", @@ -317,7 +317,7 @@ defmodule UserDocs do "type" => "user", }, %{ - "_id" => "org.couchdb.user =>demo02", + "_id" => "org.couchdb.user:demo02", "name" => "demo02", "username" => "demo02", "password" => "apple02", @@ -326,7 +326,7 @@ defmodule UserDocs do "type" => "user", }, %{ - "_id" => "org.couchdb.user =>demo03", + "_id" => "org.couchdb.user:demo03", "name" => "demo03", "username" => "demo03", "password" => "apple03", @@ -339,6 +339,8 @@ defmodule UserDocs do def setup_users(db) do MangoDatabase.recreate(db) MangoDatabase.save_docs(db, @users_docs) + + :ok end def setup(db, index_type \\ "view", partitioned \\ false) do