Skip to content

Commit 68ab391

Browse files
update test to use macro for MultiValueFieldTests
1 parent 427a28c commit 68ab391

File tree

2 files changed

+82
-42
lines changed

2 files changed

+82
-42
lines changed

test/elixir/test/config/suite.elixir

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,13 @@
735735
"IgnoreDesignDocsForAllDocsIndexTests": [
736736
"should not return design docs"
737737
],
738-
"MultiValueFieldTests": [
738+
"MultiValueFieldJSONTests": [
739+
"can query with name",
740+
"can query with name subfield",
741+
"can query with name range",
742+
"can query with age and name range"
743+
],
744+
"MultiValueFieldAllDocsTests": [
739745
"can query with name",
740746
"can query with name subfield",
741747
"can query with name range",

test/elixir/test/mango/17_multi_type_value_test.exs

Lines changed: 75 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,59 +12,93 @@
1212

1313
defmodule MultiValueFieldTests do
1414
use CouchTestCase
15+
defmacro describe(db) do
16+
quote do
17+
test "can query with name" do
18+
selector = %{"name" => %{"$exists" => true}}
19+
{:ok, docs} = MangoDatabase.find(unquote(db), selector)
1520

16-
@db_name "multi-type-value-docs"
17-
@docs [
18-
%{"_id" => "1", "name" => "Jimi", "age" => 10},
19-
%{"_id" => "2", "name" => %{"forename" => "Eddie"}, "age" => 20},
20-
%{"_id" => "3", "name" => nil, "age" => 30},
21-
%{"_id" => "4", "name" => 1, "age" => 40},
22-
%{"_id" => "5", "forename" => "Sam", "age" => 50}
23-
]
21+
assert length(docs) == 4
22+
for doc <- docs do
23+
assert Map.has_key?(doc, "name")
24+
end
25+
end
2426

25-
setup do
26-
MangoDatabase.recreate(@db_name)
27-
MangoDatabase.save_docs(@db_name, @docs)
28-
:ok
29-
end
27+
test "can query with name subfield" do
28+
selector = %{"name.forename" => %{"$exists" => true}}
29+
{:ok, docs} = MangoDatabase.find(unquote(db), selector)
30+
31+
assert length(docs) == 1
32+
assert Enum.at(docs, 0)["_id"] == "2"
33+
end
34+
35+
test "can query with name range" do
36+
selector = %{"name" => %{"$gte" => 0}}
37+
{:ok, docs} = MangoDatabase.find(unquote(db), selector)
3038

31-
test "can query with name" do
32-
selector = %{"name" => %{"$exists" => true}}
33-
{:ok, docs} = MangoDatabase.find(@db_name, selector)
39+
assert length(docs) == 3
40+
for doc <- docs do
41+
assert Map.has_key?(doc, "name")
42+
assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}]
43+
end
44+
end
3445

35-
assert length(docs) == 4
36-
for doc <- docs do
37-
assert Map.has_key?(doc, "name")
46+
test "can query with age and name range" do
47+
selector = %{"age" => %{"$gte" => 0, "$lt" => 40}, "name" => %{"$gte" => 0}}
48+
{:ok, docs} = MangoDatabase.find(unquote(db), selector)
49+
50+
assert length(docs) == 2
51+
for doc <- docs do
52+
assert Map.has_key?(doc, "name")
53+
assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}]
54+
end
55+
end
3856
end
3957
end
58+
end
4059

41-
test "can query with name subfield" do
42-
selector = %{"name.forename" => %{"$exists" => true}}
43-
{:ok, docs} = MangoDatabase.find(@db_name, selector)
44-
45-
assert length(docs) == 1
46-
assert Enum.at(docs, 0)["_id"] == "2"
60+
defmodule MultiValueFieldTestData do
61+
def docs do
62+
[
63+
%{"_id" => "1", "name" => "Jimi", "age" => 10},
64+
%{"_id" => "2", "name" => %{"forename" => "Eddie"}, "age" => 20},
65+
%{"_id" => "3", "name" => nil, "age" => 30},
66+
%{"_id" => "4", "name" => 1, "age" => 40},
67+
%{"_id" => "5", "forename" => "Sam", "age" => 50}
68+
]
4769
end
70+
end
4871

49-
test "can query with name range" do
50-
selector = %{"name" => %{"$gte" => 0}}
51-
{:ok, docs} = MangoDatabase.find(@db_name, selector)
72+
defmodule MultiValueFieldJSONTests do
73+
use CouchTestCase
74+
require MultiValueFieldTests
5275

53-
assert length(docs) == 3
54-
for doc <- docs do
55-
assert Map.has_key?(doc, "name")
56-
assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}]
57-
end
76+
@docs MultiValueFieldTestData.docs()
77+
@db_name "multi-value-field-json"
78+
79+
setup do
80+
MangoDatabase.recreate(@db_name)
81+
MangoDatabase.save_docs(@db_name, @docs)
82+
MangoDatabase.create_index(@db_name, ["name"])
83+
MangoDatabase.create_index(@db_name, ["age", "name"])
84+
:ok
5885
end
5986

60-
test "can query with age and name range" do
61-
selector = %{"age" => %{"$gte" => 0, "$lt" => 40}, "name" => %{"$gte" => 0}}
62-
{:ok, docs} = MangoDatabase.find(@db_name, selector)
87+
MultiValueFieldTests.describe(@db_name)
88+
end
6389

64-
assert length(docs) == 2
65-
for doc <- docs do
66-
assert Map.has_key?(doc, "name")
67-
assert doc["name"] in [1, "Jimi", %{"forename" => "Eddie"}]
68-
end
90+
defmodule MultiValueFieldAllDocsTests do
91+
use CouchTestCase
92+
require MultiValueFieldTests
93+
94+
@docs MultiValueFieldTestData.docs()
95+
@db_name "multi-value-field-all-docs"
96+
97+
setup do
98+
MangoDatabase.recreate(@db_name)
99+
MangoDatabase.save_docs(@db_name, @docs)
100+
:ok
69101
end
102+
103+
MultiValueFieldTests.describe(@db_name)
70104
end

0 commit comments

Comments
 (0)