diff --git a/src/mango/test/16-index-selectors-test.py b/src/mango/test/16-index-selectors-test.py deleted file mode 100644 index d9cd058b3b7..00000000000 --- a/src/mango/test/16-index-selectors-test.py +++ /dev/null @@ -1,292 +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": "100", "name": "Jimi", "location": "AUS", "user_id": 1, "same": "value"}, - {"_id": "200", "name": "Eddie", "location": "BRA", "user_id": 2, "same": "value"}, - {"_id": "300", "name": "Harry", "location": "CAN", "user_id": 3, "same": "value"}, - {"_id": "400", "name": "Eddie", "location": "DEN", "user_id": 4, "same": "value"}, - {"_id": "500", "name": "Jones", "location": "ETH", "user_id": 5, "same": "value"}, - { - "_id": "600", - "name": "Winnifried", - "location": "FRA", - "user_id": 6, - "same": "value", - }, - {"_id": "700", "name": "Marilyn", "location": "GHA", "user_id": 7, "same": "value"}, - {"_id": "800", "name": "Sandra", "location": "ZAR", "user_id": 8, "same": "value"}, -] - -oldschoolnoselectorddoc = { - "_id": "_design/oldschoolnoselector", - "language": "query", - "views": { - "oldschoolnoselector": { - "map": {"fields": {"location": "asc"}}, - "reduce": "_count", - "options": {"def": {"fields": ["location"]}}, - } - }, -} - -oldschoolddoc = { - "_id": "_design/oldschool", - "language": "query", - "views": { - "oldschool": { - "map": { - "fields": {"location": "asc"}, - "selector": {"location": {"$gte": "FRA"}}, - }, - "reduce": "_count", - "options": {"def": {"fields": ["location"]}}, - } - }, -} - -oldschoolddoctext = { - "_id": "_design/oldschooltext", - "language": "query", - "indexes": { - "oldschooltext": { - "index": { - "default_analyzer": "keyword", - "default_field": {}, - "selector": {"location": {"$gte": "FRA"}}, - "fields": [{"name": "location", "type": "string"}], - "index_array_lengths": True, - }, - "analyzer": { - "name": "perfield", - "default": "keyword", - "fields": {"$default": "standard"}, - }, - } - }, -} - - -class IndexSelectorJson(mango.DbPerClass): - def setUp(self): - super().setUp(db_per_test=True) - self.db.save_docs(copy.deepcopy(DOCS)) - - def test_saves_partial_filter_selector_in_index(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_index(["location"], partial_filter_selector=selector) - indexes = self.db.list_indexes() - self.assertEqual(indexes[1]["def"]["partial_filter_selector"], selector) - - def test_partial_filter_only_in_return_if_not_default(self): - self.db.create_index(["location"]) - index = self.db.list_indexes()[1] - self.assertEqual("partial_filter_selector" in index["def"], False) - - def test_saves_selector_in_index_throws(self): - selector = {"location": {"$gte": "FRA"}} - try: - self.db.create_index(["location"], selector=selector) - except Exception as e: - assert e.response.status_code == 400 - else: - raise AssertionError("bad index creation") - - def test_uses_partial_index_for_query_selector(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_index( - ["location"], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector, use_index="Selected") - self.assertEqual(len(docs), 3) - - def test_uses_partial_index_with_different_selector(self): - selector = {"location": {"$gte": "FRA"}} - selector2 = {"location": {"$gte": "A"}} - self.db.create_index( - ["location"], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector2, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector2, use_index="Selected") - self.assertEqual(len(docs), 3) - - def test_doesnot_use_selector_when_not_specified(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_index( - ["location"], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True) - self.assertEqual(resp["index"]["name"], "_all_docs") - - def test_doesnot_use_selector_when_not_specified_with_index(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_index( - ["location"], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - self.db.create_index(["location"], name="NotSelected") - resp = self.db.find(selector, explain=True) - self.assertEqual(resp["index"]["name"], "NotSelected") - - def test_old_selector_with_no_selector_still_supported(self): - selector = {"location": {"$gte": "FRA"}} - self.db.save_doc(oldschoolnoselectorddoc) - resp = self.db.find(selector, explain=True, use_index="oldschoolnoselector") - self.assertEqual(resp["index"]["name"], "oldschoolnoselector") - docs = self.db.find(selector, use_index="oldschoolnoselector") - self.assertEqual(len(docs), 3) - - def test_old_selector_still_supported(self): - selector = {"location": {"$gte": "FRA"}} - self.db.save_doc(oldschoolddoc) - resp = self.db.find(selector, explain=True, use_index="oldschool") - self.assertEqual(resp["index"]["name"], "oldschool") - docs = self.db.find(selector, use_index="oldschool") - self.assertEqual(len(docs), 3) - - def test_uses_partial_index_with_non_indexable_selector(self): - partial_selector = {"location": {"$gte": "FRA"}} - selector = {"location": {"$exists": True}} - self.db.create_index( - ["location"], - partial_filter_selector=partial_selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector, use_index="Selected") - self.assertEqual(len(docs), 3) - - -@unittest.skipUnless(mango.has_text_service(), "requires text service") -class IndexSelectorText(mango.DbPerClass): - def setUp(self): - super().setUp(db_per_test=True) - self.db.save_docs(copy.deepcopy(DOCS)) - - def test_saves_partialfilterselector_in_index(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=selector, - ) - indexes = self.db.list_indexes() - self.assertEqual(indexes[1]["def"]["partial_filter_selector"], selector) - - def test_uses_partial_index_for_query_selector(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector, use_index="Selected", fields=["_id", "location"]) - self.assertEqual(len(docs), 3) - - def test_uses_partial_index_with_different_selector(self): - selector = {"location": {"$gte": "FRA"}} - selector2 = {"location": {"$gte": "A"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector2, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector2, use_index="Selected") - self.assertEqual(len(docs), 3) - - def test_doesnot_use_selector_when_not_specified(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True) - self.assertEqual(resp["index"]["name"], "_all_docs") - - def test_doesnot_use_selector_when_not_specified_with_index(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=selector, - ddoc="Selected", - name="Selected", - ) - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], name="NotSelected" - ) - resp = self.db.find(selector, explain=True) - self.assertEqual(resp["index"]["name"], "NotSelected") - - def test_old_selector_still_supported(self): - selector = {"location": {"$gte": "FRA"}} - self.db.save_doc(oldschoolddoctext) - resp = self.db.find(selector, explain=True, use_index="oldschooltext") - self.assertEqual(resp["index"]["name"], "oldschooltext") - docs = self.db.find(selector, use_index="oldschooltext") - self.assertEqual(len(docs), 3) - - def test_old_selector_still_supported_via_api(self): - selector = {"location": {"$gte": "FRA"}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - selector=selector, - ddoc="Selected", - name="Selected", - ) - docs = self.db.find({"location": {"$exists": True}}, use_index="Selected") - self.assertEqual(len(docs), 3) - - def test_partial_filter_only_in_return_if_not_default(self): - self.db.create_text_index(fields=[{"name": "location", "type": "string"}]) - index = self.db.list_indexes()[1] - self.assertEqual("partial_filter_selector" in index["def"], False) - - def test_uses_partial_index_with_non_indexable_selector(self): - partial_selector = {"location": {"$gte": "FRA"}} - selector = {"location": {"$exists": True}} - self.db.create_text_index( - fields=[{"name": "location", "type": "string"}], - partial_filter_selector=partial_selector, - ddoc="Selected", - name="Selected", - ) - resp = self.db.find(selector, explain=True, use_index="Selected") - self.assertEqual(resp["index"]["name"], "Selected") - docs = self.db.find(selector, use_index="Selected") - self.assertEqual(len(docs), 3) diff --git a/test/elixir/test/config/search.elixir b/test/elixir/test/config/search.elixir index 87715d4caf3..c00317a7cd1 100644 --- a/test/elixir/test/config/search.elixir +++ b/test/elixir/test/config/search.elixir @@ -38,5 +38,16 @@ ], "LimitTests": [ "limit field" + ], + "IndexSelectorText": [ + "saves partialfilterselector in index", + "uses partial index for query selector", + "uses partial index with different selector", + "doesnot use selector when not specified", + "doesnot use selector when not specified with index", + "old selector still supported", + "old selector still supported via api", + "partial filter only in return if not default", + "uses partial index with non indexable selector" ] } diff --git a/test/elixir/test/config/suite.elixir b/test/elixir/test/config/suite.elixir index b3fb950846c..610b598f437 100644 --- a/test/elixir/test/config/suite.elixir +++ b/test/elixir/test/config/suite.elixir @@ -735,5 +735,17 @@ ], "IgnoreDesignDocsForAllDocsIndexTests": [ "should not return design docs" + ], + "IndexSelectorJson": [ + "saves partial filter selector in index", + "partial filter only in return if not default", + "saves selector in index throws", + "uses partial index for query selector", + "uses partial index with different selector", + "doesnot use selector when not specified", + "doesnot use selector when not specified with index", + "old selector with no selector still supported", + "old selector still supported", + "uses partial index with non indexable selector" ] } diff --git a/test/elixir/test/mango/16_index_selectors_test.exs b/test/elixir/test/mango/16_index_selectors_test.exs new file mode 100644 index 00000000000..3a7683a63e5 --- /dev/null +++ b/test/elixir/test/mango/16_index_selectors_test.exs @@ -0,0 +1,373 @@ +# 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 IndexSelectorJson do + use CouchTestCase + + @db_name "index-selectors" + @docs [ + %{"_id" => "100", "name" => "Jimi", "location" => "AUS", "user_id" => 1, "same" => "value"}, + %{"_id" => "200", "name" => "Eddie", "location" => "BRA", "user_id" => 2, "same" => "value"}, + %{"_id" => "300", "name" => "Harry", "location" => "CAN", "user_id" => 3, "same" => "value"}, + %{"_id" => "400", "name" => "Eddie", "location" => "DEN", "user_id" => 4, "same" => "value"}, + %{"_id" => "500", "name" => "Jones", "location" => "ETH", "user_id" => 5, "same" => "value"}, + %{ + "_id" => "600", + "name" => "Winnifried", + "location" => "FRA", + "user_id" => 6, + "same" => "value", + }, + %{"_id" => "700", "name" => "Marilyn", "location" => "GHA", "user_id" => 7, "same" => "value"}, + %{"_id" => "800", "name" => "Sandra", "location" => "ZAR", "user_id" => 8, "same" => "value"}, + ] + + setup do + MangoDatabase.recreate(@db_name) + MangoDatabase.save_docs(@db_name, @docs) + :ok + end + + test "saves partial filter selector in index" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_index(@db_name, ["location"], partial_filter_selector: selector) + + {:ok, indexes} = MangoDatabase.list_indexes(@db_name) + assert Enum.at(indexes, 1)["def"]["partial_filter_selector"] == selector + end + + test "partial filter only in return if not default" do + MangoDatabase.create_index(@db_name, ["location"]) + + {:ok, indexes} = MangoDatabase.list_indexes(@db_name) + assert Enum.at(indexes, 1)["def"]["partial_filter_selector"] == nil + end + + test "saves selector in index throws" do + selector = %{"location" => %{"$gte" => "FRA"}} + + case MangoDatabase.create_index(@db_name, ["location"], selector: selector) do + {:error, %{status_code: 400}} -> + :ok + {:ok, _} -> + raise "bad index creation" + end + end + + test "uses partial index for query selector" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_index( + @db_name, + ["location"], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "Selected") + assert length(docs) == 3 + end + + test "uses partial index with different selector" do + selector = %{"location" => %{"$gte" => "FRA"}} + selector2 = %{"location" => %{"$gte" => "A"}} + MangoDatabase.create_index( + @db_name, + ["location"], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector2, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + + {:ok, docs} = MangoDatabase.find(@db_name, selector2, use_index: "Selected") + assert length(docs) == 3 + end + + test "doesnot use selector when not specified" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_index( + @db_name, + ["location"], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true) + assert resp["index"]["name"] == "_all_docs" + end + + test "doesnot use selector when not specified with index" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_index( + @db_name, + ["location"], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + MangoDatabase.create_index( + @db_name, + ["location"], + name: "NotSelected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true) + assert resp["index"]["name"] == "NotSelected" + end + + test "old selector with no selector still supported" do + oldschoolnoselectorddoc = %{ + "_id" => "_design/oldschoolnoselector", + "language" => "query", + "views" => %{ + "oldschoolnoselector" => %{ + "map" => %{"fields" => %{"location" => "asc"}}, + "reduce" => "_count", + "options" => %{"def" => %{"fields" => ["location"]}} + } + } + } + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.save_doc(@db_name, oldschoolnoselectorddoc) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "oldschoolnoselector") + assert resp["index"]["name"] == "oldschoolnoselector" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "oldschoolnoselector") + assert length(docs) == 3 + end + + test "old selector still supported" do + oldschoolddoc = %{ + "_id" => "_design/oldschool", + "language" => "query", + "views" => %{ + "oldschool" => %{ + "map" => %{ + "fields" => %{"location" => "asc"}, + "selector" => %{"location" => %{"$gte" => "FRA"}}, + }, + "reduce" => "_count", + "options" => %{"def" => %{"fields" => ["location"]}} + } + } + } + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.save_doc(@db_name, oldschoolddoc) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "oldschool") + assert resp["index"]["name"] == "oldschool" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "oldschool") + assert length(docs) == 3 + end + + test "uses partial index with non indexable selector" do + partial_selector = %{"location" => %{"$gte" => "FRA"}} + selector = %{"location" => %{"$exists" => true}} + MangoDatabase.create_index( + @db_name, + ["location"], + partial_filter_selector: partial_selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "Selected") + assert length(docs) == 3 + end +end + +defmodule IndexSelectorText do + use CouchTestCase + + @db_name "index-selectors" + @docs [ + %{"_id" => "100", "name" => "Jimi", "location" => "AUS", "user_id" => 1, "same" => "value"}, + %{"_id" => "200", "name" => "Eddie", "location" => "BRA", "user_id" => 2, "same" => "value"}, + %{"_id" => "300", "name" => "Harry", "location" => "CAN", "user_id" => 3, "same" => "value"}, + %{"_id" => "400", "name" => "Eddie", "location" => "DEN", "user_id" => 4, "same" => "value"}, + %{"_id" => "500", "name" => "Jones", "location" => "ETH", "user_id" => 5, "same" => "value"}, + %{ + "_id" => "600", + "name" => "Winnifried", + "location" => "FRA", + "user_id" => 6, + "same" => "value", + }, + %{"_id" => "700", "name" => "Marilyn", "location" => "GHA", "user_id" => 7, "same" => "value"}, + %{"_id" => "800", "name" => "Sandra", "location" => "ZAR", "user_id" => 8, "same" => "value"}, + ] + + setup do + MangoDatabase.recreate(@db_name) + MangoDatabase.save_docs(@db_name, @docs) + :ok + end + + test "saves partialfilterselector in index" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: selector + ) + + {:ok, indexes} = MangoDatabase.list_indexes(@db_name) + assert Enum.at(indexes, 1)["def"]["partial_filter_selector"] == selector + end + + test "uses partial index for query selector" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "Selected", fields: ["_id", "location"]) + assert length(docs) == 3 + end + + test "uses partial index with different selector" do + selector = %{"location" => %{"$gte" => "FRA"}} + selector2 = %{"location" => %{"$gte" => "A"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector2, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + + {:ok, docs} = MangoDatabase.find(@db_name, selector2, use_index: "Selected") + assert length(docs) == 3 + end + + test "doesnot use selector when not specified" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true) + assert resp["index"]["name"] == "_all_docs" + end + + test "doesnot use selector when not specified with index" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: selector, + ddoc: "Selected", + name: "Selected" + ) + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + name: "NotSelected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true) + assert resp["index"]["name"] == "NotSelected" + end + + test "old selector still supported" do + oldschoolddoctext = %{ + "_id" => "_design/oldschooltext", + "language" => "query", + "indexes" => %{ + "oldschooltext" => %{ + "index" => %{ + "default_analyzer" => "keyword", + "default_field" => %{}, + "selector" => %{"location" => %{"$gte" => "FRA"}}, + "fields" => [%{"name" => "location", "type" => "string"}], + "index_array_lengths" => true + }, + "analyzer" => %{ + "name" => "perfield", + "default" => "keyword", + "fields" => %{"$default" => "standard"} + } + } + } + } + + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.save_doc(@db_name, oldschoolddoctext) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "oldschooltext") + assert resp["index"]["name"] == "oldschooltext" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "oldschooltext") + assert length(docs) == 3 + end + + test "old selector still supported via api" do + selector = %{"location" => %{"$gte" => "FRA"}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + selector: selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, docs} = MangoDatabase.find(@db_name, %{"location" => %{"$exists" => true}}, use_index: "Selected") + assert length(docs) == 3 + end + + test "partial filter only in return if not default" do + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}] + ) + + {:ok, indexes} = MangoDatabase.list_indexes(@db_name) + assert Enum.at(indexes, 1)["def"]["partial_filter_selector"] == nil + end + + test "uses partial index with non indexable selector" do + partial_selector = %{"location" => %{"$gte" => "FRA"}} + selector = %{"location" => %{"$exists" => true}} + MangoDatabase.create_text_index( + @db_name, + fields: [%{"name" => "location", "type" => "string"}], + partial_filter_selector: partial_selector, + ddoc: "Selected", + name: "Selected" + ) + + {:ok, resp} = MangoDatabase.find(@db_name, selector, explain: true, use_index: "Selected") + assert resp["index"]["name"] == "Selected" + {:ok, docs} = MangoDatabase.find(@db_name, selector, use_index: "Selected") + assert length(docs) == 3 + end +end