search_cop 1.1.0 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +50 -0
  3. data/.rubocop.yml +134 -0
  4. data/CHANGELOG.md +23 -9
  5. data/Gemfile +4 -5
  6. data/README.md +11 -1
  7. data/Rakefile +0 -1
  8. data/docker-compose.yml +8 -1
  9. data/gemfiles/{5.1.gemfile → rails5.gemfile} +2 -2
  10. data/gemfiles/rails6.gemfile +13 -0
  11. data/gemfiles/rails7.gemfile +13 -0
  12. data/lib/search_cop/grammar_parser.rb +1 -3
  13. data/lib/search_cop/hash_parser.rb +19 -19
  14. data/lib/search_cop/helpers.rb +15 -0
  15. data/lib/search_cop/query_builder.rb +1 -3
  16. data/lib/search_cop/query_info.rb +0 -2
  17. data/lib/search_cop/search_scope.rb +3 -5
  18. data/lib/search_cop/version.rb +1 -1
  19. data/lib/search_cop/visitors/mysql.rb +4 -2
  20. data/lib/search_cop/visitors/postgres.rb +5 -3
  21. data/lib/search_cop/visitors/visitor.rb +5 -3
  22. data/lib/search_cop/visitors.rb +0 -2
  23. data/lib/search_cop.rb +5 -23
  24. data/lib/search_cop_grammar/attributes.rb +45 -34
  25. data/lib/search_cop_grammar/nodes.rb +0 -2
  26. data/lib/search_cop_grammar.rb +1 -3
  27. data/search_cop.gemspec +8 -9
  28. data/test/and_test.rb +6 -8
  29. data/test/boolean_test.rb +7 -9
  30. data/test/database.yml +2 -1
  31. data/test/date_test.rb +14 -16
  32. data/test/datetime_test.rb +15 -17
  33. data/test/default_operator_test.rb +14 -10
  34. data/test/error_test.rb +2 -4
  35. data/test/float_test.rb +9 -11
  36. data/test/fulltext_test.rb +6 -8
  37. data/test/hash_test.rb +32 -34
  38. data/test/integer_test.rb +9 -11
  39. data/test/namespace_test.rb +23 -0
  40. data/test/not_test.rb +6 -8
  41. data/test/or_test.rb +8 -10
  42. data/test/scope_test.rb +11 -13
  43. data/test/search_cop_test.rb +41 -34
  44. data/test/string_test.rb +67 -19
  45. data/test/test_helper.rb +34 -15
  46. data/test/visitor_test.rb +4 -6
  47. metadata +34 -35
  48. data/.travis.yml +0 -34
  49. data/gemfiles/4.2.gemfile +0 -13
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, :price => 10.5, :created_at => Time.now - 1.day)
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, :price => 10.5)
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, :price => 10.5)
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, :price => 10.5)
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, :price => 10.5)
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, :price => 10.5)
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, :price => 10.5)
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, :price => 10.5)
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
-
@@ -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, :title => "word1")
7
- product2 = create(:product, :title => "word2 word3")
8
- product3 = create(:product, :title => "word2")
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, :title => "Expected title", :stock => 1)
19
- rejected = create(:product, :title => "Expected title", :stock => 0)
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, :title => "Title1", :description => "Description")
7
- product2 = create(:product, :title => "Title2", :description => "Description")
8
- product3 = create(:product, :title => "TItle3", :description => "Description")
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(:or => [{ :query => "Description Title1" }, { :query => "Description Title2" }])
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, :title => "Expected")
19
- rejected = create(:product, :title => "Rejected")
17
+ expected = create(:product, title: "Expected")
18
+ rejected = create(:product, title: "Rejected")
20
19
 
21
- results = Product.search(:title => { :matches => "Expected" })
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, :title => "Expected")
29
- rejected = create(:product, :title => "Rejected")
27
+ expected = create(:product, title: "Expected")
28
+ rejected = create(:product, title: "Rejected")
30
29
 
31
- results = Product.search(:title => "Expected")
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, :title => "Expected")
39
- rejected = create(:product, :title => "Rejected")
37
+ expected = create(:product, title: "Expected")
38
+ rejected = create(:product, title: "Rejected")
40
39
 
41
- results = Product.search(:title => { :eq => "Expected" })
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, :title => "Expected")
49
- rejected = create(:product, :title => "Rejected")
47
+ expected = create(:product, title: "Expected")
48
+ rejected = create(:product, title: "Rejected")
50
49
 
51
- results = Product.search(:title => { :not_eq => "Rejected" })
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, :stock => 1)
59
- rejected = create(:product, :stock => 0)
57
+ expected = create(:product, stock: 1)
58
+ rejected = create(:product, stock: 0)
60
59
 
61
- results = Product.search(:stock => { :gt => 0 })
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, :stock => 1)
69
- rejected = create(:product, :stock => 0)
67
+ expected = create(:product, stock: 1)
68
+ rejected = create(:product, stock: 0)
70
69
 
71
- results = Product.search(:stock => { :gteq => 1 })
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, :stock => 0)
79
- rejected = create(:product, :stock => 1)
77
+ expected = create(:product, stock: 0)
78
+ rejected = create(:product, stock: 1)
80
79
 
81
- results = Product.search(:stock => { :lt => 1 })
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, :stock => 0)
89
- rejected = create(:product, :stock => 1)
87
+ expected = create(:product, stock: 0)
88
+ rejected = create(:product, stock: 1)
90
89
 
91
- results = Product.search(:stock => { :lteq => 0 })
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, :title => "Expected")
99
- rejected = create(:product, :title => "Rejected")
97
+ expected = create(:product, title: "Expected")
98
+ rejected = create(:product, title: "Rejected")
100
99
 
101
- results = Product.search(:title => { :custom_eq => "Expected" })
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
-
data/test/integer_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 IntegerTest < SearchCop::TestCase
5
4
  def test_anywhere
6
- product = create(:product, :stock => 1)
5
+ product = create(:product, stock: 1)
7
6
 
8
7
  assert_includes Product.search("1"), product
9
8
  refute_includes Product.search("0"), product
10
9
  end
11
10
 
12
11
  def test_includes
13
- product = create(:product, :stock => 1)
12
+ product = create(:product, stock: 1)
14
13
 
15
14
  assert_includes Product.search("stock: 1"), product
16
15
  refute_includes Product.search("stock: 10"), product
17
16
  end
18
17
 
19
18
  def test_equals
20
- product = create(:product, :stock => 1)
19
+ product = create(:product, stock: 1)
21
20
 
22
21
  assert_includes Product.search("stock = 1"), product
23
22
  refute_includes Product.search("stock = 0"), product
24
23
  end
25
24
 
26
25
  def test_equals_not
27
- product = create(:product, :stock => 1)
26
+ product = create(:product, stock: 1)
28
27
 
29
28
  assert_includes Product.search("stock != 0"), product
30
29
  refute_includes Product.search("stock != 1"), product
31
30
  end
32
31
 
33
32
  def test_greater
34
- product = create(:product, :stock => 1)
33
+ product = create(:product, stock: 1)
35
34
 
36
35
  assert_includes Product.search("stock > 0"), product
37
36
  refute_includes Product.search("stock < 1"), product
38
37
  end
39
38
 
40
39
  def test_greater_equals
41
- product = create(:product, :stock => 1)
40
+ product = create(:product, stock: 1)
42
41
 
43
42
  assert_includes Product.search("stock >= 1"), product
44
43
  refute_includes Product.search("stock >= 2"), product
45
44
  end
46
45
 
47
46
  def test_less
48
- product = create(:product, :stock => 1)
47
+ product = create(:product, stock: 1)
49
48
 
50
49
  assert_includes Product.search("stock < 2"), product
51
50
  refute_includes Product.search("stock < 1"), product
52
51
  end
53
52
 
54
53
  def test_less_equals
55
- product = create(:product, :stock => 1)
54
+ product = create(:product, stock: 1)
56
55
 
57
56
  assert_includes Product.search("stock <= 1"), product
58
57
  refute_includes Product.search("stock <= 0"), product
@@ -64,4 +63,3 @@ class IntegerTest < SearchCop::TestCase
64
63
  end
65
64
  end
66
65
  end
67
-
@@ -0,0 +1,23 @@
1
+ require File.expand_path("test_helper", __dir__)
2
+
3
+ class NamespaceTest < SearchCop::TestCase
4
+ def test_model_namespace
5
+ expected = create(:product, title: "Expected")
6
+ rejected = create(:product, title: "Rejected")
7
+
8
+ results = SomeNamespace::Product.search("Expected")
9
+
10
+ assert_includes results.map(&:id), expected.id
11
+ refute_includes results.map(&:id), rejected.id
12
+ end
13
+
14
+ def test_model_namespace_with_associations
15
+ expected = create(:product, user: create(:user, username: "Expected"))
16
+ rejected = create(:product, user: create(:user, username: "Rejected"))
17
+
18
+ results = SomeNamespace::Product.search("user:Expected")
19
+
20
+ assert_includes results.map(&:id), expected.id
21
+ refute_includes results.map(&:id), rejected.id
22
+ end
23
+ end
data/test/not_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 NotTest < SearchCop::TestCase
5
4
  def test_not_string
6
- expected = create(:product, :title => "Expected title")
7
- rejected = create(:product, :title => "Rejected title")
5
+ expected = create(:product, title: "Expected title")
6
+ rejected = create(:product, title: "Rejected title")
8
7
 
9
8
  results = Product.search("title: Title NOT title: Rejected")
10
9
 
@@ -15,13 +14,12 @@ class NotTest < SearchCop::TestCase
15
14
  end
16
15
 
17
16
  def test_not_hash
18
- expected = create(:product, :title => "Expected title")
19
- rejected = create(:product, :title => "Rejected title")
17
+ expected = create(:product, title: "Expected title")
18
+ rejected = create(:product, title: "Rejected title")
20
19
 
21
- results = Product.search(:and => [{:title => "Title"}, {:not => {:title => "Rejected"}}])
20
+ results = Product.search(and: [{ title: "Title" }, { not: { title: "Rejected" } }])
22
21
 
23
22
  assert_includes results, expected
24
23
  refute_includes results, rejected
25
24
  end
26
25
  end
27
-
data/test/or_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 OrTest < SearchCop::TestCase
5
4
  def test_or_string
6
- product1 = create(:product, :title => "Title1")
7
- product2 = create(:product, :title => "Title2")
8
- product3 = create(:product, :title => "Title3")
5
+ product1 = create(:product, title: "Title1")
6
+ product2 = create(:product, title: "Title2")
7
+ product3 = create(:product, title: "Title3")
9
8
 
10
9
  results = Product.search("title: Title1 OR title: Title2")
11
10
 
@@ -15,15 +14,14 @@ class OrTest < SearchCop::TestCase
15
14
  end
16
15
 
17
16
  def test_or_hash
18
- product1 = create(:product, :title => "Title1")
19
- product2 = create(:product, :title => "Title2")
20
- product3 = create(:product, :title => "Title3")
17
+ product1 = create(:product, title: "Title1")
18
+ product2 = create(:product, title: "Title2")
19
+ product3 = create(:product, title: "Title3")
21
20
 
22
- results = Product.search(:or => [{:title => "Title1"}, {:title => "Title2"}])
21
+ results = Product.search(or: [{ title: "Title1" }, { title: "Title2" }])
23
22
 
24
23
  assert_includes results, product1
25
24
  assert_includes results, product2
26
25
  refute_includes results, product3
27
26
  end
28
27
  end
29
-
data/test/scope_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 ScopeTest < SearchCop::TestCase
5
4
  def test_scope_name
6
- expected = create(:product, :title => "Expected")
7
- rejected = create(:product, :notice => "Expected")
5
+ expected = create(:product, title: "Expected")
6
+ rejected = create(:product, notice: "Expected")
8
7
 
9
8
  results = Product.user_search("Expected")
10
9
 
@@ -13,8 +12,8 @@ class ScopeTest < SearchCop::TestCase
13
12
  end
14
13
 
15
14
  def test_options
16
- expected = create(:product, :title => "Expected")
17
- rejected = create(:product, :description => "Expected")
15
+ expected = create(:product, title: "Expected")
16
+ rejected = create(:product, description: "Expected")
18
17
 
19
18
  results = Product.user_search("Expected")
20
19
 
@@ -23,8 +22,8 @@ class ScopeTest < SearchCop::TestCase
23
22
  end
24
23
 
25
24
  def test_custom_scope
26
- expected = create(:product, :user => create(:user, :username => "Expected"))
27
- rejected = create(:product, :user => create(:user, :username => "Rejected"))
25
+ expected = create(:product, user: create(:user, username: "Expected"))
26
+ rejected = create(:product, user: create(:user, username: "Rejected"))
28
27
 
29
28
  results = Product.user_search("user: Expected")
30
29
 
@@ -33,8 +32,8 @@ class ScopeTest < SearchCop::TestCase
33
32
  end
34
33
 
35
34
  def test_aliases_with_association
36
- expected = create(:product, :user => create(:user, :username => "Expected"))
37
- rejected = create(:product, :user => create(:user, :username => "Rejected"))
35
+ expected = create(:product, user: create(:user, username: "Expected"))
36
+ rejected = create(:product, user: create(:user, username: "Rejected"))
38
37
 
39
38
  results = Product.search("user: Expected")
40
39
 
@@ -43,8 +42,8 @@ class ScopeTest < SearchCop::TestCase
43
42
  end
44
43
 
45
44
  def test_aliases_with_model
46
- expected = create(:product, :user => create(:user, :username => "Expected"))
47
- rejected = create(:product, :user => create(:user, :username => "Rejected"))
45
+ expected = create(:product, user: create(:user, username: "Expected"))
46
+ rejected = create(:product, user: create(:user, username: "Rejected"))
48
47
 
49
48
  results = Product.user_search("user: Expected")
50
49
 
@@ -52,4 +51,3 @@ class ScopeTest < SearchCop::TestCase
52
51
  refute_includes results, rejected
53
52
  end
54
53
  end
55
-
@@ -1,41 +1,40 @@
1
-
2
- require File.expand_path("../test_helper", __FILE__)
1
+ require File.expand_path("test_helper", __dir__)
3
2
 
4
3
  class SearchCopTest < SearchCop::TestCase
5
4
  def test_scope_before
6
- expected = create(:product, :stock => 1, :title => "Title")
7
- rejected = create(:product, :stock => 0, :title => "Title")
5
+ expected = create(:product, stock: 1, title: "Title")
6
+ rejected = create(:product, stock: 0, title: "Title")
8
7
 
9
- results = Product.where(:stock => 1).search("Title")
8
+ results = Product.where(stock: 1).search("Title")
10
9
 
11
10
  assert_includes results, expected
12
11
  refute_includes results, rejected
13
12
  end
14
13
 
15
14
  def test_scope_after
16
- expected = create(:product, :stock => 1, :title => "Title")
17
- rejected = create(:product, :stock => 0, :title => "Title")
15
+ expected = create(:product, stock: 1, title: "Title")
16
+ rejected = create(:product, stock: 0, title: "Title")
18
17
 
19
- results = Product.search("Title").where(:stock => 1)
18
+ results = Product.search("Title").where(stock: 1)
20
19
 
21
20
  assert_includes results, expected
22
21
  refute_includes results, rejected
23
22
  end
24
23
 
25
24
  def test_scope
26
- expected = create(:product, :stock => 1, :title => "Title")
27
- rejected = create(:product, :stock => 0, :title => "Title")
25
+ expected = create(:product, stock: 1, title: "Title")
26
+ rejected = create(:product, stock: 0, title: "Title")
28
27
 
29
- results = with_scope(Product.search_scopes[:search], lambda { where :stock => 1 }) { Product.search("title: Title") }
28
+ results = with_scope(Product.search_scopes[:search], -> { where stock: 1 }) { Product.search("title: Title") }
30
29
 
31
30
  assert_includes results, expected
32
31
  refute_includes results, rejected
33
32
  end
34
33
 
35
34
  def test_multi_associations
36
- product = create(:product, :comments => [
37
- create(:comment, :title => "Title1", :message => "Message1"),
38
- create(:comment, :title => "Title2", :message => "Message2")
35
+ product = create(:product, comments: [
36
+ create(:comment, title: "Title1", message: "Message1"),
37
+ create(:comment, title: "Title2", message: "Message2")
39
38
  ])
40
39
 
41
40
  assert_includes Product.search("comment: Title1 comment: Message1"), product
@@ -43,8 +42,8 @@ class SearchCopTest < SearchCop::TestCase
43
42
  end
44
43
 
45
44
  def test_single_association
46
- expected = create(:comment, :user => create(:user, :username => "Expected"))
47
- rejected = create(:comment, :user => create(:user, :username => "Rejected"))
45
+ expected = create(:comment, user: create(:user, username: "Expected"))
46
+ rejected = create(:comment, user: create(:user, username: "Rejected"))
48
47
 
49
48
  results = Comment.search("user: Expected")
50
49
 
@@ -53,8 +52,8 @@ class SearchCopTest < SearchCop::TestCase
53
52
  end
54
53
 
55
54
  def test_deep_associations
56
- expected = create(:product, :comments => [create(:comment, :user => create(:user, :username => "Expected"))])
57
- rejected = create(:product, :comments => [create(:comment, :user => create(:user, :username => "Rejected"))])
55
+ expected = create(:product, comments: [create(:comment, user: create(:user, username: "Expected"))])
56
+ rejected = create(:product, comments: [create(:comment, user: create(:user, username: "Rejected"))])
58
57
 
59
58
  results = Product.search("user: Expected")
60
59
 
@@ -62,16 +61,25 @@ class SearchCopTest < SearchCop::TestCase
62
61
  refute_includes results, rejected
63
62
  end
64
63
 
64
+ def test_inherited_model
65
+ expected = create(:available_product, comments: [create(:comment, user: create(:user, username: "Expected"))])
66
+ rejected = create(:available_product, comments: [create(:comment, user: create(:user, username: "Rejected"))])
67
+
68
+ results = AvailableProduct.search("user: Expected")
69
+ assert_includes results, expected
70
+ refute_includes results, rejected
71
+ end
72
+
65
73
  def test_multiple
66
- product = create(:product, :comments => [create(:comment, :title => "Title", :message => "Message")])
74
+ product = create(:product, comments: [create(:comment, title: "Title", message: "Message")])
67
75
 
68
76
  assert_includes Product.search("comment: Title"), product
69
77
  assert_includes Product.search("comment: Message"), product
70
78
  end
71
79
 
72
80
  def test_default
73
- product1 = create(:product, :title => "Expected")
74
- product2 = create(:product, :description => "Expected")
81
+ product1 = create(:product, title: "Expected")
82
+ product2 = create(:product, description: "Expected")
75
83
 
76
84
  results = Product.search("Expected")
77
85
 
@@ -80,11 +88,11 @@ class SearchCopTest < SearchCop::TestCase
80
88
  end
81
89
 
82
90
  def test_custom_default_enabled
83
- product1 = create(:product, :title => "Expected")
84
- product2 = create(:product, :description => "Expected")
85
- product3 = create(:product, :brand => "Expected")
91
+ product1 = create(:product, title: "Expected")
92
+ product2 = create(:product, description: "Expected")
93
+ product3 = create(:product, brand: "Expected")
86
94
 
87
- results = with_options(Product.search_scopes[:search], :primary, :default => true) { Product.search "Expected" }
95
+ results = with_options(Product.search_scopes[:search], :primary, default: true) { Product.search "Expected" }
88
96
 
89
97
  assert_includes results, product1
90
98
  assert_includes results, product2
@@ -92,32 +100,32 @@ class SearchCopTest < SearchCop::TestCase
92
100
  end
93
101
 
94
102
  def test_custom_default_disabled
95
- product1 = create(:product, :brand => "Expected")
96
- product2 = create(:product, :notice => "Expected")
103
+ product1 = create(:product, brand: "Expected")
104
+ product2 = create(:product, notice: "Expected")
97
105
 
98
- results = with_options(Product.search_scopes[:search], :notice, :default => false) { Product.search "Expected" }
106
+ results = with_options(Product.search_scopes[:search], :notice, default: false) { Product.search "Expected" }
99
107
 
100
108
  assert_includes results, product1
101
109
  refute_includes results, product2
102
110
  end
103
111
 
104
112
  def test_count
105
- create_list :product, 2, :title => "Expected"
113
+ create_list :product, 2, title: "Expected"
106
114
 
107
115
  assert_equal 2, Product.search("Expected").count
108
116
  end
109
117
 
110
118
  def test_default_attributes_true
111
- with_options(Product.search_scopes[:search], :title, :default => true) do
112
- with_options(Product.search_scopes[:search], :description, :default => true) do
119
+ with_options(Product.search_scopes[:search], :title, default: true) do
120
+ with_options(Product.search_scopes[:search], :description, default: true) do
113
121
  assert_equal ["title", "description"], Product.search_scopes[:search].reflection.default_attributes.keys
114
122
  end
115
123
  end
116
124
  end
117
125
 
118
126
  def test_default_attributes_fales
119
- with_options(Product.search_scopes[:search], :title, :default => false) do
120
- with_options(Product.search_scopes[:search], :description, :default => false) do
127
+ with_options(Product.search_scopes[:search], :title, default: false) do
128
+ with_options(Product.search_scopes[:search], :description, default: false) do
121
129
  assert_equal Product.search_scopes[:search].reflection.attributes.keys - ["title", "description"], Product.search_scopes[:search].reflection.default_attributes.keys
122
130
  end
123
131
  end
@@ -136,4 +144,3 @@ class SearchCopTest < SearchCop::TestCase
136
144
  refute Object.respond_to?(:search)
137
145
  end
138
146
  end
139
-