search_cop 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +42 -0
- data/.rubocop.yml +128 -0
- data/CHANGELOG.md +14 -9
- data/Gemfile +4 -5
- data/README.md +11 -1
- data/Rakefile +0 -1
- data/docker-compose.yml +8 -1
- data/gemfiles/{5.1.gemfile → rails5.gemfile} +2 -2
- data/gemfiles/rails6.gemfile +13 -0
- data/lib/search_cop.rb +5 -23
- data/lib/search_cop/grammar_parser.rb +1 -3
- data/lib/search_cop/hash_parser.rb +19 -19
- data/lib/search_cop/helpers.rb +15 -0
- data/lib/search_cop/query_builder.rb +0 -2
- data/lib/search_cop/query_info.rb +0 -2
- data/lib/search_cop/search_scope.rb +2 -4
- data/lib/search_cop/version.rb +1 -1
- data/lib/search_cop/visitors.rb +0 -2
- data/lib/search_cop/visitors/mysql.rb +4 -2
- data/lib/search_cop/visitors/postgres.rb +5 -3
- data/lib/search_cop/visitors/visitor.rb +5 -3
- data/lib/search_cop_grammar.rb +1 -3
- data/lib/search_cop_grammar/attributes.rb +45 -34
- data/lib/search_cop_grammar/nodes.rb +0 -2
- data/search_cop.gemspec +8 -8
- data/test/and_test.rb +6 -8
- data/test/boolean_test.rb +7 -9
- data/test/database.yml +2 -1
- data/test/date_test.rb +14 -16
- data/test/datetime_test.rb +15 -17
- data/test/default_operator_test.rb +14 -10
- data/test/error_test.rb +2 -4
- data/test/float_test.rb +9 -11
- data/test/fulltext_test.rb +6 -8
- data/test/hash_test.rb +32 -34
- data/test/integer_test.rb +9 -11
- data/test/not_test.rb +6 -8
- data/test/or_test.rb +8 -10
- data/test/scope_test.rb +11 -13
- data/test/search_cop_test.rb +32 -34
- data/test/string_test.rb +67 -19
- data/test/test_helper.rb +13 -15
- data/test/visitor_test.rb +4 -6
- metadata +28 -13
- data/.travis.yml +0 -34
- data/gemfiles/4.2.gemfile +0 -13
data/test/database.yml
CHANGED
data/test/date_test.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class DateTest < SearchCop::TestCase
|
5
4
|
def test_mapping
|
6
|
-
product = create(:product, :
|
5
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
7
6
|
|
8
7
|
assert_includes Product.search("created_on: 2014"), product
|
9
8
|
assert_includes Product.search("created_on: 2014-05"), product
|
@@ -11,84 +10,84 @@ class DateTest < SearchCop::TestCase
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def test_anywhere
|
14
|
-
product = create(:product, :
|
13
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
15
14
|
|
16
15
|
assert_includes Product.search("2014-05-01"), product
|
17
16
|
refute_includes Product.search("2014-05-02"), product
|
18
17
|
end
|
19
18
|
|
20
19
|
def test_includes
|
21
|
-
product = create(:product, :
|
20
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
22
21
|
|
23
22
|
assert_includes Product.search("created_on: 2014-05-01"), product
|
24
23
|
refute_includes Product.search("created_on: 2014-05-02"), product
|
25
24
|
end
|
26
25
|
|
27
26
|
def test_equals
|
28
|
-
product = create(:product, :
|
27
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
29
28
|
|
30
29
|
assert_includes Product.search("created_on = 2014-05-01"), product
|
31
30
|
refute_includes Product.search("created_on = 2014-05-02"), product
|
32
31
|
end
|
33
32
|
|
34
33
|
def test_equals_not
|
35
|
-
product = create(:product, :
|
34
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
36
35
|
|
37
36
|
assert_includes Product.search("created_on != 2014-05-02"), product
|
38
37
|
refute_includes Product.search("created_on != 2014-05-01"), product
|
39
38
|
end
|
40
39
|
|
41
40
|
def test_greater
|
42
|
-
product = create(:product, :
|
41
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
43
42
|
|
44
43
|
assert_includes Product.search("created_on > 2014-04-01"), product
|
45
44
|
refute_includes Product.search("created_on > 2014-05-01"), product
|
46
45
|
end
|
47
46
|
|
48
47
|
def test_greater_equals
|
49
|
-
product = create(:product, :
|
48
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
50
49
|
|
51
50
|
assert_includes Product.search("created_on >= 2014-05-01"), product
|
52
51
|
refute_includes Product.search("created_on >= 2014-05-02"), product
|
53
52
|
end
|
54
53
|
|
55
54
|
def test_less
|
56
|
-
product = create(:product, :
|
55
|
+
product = create(:product, created_on: Date.parse("2014-05-01"))
|
57
56
|
|
58
57
|
assert_includes Product.search("created_on < 2014-05-02"), product
|
59
58
|
refute_includes Product.search("created_on < 2014-05-01"), product
|
60
59
|
end
|
61
60
|
|
62
61
|
def test_less_equals
|
63
|
-
product = create(:product, :
|
62
|
+
product = create(:product, created_on: Date.parse("2014-05-02"))
|
64
63
|
|
65
64
|
assert_includes Product.search("created_on <= 2014-05-02"), product
|
66
65
|
refute_includes Product.search("created_on <= 2014-05-01"), product
|
67
66
|
end
|
68
67
|
|
69
68
|
def test_days_ago
|
70
|
-
product = create(:product, :
|
69
|
+
product = create(:product, created_at: 2.days.ago.to_date)
|
71
70
|
|
72
71
|
assert_includes Product.search("created_at <= '1 day ago'"), product
|
73
72
|
refute_includes Product.search("created_at <= '3 days ago'"), product
|
74
73
|
end
|
75
74
|
|
76
75
|
def test_weeks_ago
|
77
|
-
product = create(:product, :
|
76
|
+
product = create(:product, created_at: 2.weeks.ago.to_date)
|
78
77
|
|
79
78
|
assert_includes Product.search("created_at <= '1 weeks ago'"), product
|
80
79
|
refute_includes Product.search("created_at <= '3 weeks ago'"), product
|
81
80
|
end
|
82
81
|
|
83
82
|
def test_months_ago
|
84
|
-
product = create(:product, :
|
83
|
+
product = create(:product, created_at: 2.months.ago.to_date)
|
85
84
|
|
86
85
|
assert_includes Product.search("created_at <= '1 months ago'"), product
|
87
86
|
refute_includes Product.search("created_at <= '3 months ago'"), product
|
88
87
|
end
|
89
88
|
|
90
89
|
def test_years_ago
|
91
|
-
product = create(:product, :
|
90
|
+
product = create(:product, created_at: 2.years.ago.to_date)
|
92
91
|
|
93
92
|
assert_includes Product.search("created_at <= '1 years ago'"), product
|
94
93
|
refute_includes Product.search("created_at <= '3 years ago'"), product
|
@@ -106,4 +105,3 @@ class DateTest < SearchCop::TestCase
|
|
106
105
|
end
|
107
106
|
end
|
108
107
|
end
|
109
|
-
|
data/test/datetime_test.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class DatetimeTest < SearchCop::TestCase
|
5
4
|
def test_mapping
|
6
|
-
product = create(:product, :
|
5
|
+
product = create(:product, created_at: Time.parse("2014-05-01 12:30:30"))
|
7
6
|
|
8
7
|
assert_includes Product.search("created_at: 2014"), product
|
9
8
|
assert_includes Product.search("created_at: 2014-05"), product
|
@@ -12,91 +11,91 @@ class DatetimeTest < SearchCop::TestCase
|
|
12
11
|
end
|
13
12
|
|
14
13
|
def test_anywhere
|
15
|
-
product = create(:product, :
|
14
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
16
15
|
|
17
16
|
assert_includes Product.search("2014-05-01"), product
|
18
17
|
refute_includes Product.search("2014-05-02"), product
|
19
18
|
end
|
20
19
|
|
21
20
|
def test_includes
|
22
|
-
product = create(:product, :
|
21
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
23
22
|
|
24
23
|
assert_includes Product.search("created_at: 2014-05-01"), product
|
25
24
|
refute_includes Product.search("created_at: 2014-05-02"), product
|
26
25
|
end
|
27
26
|
|
28
27
|
def test_equals
|
29
|
-
product = create(:product, :
|
28
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
30
29
|
|
31
30
|
assert_includes Product.search("created_at = 2014-05-01"), product
|
32
31
|
refute_includes Product.search("created_at = 2014-05-02"), product
|
33
32
|
end
|
34
33
|
|
35
34
|
def test_equals_not
|
36
|
-
product = create(:product, :
|
35
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
37
36
|
|
38
37
|
assert_includes Product.search("created_at != 2014-05-02"), product
|
39
38
|
refute_includes Product.search("created_at != 2014-05-01"), product
|
40
39
|
end
|
41
40
|
|
42
41
|
def test_greater
|
43
|
-
product = create(:product, :
|
42
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
44
43
|
|
45
44
|
assert_includes Product.search("created_at > 2014-04-01"), product
|
46
45
|
refute_includes Product.search("created_at > 2014-05-01"), product
|
47
46
|
end
|
48
47
|
|
49
48
|
def test_greater_equals
|
50
|
-
product = create(:product, :
|
49
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
51
50
|
|
52
51
|
assert_includes Product.search("created_at >= 2014-05-01"), product
|
53
52
|
refute_includes Product.search("created_at >= 2014-05-02"), product
|
54
53
|
end
|
55
54
|
|
56
55
|
def test_less
|
57
|
-
product = create(:product, :
|
56
|
+
product = create(:product, created_at: Time.parse("2014-05-01"))
|
58
57
|
|
59
58
|
assert_includes Product.search("created_at < 2014-05-02"), product
|
60
59
|
refute_includes Product.search("created_at < 2014-05-01"), product
|
61
60
|
end
|
62
61
|
|
63
62
|
def test_less_equals
|
64
|
-
product = create(:product, :
|
63
|
+
product = create(:product, created_at: Time.parse("2014-05-02"))
|
65
64
|
|
66
65
|
assert_includes Product.search("created_at <= 2014-05-02"), product
|
67
66
|
refute_includes Product.search("created_at <= 2014-05-01"), product
|
68
67
|
end
|
69
68
|
|
70
69
|
def test_hours_ago
|
71
|
-
product = create(:product, :
|
70
|
+
product = create(:product, created_at: 5.hours.ago)
|
72
71
|
|
73
72
|
assert_includes Product.search("created_at <= '4 hours ago'"), product
|
74
73
|
refute_includes Product.search("created_at <= '6 hours ago'"), product
|
75
74
|
end
|
76
75
|
|
77
76
|
def test_days_ago
|
78
|
-
product = create(:product, :
|
77
|
+
product = create(:product, created_at: 2.days.ago)
|
79
78
|
|
80
79
|
assert_includes Product.search("created_at <= '1 day ago'"), product
|
81
80
|
refute_includes Product.search("created_at <= '3 days ago'"), product
|
82
81
|
end
|
83
82
|
|
84
83
|
def test_weeks_ago
|
85
|
-
product = create(:product, :
|
84
|
+
product = create(:product, created_at: 2.weeks.ago)
|
86
85
|
|
87
86
|
assert_includes Product.search("created_at <= '1 weeks ago'"), product
|
88
87
|
refute_includes Product.search("created_at <= '3 weeks ago'"), product
|
89
88
|
end
|
90
89
|
|
91
90
|
def test_months_ago
|
92
|
-
product = create(:product, :
|
91
|
+
product = create(:product, created_at: 2.months.ago)
|
93
92
|
|
94
93
|
assert_includes Product.search("created_at <= '1 months ago'"), product
|
95
94
|
refute_includes Product.search("created_at <= '3 months ago'"), product
|
96
95
|
end
|
97
96
|
|
98
97
|
def test_years_ago
|
99
|
-
product = create(:product, :
|
98
|
+
product = create(:product, created_at: 2.years.ago)
|
100
99
|
|
101
100
|
assert_includes Product.search("created_at <= '1 years ago'"), product
|
102
101
|
refute_includes Product.search("created_at <= '3 years ago'"), product
|
@@ -114,4 +113,3 @@ class DatetimeTest < SearchCop::TestCase
|
|
114
113
|
end
|
115
114
|
end
|
116
115
|
end
|
117
|
-
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
2
2
|
|
3
3
|
class DefaultOperatorTest < SearchCop::TestCase
|
4
|
-
|
5
4
|
def test_without_default_operator
|
6
5
|
avengers = create(:product, title: "Title Avengers", description: "2012")
|
7
6
|
inception = create(:product, title: "Title Inception", description: "2010")
|
@@ -25,23 +24,28 @@ class DefaultOperatorTest < SearchCop::TestCase
|
|
25
24
|
|
26
25
|
def test_with_specific_default_operator
|
27
26
|
matrix = create(:product, title: "Matrix", description: "1999 Fantasy Sci-fi 2h 30m")
|
28
|
-
|
27
|
+
star_wars = create(:product, title: "Star Wars", description: "2010 Sci-fi Thriller 2h 28m")
|
28
|
+
|
29
|
+
results = Product.search("Star Wars", default_operator: "AND")
|
30
|
+
refute_includes results, matrix
|
31
|
+
assert_includes results, star_wars
|
29
32
|
|
30
|
-
results = Product.search_multi_columns("Matrix movie", default_operator:
|
33
|
+
results = Product.search_multi_columns("Matrix movie", default_operator: "OR")
|
31
34
|
assert_includes results, matrix
|
32
|
-
refute_includes results,
|
35
|
+
refute_includes results, star_wars
|
33
36
|
|
34
|
-
results = Product.search(title: "Matrix", description: "2000", default_operator: :or)
|
37
|
+
results = Product.search({ title: "Matrix", description: "2000" }, default_operator: :or)
|
35
38
|
assert_includes results, matrix
|
36
|
-
refute_includes results,
|
39
|
+
refute_includes results, star_wars
|
37
40
|
end
|
38
41
|
|
39
42
|
def test_with_invalid_default_operator
|
40
43
|
assert_raises SearchCop::UnknownDefaultOperator do
|
41
|
-
Product.search_multi_columns(
|
44
|
+
Product.search_multi_columns("Matrix movie", default_operator: :xpto)
|
42
45
|
end
|
46
|
+
|
43
47
|
assert_raises SearchCop::UnknownDefaultOperator do
|
44
|
-
Product.search_multi_columns(title:
|
48
|
+
Product.search_multi_columns({ title: "Matrix movie" }, default_operator: :xpto)
|
45
49
|
end
|
46
50
|
end
|
47
|
-
end
|
51
|
+
end
|
data/test/error_test.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class ErrorTest < SearchCop::TestCase
|
5
4
|
def test_parse_error
|
6
5
|
assert_raises SearchCop::ParseError do
|
7
|
-
Product.unsafe_search :
|
6
|
+
Product.unsafe_search title: { unknown_operator: "Value" }
|
8
7
|
end
|
9
8
|
end
|
10
9
|
|
@@ -14,4 +13,3 @@ class ErrorTest < SearchCop::TestCase
|
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
17
|
-
|
data/test/float_test.rb
CHANGED
@@ -1,58 +1,57 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class FloatTest < SearchCop::TestCase
|
5
4
|
def test_anywhere
|
6
|
-
product = create(:product, :
|
5
|
+
product = create(:product, price: 10.5, created_at: Time.now - 1.day)
|
7
6
|
|
8
7
|
assert_includes Product.search("10.5"), product
|
9
8
|
refute_includes Product.search("11.5"), product
|
10
9
|
end
|
11
10
|
|
12
11
|
def test_includes
|
13
|
-
product = create(:product, :
|
12
|
+
product = create(:product, price: 10.5)
|
14
13
|
|
15
14
|
assert_includes Product.search("price: 10.5"), product
|
16
15
|
refute_includes Product.search("price: 11.5"), product
|
17
16
|
end
|
18
17
|
|
19
18
|
def test_equals
|
20
|
-
product = create(:product, :
|
19
|
+
product = create(:product, price: 10.5)
|
21
20
|
|
22
21
|
assert_includes Product.search("price = 10.5"), product
|
23
22
|
refute_includes Product.search("price = 11.5"), product
|
24
23
|
end
|
25
24
|
|
26
25
|
def test_equals_not
|
27
|
-
product = create(:product, :
|
26
|
+
product = create(:product, price: 10.5)
|
28
27
|
|
29
28
|
assert_includes Product.search("price != 11.5"), product
|
30
29
|
refute_includes Product.search("price != 10.5"), product
|
31
30
|
end
|
32
31
|
|
33
32
|
def test_greater
|
34
|
-
product = create(:product, :
|
33
|
+
product = create(:product, price: 10.5)
|
35
34
|
|
36
35
|
assert_includes Product.search("price > 10.4"), product
|
37
36
|
refute_includes Product.search("price < 10.5"), product
|
38
37
|
end
|
39
38
|
|
40
39
|
def test_greater_equals
|
41
|
-
product = create(:product, :
|
40
|
+
product = create(:product, price: 10.5)
|
42
41
|
|
43
42
|
assert_includes Product.search("price >= 10.5"), product
|
44
43
|
refute_includes Product.search("price >= 10.6"), product
|
45
44
|
end
|
46
45
|
|
47
46
|
def test_less
|
48
|
-
product = create(:product, :
|
47
|
+
product = create(:product, price: 10.5)
|
49
48
|
|
50
49
|
assert_includes Product.search("price < 10.6"), product
|
51
50
|
refute_includes Product.search("price < 10.5"), product
|
52
51
|
end
|
53
52
|
|
54
53
|
def test_less_equals
|
55
|
-
product = create(:product, :
|
54
|
+
product = create(:product, price: 10.5)
|
56
55
|
|
57
56
|
assert_includes Product.search("price <= 10.5"), product
|
58
57
|
refute_includes Product.search("price <= 10.4"), product
|
@@ -71,4 +70,3 @@ class FloatTest < SearchCop::TestCase
|
|
71
70
|
end
|
72
71
|
end
|
73
72
|
end
|
74
|
-
|
data/test/fulltext_test.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class FulltextTest < SearchCop::TestCase
|
5
4
|
def test_complex
|
6
|
-
product1 = create(:product, :
|
7
|
-
product2 = create(:product, :
|
8
|
-
product3 = create(:product, :
|
5
|
+
product1 = create(:product, title: "word1")
|
6
|
+
product2 = create(:product, title: "word2 word3")
|
7
|
+
product3 = create(:product, title: "word2")
|
9
8
|
|
10
9
|
results = Product.search("word1 OR (title:word2 -word3)")
|
11
10
|
|
@@ -15,8 +14,8 @@ class FulltextTest < SearchCop::TestCase
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def test_mixed
|
18
|
-
expected = create(:product, :
|
19
|
-
rejected = create(:product, :
|
17
|
+
expected = create(:product, title: "Expected title", stock: 1)
|
18
|
+
rejected = create(:product, title: "Expected title", stock: 0)
|
20
19
|
|
21
20
|
results = Product.search("Expected title:Title stock > 0")
|
22
21
|
|
@@ -24,4 +23,3 @@ class FulltextTest < SearchCop::TestCase
|
|
24
23
|
refute_includes results, rejected
|
25
24
|
end
|
26
25
|
end
|
27
|
-
|
data/test/hash_test.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
1
|
+
require File.expand_path("test_helper", __dir__)
|
3
2
|
|
4
3
|
class HashTest < SearchCop::TestCase
|
5
4
|
def test_subquery
|
6
|
-
product1 = create(:product, :
|
7
|
-
product2 = create(:product, :
|
8
|
-
product3 = create(:product, :
|
5
|
+
product1 = create(:product, title: "Title1", description: "Description")
|
6
|
+
product2 = create(:product, title: "Title2", description: "Description")
|
7
|
+
product3 = create(:product, title: "TItle3", description: "Description")
|
9
8
|
|
10
|
-
results = Product.search(:
|
9
|
+
results = Product.search(or: [{ query: "Description Title1" }, { query: "Description Title2" }])
|
11
10
|
|
12
11
|
assert_includes results, product1
|
13
12
|
assert_includes results, product2
|
@@ -15,93 +14,92 @@ class HashTest < SearchCop::TestCase
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def test_matches
|
18
|
-
expected = create(:product, :
|
19
|
-
rejected = create(:product, :
|
17
|
+
expected = create(:product, title: "Expected")
|
18
|
+
rejected = create(:product, title: "Rejected")
|
20
19
|
|
21
|
-
results = Product.search(:
|
20
|
+
results = Product.search(title: { matches: "Expected" })
|
22
21
|
|
23
22
|
assert_includes results, expected
|
24
23
|
refute_includes results, rejected
|
25
24
|
end
|
26
25
|
|
27
26
|
def test_matches_default
|
28
|
-
expected = create(:product, :
|
29
|
-
rejected = create(:product, :
|
27
|
+
expected = create(:product, title: "Expected")
|
28
|
+
rejected = create(:product, title: "Rejected")
|
30
29
|
|
31
|
-
results = Product.search(:
|
30
|
+
results = Product.search(title: "Expected")
|
32
31
|
|
33
32
|
assert_includes results, expected
|
34
33
|
refute_includes results, rejected
|
35
34
|
end
|
36
35
|
|
37
36
|
def test_eq
|
38
|
-
expected = create(:product, :
|
39
|
-
rejected = create(:product, :
|
37
|
+
expected = create(:product, title: "Expected")
|
38
|
+
rejected = create(:product, title: "Rejected")
|
40
39
|
|
41
|
-
results = Product.search(:
|
40
|
+
results = Product.search(title: { eq: "Expected" })
|
42
41
|
|
43
42
|
assert_includes results, expected
|
44
43
|
refute_includes results, rejected
|
45
44
|
end
|
46
45
|
|
47
46
|
def test_not_eq
|
48
|
-
expected = create(:product, :
|
49
|
-
rejected = create(:product, :
|
47
|
+
expected = create(:product, title: "Expected")
|
48
|
+
rejected = create(:product, title: "Rejected")
|
50
49
|
|
51
|
-
results = Product.search(:
|
50
|
+
results = Product.search(title: { not_eq: "Rejected" })
|
52
51
|
|
53
52
|
assert_includes results, expected
|
54
53
|
refute_includes results, rejected
|
55
54
|
end
|
56
55
|
|
57
56
|
def test_gt
|
58
|
-
expected = create(:product, :
|
59
|
-
rejected = create(:product, :
|
57
|
+
expected = create(:product, stock: 1)
|
58
|
+
rejected = create(:product, stock: 0)
|
60
59
|
|
61
|
-
results = Product.search(:
|
60
|
+
results = Product.search(stock: { gt: 0 })
|
62
61
|
|
63
62
|
assert_includes results, expected
|
64
63
|
refute_includes results, rejected
|
65
64
|
end
|
66
65
|
|
67
66
|
def test_gteq
|
68
|
-
expected = create(:product, :
|
69
|
-
rejected = create(:product, :
|
67
|
+
expected = create(:product, stock: 1)
|
68
|
+
rejected = create(:product, stock: 0)
|
70
69
|
|
71
|
-
results = Product.search(:
|
70
|
+
results = Product.search(stock: { gteq: 1 })
|
72
71
|
|
73
72
|
assert_includes results, expected
|
74
73
|
refute_includes results, rejected
|
75
74
|
end
|
76
75
|
|
77
76
|
def test_lt
|
78
|
-
expected = create(:product, :
|
79
|
-
rejected = create(:product, :
|
77
|
+
expected = create(:product, stock: 0)
|
78
|
+
rejected = create(:product, stock: 1)
|
80
79
|
|
81
|
-
results = Product.search(:
|
80
|
+
results = Product.search(stock: { lt: 1 })
|
82
81
|
|
83
82
|
assert_includes results, expected
|
84
83
|
refute_includes results, rejected
|
85
84
|
end
|
86
85
|
|
87
86
|
def test_lteq
|
88
|
-
expected = create(:product, :
|
89
|
-
rejected = create(:product, :
|
87
|
+
expected = create(:product, stock: 0)
|
88
|
+
rejected = create(:product, stock: 1)
|
90
89
|
|
91
|
-
results = Product.search(:
|
90
|
+
results = Product.search(stock: { lteq: 0 })
|
92
91
|
|
93
92
|
assert_includes results, expected
|
94
93
|
refute_includes results, rejected
|
95
94
|
end
|
96
95
|
|
97
96
|
def test_custom_matcher
|
98
|
-
expected = create(:product, :
|
99
|
-
rejected = create(:product, :
|
97
|
+
expected = create(:product, title: "Expected")
|
98
|
+
rejected = create(:product, title: "Rejected")
|
100
99
|
|
101
|
-
results = Product.search(:
|
100
|
+
results = Product.search(title: { custom_eq: "Expected" })
|
102
101
|
|
103
102
|
assert_includes results, expected
|
104
103
|
refute_includes results, rejected
|
105
104
|
end
|
106
105
|
end
|
107
|
-
|