jferris (owner)

Revisions

gist: 134582 Download_button fork
public
Description:
should_delegate
Public Clone URL: git://gist.github.com/134582.git
Ruby
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
class Test::Unit::TestCase
  # call-seq:
  # should_delegate(method, :to => member)
  #
  # Generates a test asserting that +method+ returns the value of that method
  # on +member+.
  #
  # Example:
  # should_deleate :full_name, :to => :user
  def self.should_delegate(method, opts)
    member = opts.delete(:to) or raise "Need a :to"
    klass = model_class
    should "delegate #{method} to #{member}" do
      assert_delegates klass.new, method, :to => member
    end
  end
 
  # call-seq:
  # assert_delgates(delegator, method, :to => member)
  #
  # Asserts that invoking +method+ on +delegator+ returns the value of that
  # method on +member+.
  #
  # Example:
  # assert_delegates post, :full_name, :to => :user
  def assert_delegates(delegator, method, opts)
    member = opts.delete(:to) or raise "Need a :to"
    expected = 'a value'
    delegatee = stub(member.to_s, method => expected)
    delegator.stubs(member => delegatee)
 
    actual = delegator.send(method)
 
    assert_received(delegatee, method) {|expect| expect.with.once }
    assert_equal expected, actual
  end
end