require 'rspec/expectations'
|
|
|
|
RSpec::Matchers.define :respond_with_error do |expected|
|
|
match do |actual|
|
|
channel, user, message = parse(actual)
|
|
app = SlackMathbot::App.new
|
|
SlackMathbot.config.user = 'mathbot'
|
|
allow(Giphy).to receive(:random)
|
|
begin
|
|
expect do
|
|
app.send(:message, text: message, channel: channel, user: user)
|
|
end.to raise_error ArgumentError, expected
|
|
rescue RSpec::Expectations::ExpectationNotMetError => e
|
|
@error_message = e.message
|
|
raise e
|
|
end
|
|
true
|
|
end
|
|
|
|
failure_message do |actual|
|
|
_, _, message = parse(actual)
|
|
@error_message || "expected for '#{message}' to fail with '#{expected}'"
|
|
end
|
|
|
|
private
|
|
|
|
def parse(actual)
|
|
actual = { message: actual } unless actual.is_a?(Hash)
|
|
[actual[:channel] || 'channel', actual[:user] || 'user', actual[:message]]
|
|
end
|
|
end
|