-
-
Notifications
You must be signed in to change notification settings - Fork 248
/
redundant_receiver_in_with_options_spec.rb
117 lines (107 loc) · 3.41 KB
/
redundant_receiver_in_with_options_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# frozen_string_literal: true
RSpec.describe RuboCop::Cop::Rails::RedundantReceiverInWithOptions, :config do
it 'registers an offense and corrects using explicit receiver in `with_options`' do
expect_offense(<<~RUBY)
class Account < ApplicationRecord
with_options dependent: :destroy do |assoc|
assoc.has_many :customers
^^^^^ Redundant receiver in `with_options`.
assoc.has_many :products
^^^^^ Redundant receiver in `with_options`.
assoc.has_many :invoices
^^^^^ Redundant receiver in `with_options`.
assoc.has_many :expenses
^^^^^ Redundant receiver in `with_options`.
end
end
RUBY
expect_correction(<<~RUBY)
class Account < ApplicationRecord
with_options dependent: :destroy do
has_many :customers
has_many :products
has_many :invoices
has_many :expenses
end
end
RUBY
end
context 'Ruby >= 2.7', :ruby27 do
it 'registers an offense and corrects using explicit receiver in `with_options`' do
expect_offense(<<~RUBY)
class Account < ApplicationRecord
with_options dependent: :destroy do
_1.has_many :customers
^^ Redundant receiver in `with_options`.
_1.has_many :products
^^ Redundant receiver in `with_options`.
_1.has_many :invoices
^^ Redundant receiver in `with_options`.
_1.has_many :expenses
^^ Redundant receiver in `with_options`.
end
end
RUBY
expect_correction(<<~RUBY)
class Account < ApplicationRecord
with_options dependent: :destroy do
has_many :customers
has_many :products
has_many :invoices
has_many :expenses
end
end
RUBY
end
end
it 'does not register an offense when using implicit receiver in `with_options`' do
expect_no_offenses(<<~RUBY)
class Account < ApplicationRecord
with_options dependent: :destroy do
has_many :customers
has_many :products
has_many :invoices
has_many :expenses
end
end
RUBY
end
it 'registers an offense and corrects when including multiple redundant receivers in single line' do
expect_offense(<<~RUBY)
with_options options: false do |merger|
merger.invoke(merger.something)
^^^^^^ Redundant receiver in `with_options`.
^^^^^^ Redundant receiver in `with_options`.
end
RUBY
expect_correction(<<~RUBY)
with_options options: false do
invoke(something)
end
RUBY
end
it 'does not register an offense when including method invocations to different receivers' do
expect_no_offenses(<<~RUBY)
client = ApplicationClient.new
with_options options: false do |merger|
client.invoke(merger.something, something)
end
RUBY
end
it 'does not register an offense when including block nodein `with_options`' do
expect_no_offenses(<<~RUBY)
with_options options: false do |merger|
merger.invoke
with_another_method do |another_receiver|
merger.invoke(another_receiver)
end
end
RUBY
end
it 'does not register an offense when empty' do
expect_no_offenses(<<~RUBY)
with_options options: false do |merger|
end
RUBY
end
end