search_cop 1.2.3 → 1.3.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.
data/test/date_test.rb DELETED
@@ -1,107 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class DateTest < SearchCop::TestCase
4
- def test_mapping
5
- product = create(:product, created_on: Date.parse("2014-05-01"))
6
-
7
- assert_includes Product.search("created_on: 2014"), product
8
- assert_includes Product.search("created_on: 2014-05"), product
9
- assert_includes Product.search("created_on: 2014-05-01"), product
10
- end
11
-
12
- def test_anywhere
13
- product = create(:product, created_on: Date.parse("2014-05-01"))
14
-
15
- assert_includes Product.search("2014-05-01"), product
16
- refute_includes Product.search("2014-05-02"), product
17
- end
18
-
19
- def test_includes
20
- product = create(:product, created_on: Date.parse("2014-05-01"))
21
-
22
- assert_includes Product.search("created_on: 2014-05-01"), product
23
- refute_includes Product.search("created_on: 2014-05-02"), product
24
- end
25
-
26
- def test_equals
27
- product = create(:product, created_on: Date.parse("2014-05-01"))
28
-
29
- assert_includes Product.search("created_on = 2014-05-01"), product
30
- refute_includes Product.search("created_on = 2014-05-02"), product
31
- end
32
-
33
- def test_equals_not
34
- product = create(:product, created_on: Date.parse("2014-05-01"))
35
-
36
- assert_includes Product.search("created_on != 2014-05-02"), product
37
- refute_includes Product.search("created_on != 2014-05-01"), product
38
- end
39
-
40
- def test_greater
41
- product = create(:product, created_on: Date.parse("2014-05-01"))
42
-
43
- assert_includes Product.search("created_on > 2014-04-01"), product
44
- refute_includes Product.search("created_on > 2014-05-01"), product
45
- end
46
-
47
- def test_greater_equals
48
- product = create(:product, created_on: Date.parse("2014-05-01"))
49
-
50
- assert_includes Product.search("created_on >= 2014-05-01"), product
51
- refute_includes Product.search("created_on >= 2014-05-02"), product
52
- end
53
-
54
- def test_less
55
- product = create(:product, created_on: Date.parse("2014-05-01"))
56
-
57
- assert_includes Product.search("created_on < 2014-05-02"), product
58
- refute_includes Product.search("created_on < 2014-05-01"), product
59
- end
60
-
61
- def test_less_equals
62
- product = create(:product, created_on: Date.parse("2014-05-02"))
63
-
64
- assert_includes Product.search("created_on <= 2014-05-02"), product
65
- refute_includes Product.search("created_on <= 2014-05-01"), product
66
- end
67
-
68
- def test_days_ago
69
- product = create(:product, created_at: 2.days.ago.to_date)
70
-
71
- assert_includes Product.search("created_at <= '1 day ago'"), product
72
- refute_includes Product.search("created_at <= '3 days ago'"), product
73
- end
74
-
75
- def test_weeks_ago
76
- product = create(:product, created_at: 2.weeks.ago.to_date)
77
-
78
- assert_includes Product.search("created_at <= '1 weeks ago'"), product
79
- refute_includes Product.search("created_at <= '3 weeks ago'"), product
80
- end
81
-
82
- def test_months_ago
83
- product = create(:product, created_at: 2.months.ago.to_date)
84
-
85
- assert_includes Product.search("created_at <= '1 months ago'"), product
86
- refute_includes Product.search("created_at <= '3 months ago'"), product
87
- end
88
-
89
- def test_years_ago
90
- product = create(:product, created_at: 2.years.ago.to_date)
91
-
92
- assert_includes Product.search("created_at <= '1 years ago'"), product
93
- refute_includes Product.search("created_at <= '3 years ago'"), product
94
- end
95
-
96
- def test_no_overflow
97
- assert_nothing_raised do
98
- Product.search("created_on: 1000000").to_a
99
- end
100
- end
101
-
102
- def test_incompatible_datatype
103
- assert_raises SearchCop::IncompatibleDatatype do
104
- Product.unsafe_search "created_on: Value"
105
- end
106
- end
107
- end
@@ -1,115 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class DatetimeTest < SearchCop::TestCase
4
- def test_mapping
5
- product = create(:product, created_at: Time.parse("2014-05-01 12:30:30"))
6
-
7
- assert_includes Product.search("created_at: 2014"), product
8
- assert_includes Product.search("created_at: 2014-05"), product
9
- assert_includes Product.search("created_at: 2014-05-01"), product
10
- assert_includes Product.search("created_at: '2014-05-01 12:30:30'"), product
11
- end
12
-
13
- def test_anywhere
14
- product = create(:product, created_at: Time.parse("2014-05-01"))
15
-
16
- assert_includes Product.search("2014-05-01"), product
17
- refute_includes Product.search("2014-05-02"), product
18
- end
19
-
20
- def test_includes
21
- product = create(:product, created_at: Time.parse("2014-05-01"))
22
-
23
- assert_includes Product.search("created_at: 2014-05-01"), product
24
- refute_includes Product.search("created_at: 2014-05-02"), product
25
- end
26
-
27
- def test_equals
28
- product = create(:product, created_at: Time.parse("2014-05-01"))
29
-
30
- assert_includes Product.search("created_at = 2014-05-01"), product
31
- refute_includes Product.search("created_at = 2014-05-02"), product
32
- end
33
-
34
- def test_equals_not
35
- product = create(:product, created_at: Time.parse("2014-05-01"))
36
-
37
- assert_includes Product.search("created_at != 2014-05-02"), product
38
- refute_includes Product.search("created_at != 2014-05-01"), product
39
- end
40
-
41
- def test_greater
42
- product = create(:product, created_at: Time.parse("2014-05-01"))
43
-
44
- assert_includes Product.search("created_at > 2014-04-01"), product
45
- refute_includes Product.search("created_at > 2014-05-01"), product
46
- end
47
-
48
- def test_greater_equals
49
- product = create(:product, created_at: Time.parse("2014-05-01"))
50
-
51
- assert_includes Product.search("created_at >= 2014-05-01"), product
52
- refute_includes Product.search("created_at >= 2014-05-02"), product
53
- end
54
-
55
- def test_less
56
- product = create(:product, created_at: Time.parse("2014-05-01"))
57
-
58
- assert_includes Product.search("created_at < 2014-05-02"), product
59
- refute_includes Product.search("created_at < 2014-05-01"), product
60
- end
61
-
62
- def test_less_equals
63
- product = create(:product, created_at: Time.parse("2014-05-02"))
64
-
65
- assert_includes Product.search("created_at <= 2014-05-02"), product
66
- refute_includes Product.search("created_at <= 2014-05-01"), product
67
- end
68
-
69
- def test_hours_ago
70
- product = create(:product, created_at: 5.hours.ago)
71
-
72
- assert_includes Product.search("created_at <= '4 hours ago'"), product
73
- refute_includes Product.search("created_at <= '6 hours ago'"), product
74
- end
75
-
76
- def test_days_ago
77
- product = create(:product, created_at: 2.days.ago)
78
-
79
- assert_includes Product.search("created_at <= '1 day ago'"), product
80
- refute_includes Product.search("created_at <= '3 days ago'"), product
81
- end
82
-
83
- def test_weeks_ago
84
- product = create(:product, created_at: 2.weeks.ago)
85
-
86
- assert_includes Product.search("created_at <= '1 weeks ago'"), product
87
- refute_includes Product.search("created_at <= '3 weeks ago'"), product
88
- end
89
-
90
- def test_months_ago
91
- product = create(:product, created_at: 2.months.ago)
92
-
93
- assert_includes Product.search("created_at <= '1 months ago'"), product
94
- refute_includes Product.search("created_at <= '3 months ago'"), product
95
- end
96
-
97
- def test_years_ago
98
- product = create(:product, created_at: 2.years.ago)
99
-
100
- assert_includes Product.search("created_at <= '1 years ago'"), product
101
- refute_includes Product.search("created_at <= '3 years ago'"), product
102
- end
103
-
104
- def test_no_overflow
105
- assert_nothing_raised do
106
- Product.search("created_at: 1000000").to_a
107
- end
108
- end
109
-
110
- def test_incompatible_datatype
111
- assert_raises SearchCop::IncompatibleDatatype do
112
- Product.unsafe_search "created_at: Value"
113
- end
114
- end
115
- end
@@ -1,51 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class DefaultOperatorTest < SearchCop::TestCase
4
- def test_without_default_operator
5
- avengers = create(:product, title: "Title Avengers", description: "2012")
6
- inception = create(:product, title: "Title Inception", description: "2010")
7
-
8
- results = Product.search_multi_columns("Title Avengers")
9
- assert_includes results, avengers
10
- refute_includes results, inception
11
-
12
- results = Product.search_multi_columns("Title AND Avengers")
13
- assert_includes results, avengers
14
- refute_includes results, inception
15
-
16
- results = Product.search_multi_columns("Title OR Avengers")
17
- assert_includes results, avengers
18
- assert_includes results, inception
19
-
20
- results = Product.search(title: "Avengers", description: "2012")
21
- assert_includes results, avengers
22
- refute_includes results, inception
23
- end
24
-
25
- def test_with_specific_default_operator
26
- matrix = create(:product, title: "Matrix", description: "1999 Fantasy Sci-fi 2h 30m")
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
32
-
33
- results = Product.search_multi_columns("Matrix movie", default_operator: "OR")
34
- assert_includes results, matrix
35
- refute_includes results, star_wars
36
-
37
- results = Product.search({ title: "Matrix", description: "2000" }, default_operator: :or)
38
- assert_includes results, matrix
39
- refute_includes results, star_wars
40
- end
41
-
42
- def test_with_invalid_default_operator
43
- assert_raises SearchCop::UnknownDefaultOperator do
44
- Product.search_multi_columns("Matrix movie", default_operator: :xpto)
45
- end
46
-
47
- assert_raises SearchCop::UnknownDefaultOperator do
48
- Product.search_multi_columns({ title: "Matrix movie" }, default_operator: :xpto)
49
- end
50
- end
51
- end
data/test/error_test.rb DELETED
@@ -1,15 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class ErrorTest < SearchCop::TestCase
4
- def test_parse_error
5
- assert_raises SearchCop::ParseError do
6
- Product.unsafe_search title: { unknown_operator: "Value" }
7
- end
8
- end
9
-
10
- def test_unknown_column
11
- assert_raises SearchCop::UnknownColumn do
12
- Product.unsafe_search "Unknown: Column"
13
- end
14
- end
15
- end
data/test/float_test.rb DELETED
@@ -1,72 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class FloatTest < SearchCop::TestCase
4
- def test_anywhere
5
- product = create(:product, price: 10.5, created_at: Time.now - 1.day)
6
-
7
- assert_includes Product.search("10.5"), product
8
- refute_includes Product.search("11.5"), product
9
- end
10
-
11
- def test_includes
12
- product = create(:product, price: 10.5)
13
-
14
- assert_includes Product.search("price: 10.5"), product
15
- refute_includes Product.search("price: 11.5"), product
16
- end
17
-
18
- def test_equals
19
- product = create(:product, price: 10.5)
20
-
21
- assert_includes Product.search("price = 10.5"), product
22
- refute_includes Product.search("price = 11.5"), product
23
- end
24
-
25
- def test_equals_not
26
- product = create(:product, price: 10.5)
27
-
28
- assert_includes Product.search("price != 11.5"), product
29
- refute_includes Product.search("price != 10.5"), product
30
- end
31
-
32
- def test_greater
33
- product = create(:product, price: 10.5)
34
-
35
- assert_includes Product.search("price > 10.4"), product
36
- refute_includes Product.search("price < 10.5"), product
37
- end
38
-
39
- def test_greater_equals
40
- product = create(:product, price: 10.5)
41
-
42
- assert_includes Product.search("price >= 10.5"), product
43
- refute_includes Product.search("price >= 10.6"), product
44
- end
45
-
46
- def test_less
47
- product = create(:product, price: 10.5)
48
-
49
- assert_includes Product.search("price < 10.6"), product
50
- refute_includes Product.search("price < 10.5"), product
51
- end
52
-
53
- def test_less_equals
54
- product = create(:product, price: 10.5)
55
-
56
- assert_includes Product.search("price <= 10.5"), product
57
- refute_includes Product.search("price <= 10.4"), product
58
- end
59
-
60
- def test_negative
61
- product = create(:product, price: -10)
62
-
63
- assert_includes Product.search("price = -10"), product
64
- refute_includes Product.search("price = -11"), product
65
- end
66
-
67
- def test_incompatible_datatype
68
- assert_raises SearchCop::IncompatibleDatatype do
69
- Product.unsafe_search "price: Value"
70
- end
71
- end
72
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class FulltextTest < SearchCop::TestCase
4
- def test_complex
5
- product1 = create(:product, title: "word1")
6
- product2 = create(:product, title: "word2 word3")
7
- product3 = create(:product, title: "word2")
8
-
9
- results = Product.search("word1 OR (title:word2 -word3)")
10
-
11
- assert_includes results, product1
12
- refute_includes results, product2
13
- assert_includes results, product3
14
- end
15
-
16
- def test_mixed
17
- expected = create(:product, title: "Expected title", stock: 1)
18
- rejected = create(:product, title: "Expected title", stock: 0)
19
-
20
- results = Product.search("Expected title:Title stock > 0")
21
-
22
- assert_includes results, expected
23
- refute_includes results, rejected
24
- end
25
- end
data/test/hash_test.rb DELETED
@@ -1,105 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class HashTest < SearchCop::TestCase
4
- def test_subquery
5
- product1 = create(:product, title: "Title1", description: "Description")
6
- product2 = create(:product, title: "Title2", description: "Description")
7
- product3 = create(:product, title: "TItle3", description: "Description")
8
-
9
- results = Product.search(or: [{ query: "Description Title1" }, { query: "Description Title2" }])
10
-
11
- assert_includes results, product1
12
- assert_includes results, product2
13
- refute_includes results, product3
14
- end
15
-
16
- def test_matches
17
- expected = create(:product, title: "Expected")
18
- rejected = create(:product, title: "Rejected")
19
-
20
- results = Product.search(title: { matches: "Expected" })
21
-
22
- assert_includes results, expected
23
- refute_includes results, rejected
24
- end
25
-
26
- def test_matches_default
27
- expected = create(:product, title: "Expected")
28
- rejected = create(:product, title: "Rejected")
29
-
30
- results = Product.search(title: "Expected")
31
-
32
- assert_includes results, expected
33
- refute_includes results, rejected
34
- end
35
-
36
- def test_eq
37
- expected = create(:product, title: "Expected")
38
- rejected = create(:product, title: "Rejected")
39
-
40
- results = Product.search(title: { eq: "Expected" })
41
-
42
- assert_includes results, expected
43
- refute_includes results, rejected
44
- end
45
-
46
- def test_not_eq
47
- expected = create(:product, title: "Expected")
48
- rejected = create(:product, title: "Rejected")
49
-
50
- results = Product.search(title: { not_eq: "Rejected" })
51
-
52
- assert_includes results, expected
53
- refute_includes results, rejected
54
- end
55
-
56
- def test_gt
57
- expected = create(:product, stock: 1)
58
- rejected = create(:product, stock: 0)
59
-
60
- results = Product.search(stock: { gt: 0 })
61
-
62
- assert_includes results, expected
63
- refute_includes results, rejected
64
- end
65
-
66
- def test_gteq
67
- expected = create(:product, stock: 1)
68
- rejected = create(:product, stock: 0)
69
-
70
- results = Product.search(stock: { gteq: 1 })
71
-
72
- assert_includes results, expected
73
- refute_includes results, rejected
74
- end
75
-
76
- def test_lt
77
- expected = create(:product, stock: 0)
78
- rejected = create(:product, stock: 1)
79
-
80
- results = Product.search(stock: { lt: 1 })
81
-
82
- assert_includes results, expected
83
- refute_includes results, rejected
84
- end
85
-
86
- def test_lteq
87
- expected = create(:product, stock: 0)
88
- rejected = create(:product, stock: 1)
89
-
90
- results = Product.search(stock: { lteq: 0 })
91
-
92
- assert_includes results, expected
93
- refute_includes results, rejected
94
- end
95
-
96
- def test_custom_matcher
97
- expected = create(:product, title: "Expected")
98
- rejected = create(:product, title: "Rejected")
99
-
100
- results = Product.search(title: { custom_eq: "Expected" })
101
-
102
- assert_includes results, expected
103
- refute_includes results, rejected
104
- end
105
- end
data/test/integer_test.rb DELETED
@@ -1,65 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class IntegerTest < SearchCop::TestCase
4
- def test_anywhere
5
- product = create(:product, stock: 1)
6
-
7
- assert_includes Product.search("1"), product
8
- refute_includes Product.search("0"), product
9
- end
10
-
11
- def test_includes
12
- product = create(:product, stock: 1)
13
-
14
- assert_includes Product.search("stock: 1"), product
15
- refute_includes Product.search("stock: 10"), product
16
- end
17
-
18
- def test_equals
19
- product = create(:product, stock: 1)
20
-
21
- assert_includes Product.search("stock = 1"), product
22
- refute_includes Product.search("stock = 0"), product
23
- end
24
-
25
- def test_equals_not
26
- product = create(:product, stock: 1)
27
-
28
- assert_includes Product.search("stock != 0"), product
29
- refute_includes Product.search("stock != 1"), product
30
- end
31
-
32
- def test_greater
33
- product = create(:product, stock: 1)
34
-
35
- assert_includes Product.search("stock > 0"), product
36
- refute_includes Product.search("stock < 1"), product
37
- end
38
-
39
- def test_greater_equals
40
- product = create(:product, stock: 1)
41
-
42
- assert_includes Product.search("stock >= 1"), product
43
- refute_includes Product.search("stock >= 2"), product
44
- end
45
-
46
- def test_less
47
- product = create(:product, stock: 1)
48
-
49
- assert_includes Product.search("stock < 2"), product
50
- refute_includes Product.search("stock < 1"), product
51
- end
52
-
53
- def test_less_equals
54
- product = create(:product, stock: 1)
55
-
56
- assert_includes Product.search("stock <= 1"), product
57
- refute_includes Product.search("stock <= 0"), product
58
- end
59
-
60
- def test_incompatible_datatype
61
- assert_raises SearchCop::IncompatibleDatatype do
62
- Product.unsafe_search "stock: Value"
63
- end
64
- end
65
- end
data/test/not_test.rb DELETED
@@ -1,25 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class NotTest < SearchCop::TestCase
4
- def test_not_string
5
- expected = create(:product, title: "Expected title")
6
- rejected = create(:product, title: "Rejected title")
7
-
8
- results = Product.search("title: Title NOT title: Rejected")
9
-
10
- assert_includes results, expected
11
- refute_includes results, rejected
12
-
13
- assert_equal results, Product.search("title: Title -title: Rejected")
14
- end
15
-
16
- def test_not_hash
17
- expected = create(:product, title: "Expected title")
18
- rejected = create(:product, title: "Rejected title")
19
-
20
- results = Product.search(and: [{ title: "Title" }, { not: { title: "Rejected" } }])
21
-
22
- assert_includes results, expected
23
- refute_includes results, rejected
24
- end
25
- end
data/test/or_test.rb DELETED
@@ -1,27 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class OrTest < SearchCop::TestCase
4
- def test_or_string
5
- product1 = create(:product, title: "Title1")
6
- product2 = create(:product, title: "Title2")
7
- product3 = create(:product, title: "Title3")
8
-
9
- results = Product.search("title: Title1 OR title: Title2")
10
-
11
- assert_includes results, product1
12
- assert_includes results, product2
13
- refute_includes results, product3
14
- end
15
-
16
- def test_or_hash
17
- product1 = create(:product, title: "Title1")
18
- product2 = create(:product, title: "Title2")
19
- product3 = create(:product, title: "Title3")
20
-
21
- results = Product.search(or: [{ title: "Title1" }, { title: "Title2" }])
22
-
23
- assert_includes results, product1
24
- assert_includes results, product2
25
- refute_includes results, product3
26
- end
27
- end
data/test/scope_test.rb DELETED
@@ -1,53 +0,0 @@
1
- require File.expand_path("test_helper", __dir__)
2
-
3
- class ScopeTest < SearchCop::TestCase
4
- def test_scope_name
5
- expected = create(:product, title: "Expected")
6
- rejected = create(:product, notice: "Expected")
7
-
8
- results = Product.user_search("Expected")
9
-
10
- assert_includes results, expected
11
- refute_includes results, rejected
12
- end
13
-
14
- def test_options
15
- expected = create(:product, title: "Expected")
16
- rejected = create(:product, description: "Expected")
17
-
18
- results = Product.user_search("Expected")
19
-
20
- assert_includes results, expected
21
- refute_includes results, rejected
22
- end
23
-
24
- def test_custom_scope
25
- expected = create(:product, user: create(:user, username: "Expected"))
26
- rejected = create(:product, user: create(:user, username: "Rejected"))
27
-
28
- results = Product.user_search("user: Expected")
29
-
30
- assert_includes results, expected
31
- refute_includes results, rejected
32
- end
33
-
34
- def test_aliases_with_association
35
- expected = create(:product, user: create(:user, username: "Expected"))
36
- rejected = create(:product, user: create(:user, username: "Rejected"))
37
-
38
- results = Product.search("user: Expected")
39
-
40
- assert_includes results, expected
41
- refute_includes results, rejected
42
- end
43
-
44
- def test_aliases_with_model
45
- expected = create(:product, user: create(:user, username: "Expected"))
46
- rejected = create(:product, user: create(:user, username: "Rejected"))
47
-
48
- results = Product.user_search("user: Expected")
49
-
50
- assert_includes results, expected
51
- refute_includes results, rejected
52
- end
53
- end