Skip to content

Commit a621a0f

Browse files
committed
refactor: simplify assertion classes in RSpec/Rails/MinitestAssertions
1 parent 2821e4f commit a621a0f

File tree

1 file changed

+40
-64
lines changed

1 file changed

+40
-64
lines changed

lib/rubocop/cop/rspec_rails/minitest_assertions.rb

Lines changed: 40 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,17 @@ def on_send(node) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
8282
end
8383

8484
minitest_includes(node) do |collection, expected, failure_message|
85-
on_assertion(node, IncludesAssertion.new(collection, expected,
85+
on_assertion(node, IncludesAssertion.new(expected, collection,
8686
failure_message.first))
8787
end
8888

8989
minitest_nil(node) do |actual, failure_message|
90-
on_assertion(node, NilAssertion.new(actual,
90+
on_assertion(node, NilAssertion.new(nil, actual,
9191
failure_message.first))
9292
end
9393

9494
minitest_empty(node) do |actual, failure_message|
95-
on_assertion(node, EmptyAssertion.new(actual,
95+
on_assertion(node, EmptyAssertion.new(nil, actual,
9696
failure_message.first))
9797
end
9898
end
@@ -109,99 +109,75 @@ def message(preferred)
109109
end
110110

111111
# :nodoc:
112-
class EqualAssertion
112+
class BasicAssertion
113113
def initialize(expected, actual, fail_message)
114-
@expected = expected
115-
@actual = actual
116-
@fail_message = fail_message
114+
@expected = expected&.source
115+
@actual = actual.source
116+
@fail_message = fail_message&.source
117117
end
118118

119119
def replaced(node)
120-
runner = node.method?(:assert_equal) ? 'to' : 'not_to'
120+
runner = negated?(node) ? 'not_to' : 'to'
121121
if @fail_message.nil?
122-
"expect(#{@actual.source}).#{runner} eq(#{@expected.source})"
122+
"expect(#{@actual}).#{runner} #{assertion}"
123123
else
124-
"expect(#{@actual.source}).#{runner}(eq(#{@expected.source})," \
125-
" #{@fail_message.source})"
124+
"expect(#{@actual}).#{runner}(#{assertion}, #{@fail_message})"
126125
end
127126
end
128127
end
129128

130129
# :nodoc:
131-
class InstanceOfAssertion
132-
def initialize(expected, actual, fail_message)
133-
@expected = expected
134-
@actual = actual
135-
@fail_message = fail_message
130+
class EqualAssertion < BasicAssertion
131+
def negated?(node)
132+
!node.method?(:assert_equal)
136133
end
137134

138-
def replaced(node)
139-
runner = node.method?(:assert_instance_of) ? 'to' : 'not_to'
140-
if @fail_message.nil?
141-
"expect(#{@actual.source}).#{runner} be_an_instance_of" \
142-
"(#{@expected.source})"
143-
else
144-
"expect(#{@actual.source}).#{runner}(be_an_instance_of" \
145-
"(#{@expected.source}), #{@fail_message.source})"
146-
end
135+
def assertion
136+
"eq(#{@expected})"
147137
end
148138
end
149139

150140
# :nodoc:
151-
class IncludesAssertion
152-
def initialize(collection, expected, fail_message)
153-
@collection = collection
154-
@expected = expected
155-
@fail_message = fail_message
141+
class InstanceOfAssertion < BasicAssertion
142+
def negated?(node)
143+
!node.method?(:assert_instance_of)
156144
end
157145

158-
def replaced(node)
159-
a_source = @collection.source
160-
b_source = @expected.source
146+
def assertion
147+
"be_an_instance_of(#{@expected})"
148+
end
149+
end
161150

162-
runner = node.method?(:assert_includes) ? 'to' : 'not_to'
163-
if @fail_message.nil?
164-
"expect(#{a_source}).#{runner} include(#{b_source})"
165-
else
166-
"expect(#{a_source}).#{runner}(include(#{b_source})," \
167-
" #{@fail_message.source})"
168-
end
151+
# :nodoc:
152+
class IncludesAssertion < BasicAssertion
153+
def negated?(node)
154+
!node.method?(:assert_includes)
155+
end
156+
157+
def assertion
158+
"include(#{@expected})"
169159
end
170160
end
171161

172162
# :nodoc:
173-
class NilAssertion
174-
def initialize(actual, fail_message)
175-
@actual = actual
176-
@fail_message = fail_message
163+
class NilAssertion < BasicAssertion
164+
def negated?(node)
165+
!node.method?(:assert_nil)
177166
end
178167

179-
def replaced(node)
180-
runner = node.method?(:assert_nil) ? 'to' : 'not_to'
181-
if @fail_message.nil?
182-
"expect(#{@actual.source}).#{runner} eq(nil)"
183-
else
184-
"expect(#{@actual.source}).#{runner}(eq(nil), " \
185-
"#{@fail_message.source})"
186-
end
168+
def assertion
169+
'eq(nil)'
187170
end
188171
end
189172

190173
# :nodoc:
191-
class EmptyAssertion
192-
def initialize(actual, fail_message)
193-
@actual = actual
194-
@fail_message = fail_message
174+
class EmptyAssertion < BasicAssertion
175+
def negated?(node)
176+
!node.method?(:assert_empty)
195177
end
196178

197-
def replaced(node)
198-
runner = node.method?(:assert_empty) ? 'to' : 'not_to'
199-
if @fail_message.nil?
200-
"expect(#{@actual.source}).#{runner} be_empty"
201-
else
202-
"expect(#{@actual.source}).#{runner}(be_empty, " \
203-
"#{@fail_message.source})"
204-
end
179+
def assertion
180+
'be_empty'
205181
end
206182
end
207183
end

0 commit comments

Comments
 (0)