diff --git a/src/mango/test/17-multi-type-value-test.py b/src/mango/test/17-multi-type-value-test.py deleted file mode 100644 index 28cf8d9540c..00000000000 --- a/src/mango/test/17-multi-type-value-test.py +++ /dev/null @@ -1,69 +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 copy -import mango -import unittest - -DOCS = [ - {"_id": "1", "name": "Jimi", "age": 10}, - {"_id": "2", "name": {"forename": "Eddie"}, "age": 20}, - {"_id": "3", "name": None, "age": 30}, - {"_id": "4", "name": 1, "age": 40}, - {"_id": "5", "forename": "Sam", "age": 50}, -] - - -class MultiValueFieldTests: - def test_can_query_with_name(self): - docs = self.db.find({"name": {"$exists": True}}) - self.assertEqual(len(docs), 4) - for d in docs: - self.assertIn("name", d) - - def test_can_query_with_name_subfield(self): - docs = self.db.find({"name.forename": {"$exists": True}}) - self.assertEqual(len(docs), 1) - self.assertEqual(docs[0]["_id"], "2") - - def test_can_query_with_name_range(self): - docs = self.db.find({"name": {"$gte": 0}}) - # expect to include "Jimi", 1 and {"forename":"Eddie"} - self.assertEqual(len(docs), 3) - for d in docs: - self.assertIn("name", d) - - def test_can_query_with_age_and_name_range(self): - docs = self.db.find({"age": {"$gte": 0, "$lt": 40}, "name": {"$gte": 0}}) - # expect to include "Jimi", 1 and {"forename":"Eddie"} - self.assertEqual(len(docs), 2) - for d in docs: - self.assertIn("name", d) - - -class MultiValueFieldJSONTests(mango.DbPerClass, MultiValueFieldTests): - def setUp(self): - super().setUp(db_per_test=True) - self.db.save_docs(copy.deepcopy(DOCS)) - self.db.create_index(["name"]) - self.db.create_index(["age", "name"]) - - -# @unittest.skipUnless(mango.has_text_service(), "requires text service") -# class MultiValueFieldTextTests(MultiValueFieldDocsNoIndexes, OperatorTests): -# pass - - -class MultiValueFieldAllDocsTests(mango.DbPerClass, MultiValueFieldTests): - def setUp(self): - super().setUp(db_per_test=True) - self.db.save_docs(copy.deepcopy(DOCS)) diff --git a/test/elixir/test/config/suite.elixir b/test/elixir/test/config/suite.elixir index b3fb950846c..eded79160bb 100644 --- a/test/elixir/test/config/suite.elixir +++ b/test/elixir/test/config/suite.elixir @@ -735,5 +735,11 @@ ], "IgnoreDesignDocsForAllDocsIndexTests": [ "should not return design docs" + ], + "MultiValueFieldTests": [ + "can query with name", + "can query with name subfield", + "can query with name range", + "can query with age and name range" ] } diff --git a/test/elixir/test/mango/17_multi_type_value_test.exs b/test/elixir/test/mango/17_multi_type_value_test.exs new file mode 100644 index 00000000000..33e3cb5ede4 --- /dev/null +++ b/test/elixir/test/mango/17_multi_type_value_test.exs @@ -0,0 +1,70 @@ +# 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 MultiValueFieldTests do + use CouchTestCase + + @db_name "multi-type-value-docs" + @docs [ + %{"_id" => "1", "name" => "Jimi", "age" => 10}, + %{"_id" => "2", "name" => %{"forename" => "Eddie"}, "age" => 20}, + %{"_id" => "3", "name" => nil, "age" => 30}, + %{"_id" => "4", "name" => 1, "age" => 40}, + %{"_id" => "5", "forename" => "Sam", "age" => 50} + ] + + setup do + MangoDatabase.recreate(@db_name) + MangoDatabase.save_docs(@db_name, @docs) + :ok + end + + test "can query with name" do + selector = %{"name" => %{"$exists" => true}} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + + assert length(docs) == 4 + for doc <- docs do + assert Map.has_key?(doc, "name") + end + end + + test "can query with name subfield" do + selector = %{"name.forename" => %{"$exists" => true}} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + + assert length(docs) == 1 + assert Enum.at(docs, 0)["_id"] == "2" + end + + test "can query with name range" do + selector = %{"name" => %{"$gte" => 0}} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + + assert length(docs) == 3 + for doc <- docs do + assert Map.has_key?(doc, "name") + assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}] + end + end + + test "can query with age and name range" do + selector = %{"age" => %{"$gte" => 0, "$lt" => 40}, "name" => %{"$gte" => 0}} + {:ok, docs} = MangoDatabase.find(@db_name, selector) + + assert length(docs) == 2 + for doc <- docs do + assert Map.has_key?(doc, "name") + assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}] + end + end +end