Skip to content

Commit 78f94bb

Browse files
authored
Merge pull request #1082 from rubocop-hq/less-autocorrect
Less autocorrect
2 parents b984415 + 97d2808 commit 78f94bb

File tree

2 files changed

+169
-96
lines changed

2 files changed

+169
-96
lines changed

spec/rubocop/cop/rspec/factory_bot/create_list_spec.rb

Lines changed: 112 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,64 @@
99
let(:enforced_style) { :create_list }
1010

1111
it 'flags usage of n.times with no arguments' do
12-
expect_offense(<<-RUBY)
12+
expect_offense(<<~RUBY)
1313
3.times { create :user }
1414
^^^^^^^ Prefer create_list.
1515
RUBY
16+
17+
expect_correction(<<~RUBY)
18+
create_list :user, 3
19+
RUBY
1620
end
1721

1822
it 'flags usage of n.times when FactoryGirl.create is used' do
19-
expect_offense(<<-RUBY)
23+
expect_offense(<<~RUBY)
2024
3.times { FactoryGirl.create :user }
2125
^^^^^^^ Prefer create_list.
2226
RUBY
27+
28+
expect_correction(<<~RUBY)
29+
FactoryGirl.create_list :user, 3
30+
RUBY
2331
end
2432

2533
it 'flags usage of n.times when FactoryBot.create is used' do
26-
expect_offense(<<-RUBY)
34+
expect_offense(<<~RUBY)
2735
3.times { FactoryBot.create :user }
2836
^^^^^^^ Prefer create_list.
2937
RUBY
38+
39+
expect_correction(<<~RUBY)
40+
FactoryBot.create_list :user, 3
41+
RUBY
3042
end
3143

3244
it 'ignores create method of other object' do
33-
expect_no_offenses(<<-RUBY)
45+
expect_no_offenses(<<~RUBY)
3446
3.times { SomeFactory.create :user }
3547
RUBY
3648
end
3749

3850
it 'ignores create in other block' do
39-
expect_no_offenses(<<-RUBY)
51+
expect_no_offenses(<<~RUBY)
4052
allow(User).to receive(:create) { create :user }
4153
RUBY
4254
end
4355

4456
it 'ignores n.times with argument' do
45-
expect_no_offenses(<<-RUBY)
57+
expect_no_offenses(<<~RUBY)
4658
3.times { |n| create :user, created_at: n.days.ago }
4759
RUBY
4860
end
4961

5062
it 'ignores n.times when there is no create call inside' do
51-
expect_no_offenses(<<-RUBY)
63+
expect_no_offenses(<<~RUBY)
5264
3.times { do_something }
5365
RUBY
5466
end
5567

5668
it 'ignores n.times when there is other calls but create' do
57-
expect_no_offenses(<<-RUBY)
69+
expect_no_offenses(<<~RUBY)
5870
used_passwords = []
5971
3.times do
6072
u = create :user
@@ -65,105 +77,135 @@
6577
end
6678

6779
it 'flags FactoryGirl.create calls with a block' do
68-
expect_offense(<<-RUBY)
80+
expect_offense(<<~RUBY)
6981
3.times do
7082
^^^^^^^ Prefer create_list.
7183
create(:user) { |user| create :account, user: user }
7284
end
7385
RUBY
74-
end
7586

76-
include_examples 'autocorrect',
77-
'5.times { create :user }',
78-
'create_list :user, 5'
87+
expect_correction(<<~RUBY)
88+
create_list(:user, 3) { |user| create :account, user: user }
89+
RUBY
90+
end
7991

80-
include_examples 'autocorrect',
81-
'5.times { create(:user, :trait) }',
82-
'create_list(:user, 5, :trait)'
92+
it 'flags usage of n.times with arguments' do
93+
expect_offense(<<~RUBY)
94+
5.times { create(:user, :trait) }
95+
^^^^^^^ Prefer create_list.
96+
RUBY
8397

84-
include_examples 'autocorrect',
85-
'5.times { create :user, :trait, key: val }',
86-
'create_list :user, 5, :trait, key: val'
98+
expect_correction(<<~RUBY)
99+
create_list(:user, 5, :trait)
100+
RUBY
101+
end
87102

88-
include_examples 'autocorrect',
89-
'5.times { FactoryGirl.create :user }',
90-
'FactoryGirl.create_list :user, 5'
103+
it 'flags usage of n.times with keyword arguments' do
104+
expect_offense(<<~RUBY)
105+
5.times { create :user, :trait, key: val }
106+
^^^^^^^ Prefer create_list.
107+
RUBY
91108

92-
bad_code = <<-RUBY
93-
3.times do
94-
create(:user, :trait) { |user| create :account, user: user }
95-
end
96-
RUBY
109+
expect_correction(<<~RUBY)
110+
create_list :user, 5, :trait, key: val
111+
RUBY
112+
end
97113

98-
good_code = <<-RUBY
99-
create_list(:user, 3, :trait) { |user| create :account, user: user }
100-
RUBY
114+
it 'flags usage of n.times with block argument' do
115+
expect_offense(<<~RUBY)
116+
3.times do
117+
^^^^^^^ Prefer create_list.
118+
create(:user, :trait) { |user| create :account, user: user }
119+
end
120+
RUBY
101121

102-
include_examples 'autocorrect', bad_code, good_code
122+
expect_correction(<<~RUBY)
123+
create_list(:user, 3, :trait) { |user| create :account, user: user }
124+
RUBY
125+
end
103126

104-
bad_code = <<-RUBY
105-
3.times do
106-
create(:user, :trait) do |user|
107-
create :account, user: user
108-
create :profile, user: user
127+
it 'flags usage of n.times with nested block arguments' do
128+
expect_offense(<<~RUBY)
129+
3.times do
130+
^^^^^^^ Prefer create_list.
131+
create(:user, :trait) do |user|
132+
create :account, user: user
133+
create :profile, user: user
134+
end
109135
end
110-
end
111-
RUBY
112-
113-
good_code = <<-RUBY
114-
create_list(:user, 3, :trait) do |user|
115-
create :account, user: user
116-
create :profile, user: user
117-
end
118-
RUBY
136+
RUBY
119137

120-
include_examples 'autocorrect', bad_code, good_code
138+
expect_correction(<<~RUBY)
139+
create_list(:user, 3, :trait) do |user|
140+
create :account, user: user
141+
create :profile, user: user
142+
end
143+
RUBY
144+
end
121145
end
122146

123147
context 'when EnforcedStyle is :n_times' do
124148
let(:enforced_style) { :n_times }
125149

126150
it 'flags usage of create_list' do
127-
expect_offense(<<-RUBY)
151+
expect_offense(<<~RUBY)
128152
create_list :user, 3
129153
^^^^^^^^^^^ Prefer 3.times.
130154
RUBY
155+
156+
expect_correction(<<~RUBY)
157+
3.times { create :user }
158+
RUBY
159+
end
160+
161+
it 'flags usage of create_list with argument' do
162+
expect_offense(<<~RUBY)
163+
create_list(:user, 3, :trait)
164+
^^^^^^^^^^^ Prefer 3.times.
165+
RUBY
166+
167+
expect_correction(<<~RUBY)
168+
3.times { create(:user, :trait) }
169+
RUBY
170+
end
171+
172+
it 'flags usage of create_list with keyword arguments' do
173+
expect_offense(<<~RUBY)
174+
create_list :user, 3, :trait, key: val
175+
^^^^^^^^^^^ Prefer 3.times.
176+
RUBY
177+
178+
expect_correction(<<~RUBY)
179+
3.times { create :user, :trait, key: val }
180+
RUBY
131181
end
132182

133183
it 'flags usage of FactoryGirl.create_list' do
134-
expect_offense(<<-RUBY)
135-
FactoryGirl.create_list :user, 3
136-
^^^^^^^^^^^ Prefer 3.times.
184+
expect_offense(<<~RUBY)
185+
FactoryGirl.create_list :user, 3
186+
^^^^^^^^^^^ Prefer 3.times.
187+
RUBY
188+
189+
expect_correction(<<~RUBY)
190+
3.times { FactoryGirl.create :user }
137191
RUBY
138192
end
139193

140194
it 'flags usage of FactoryGirl.create_list with a block' do
141-
expect_offense(<<-RUBY)
142-
FactoryGirl.create_list(:user, 3) { |user| user.points = rand(1000) }
143-
^^^^^^^^^^^ Prefer 3.times.
195+
expect_offense(<<~RUBY)
196+
FactoryGirl.create_list(:user, 3) { |user| user.points = rand(1000) }
197+
^^^^^^^^^^^ Prefer 3.times.
198+
RUBY
199+
200+
expect_correction(<<~RUBY)
201+
3.times { FactoryGirl.create(:user) } { |user| user.points = rand(1000) }
144202
RUBY
145203
end
146204

147205
it 'ignores create method of other object' do
148-
expect_no_offenses(<<-RUBY)
206+
expect_no_offenses(<<~RUBY)
149207
SomeFactory.create_list :user, 3
150208
RUBY
151209
end
152-
153-
include_examples 'autocorrect',
154-
'create_list :user, 5',
155-
'5.times { create :user }'
156-
157-
include_examples 'autocorrect',
158-
'create_list(:user, 5, :trait)',
159-
'5.times { create(:user, :trait) }'
160-
161-
include_examples 'autocorrect',
162-
'create_list :user, 5, :trait, key: val',
163-
'5.times { create :user, :trait, key: val }'
164-
165-
include_examples 'autocorrect',
166-
'FactoryGirl.create_list :user, 5',
167-
'5.times { FactoryGirl.create :user }'
168210
end
169211
end

0 commit comments

Comments
 (0)