mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Added RSpec matchers to test delegations.
This commit is contained in:
40
spec/support/matchers/delegate_matchers.rb
Normal file
40
spec/support/matchers/delegate_matchers.rb
Normal file
@@ -0,0 +1,40 @@
|
||||
# RSpec matcher to spec delegations.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# describe Post do
|
||||
# it { should delegate(:name).to(:author).with_prefix } # post.author_name
|
||||
# it { should delegate(:month).to(:created_at) }
|
||||
# it { should delegate(:year).to(:created_at) }
|
||||
# end
|
||||
|
||||
RSpec::Matchers.define :delegate do |method|
|
||||
match do |delegator|
|
||||
@method = @prefix ? :"#{@to}_#{method}" : method
|
||||
@delegator = delegator
|
||||
begin
|
||||
@delegator.send(@to)
|
||||
rescue NoMethodError
|
||||
raise "#{@delegator} does not respond to #{@to}!"
|
||||
end
|
||||
@delegator.stub(@to).and_return double('receiver')
|
||||
@delegator.send(@to).stub(method).and_return :called
|
||||
@delegator.send(@method) == :called
|
||||
end
|
||||
|
||||
description do
|
||||
"delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
||||
end
|
||||
|
||||
failure_message_for_should do |text|
|
||||
"expected #{@delegator} to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
||||
end
|
||||
|
||||
failure_message_for_should_not do |text|
|
||||
"expected #{@delegator} not to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
||||
end
|
||||
|
||||
chain(:to) { |receiver| @to = receiver }
|
||||
chain(:with_prefix) { @prefix = true }
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user