summaryrefslogtreecommitdiffstats
path: root/test/unit/lib/redmine/plugin_hook_test.rb
blob: 67d44c71cd643a6449c74ad4a3174f0c7a8e8cb7 (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
require File.dirname(__FILE__) + '/../../../test_helper'

class Redmine::Plugin::Hook::ManagerTest < Test::Unit::TestCase
  def setup
    @manager =  Redmine::Plugin::Hook::Manager
  end
  
  def teardown
    @manager.clear_listeners
  end
  
  def test_sanity
    assert true
  end
  
  def test_hook_format
    assert_kind_of Hash, @manager::hooks
    @manager::hooks.each do |hook, registrations|
      assert_kind_of Symbol, hook
      assert_kind_of Array, registrations
      assert_equal 0, registrations.length
    end
  end
  
  def test_valid_hook
    assert @manager::valid_hook?(:issue_show)
  end
  
  def test_invalid_hook
    assert_equal false, @manager::valid_hook?(:an_invalid_hook_name)
  end
  
  def test_clear_listeners
    assert_equal 0, @manager::hooks[:issue_show].length
    @manager.add_listener(:issue_show, Proc.new { } )
    @manager.add_listener(:issue_show, Proc.new { } )
    @manager.add_listener(:issue_show, Proc.new { } )
    @manager.add_listener(:issue_show, Proc.new { } )
    assert_equal 4, @manager::hooks[:issue_show].length
    
    @manager.clear_listeners
    assert_equal 0, @manager::hooks[:issue_show].length
  end
  
  def test_add_listener
    assert_equal 0, @manager::hooks[:issue_show].length
    @manager.add_listener(:issue_show, Proc.new { } )
    assert_equal 1, @manager::hooks[:issue_show].length
  end
  
  def test_add_invalid_listener
    hooks = @manager::hooks
    @manager.add_listener(:invalid, Proc.new { } )
    assert_equal hooks, @manager::hooks
  end
  
  def test_call_hook_with_response
    function = Proc.new { return 'response' }
    
    @manager.add_listener(:issue_show, function)
    
    assert_equal 'response', @manager.call_hook(:issue_show)
  end

  def test_call_multiple_hooks_with_response
    function1 = Proc.new { return 'First Call.' }
    function2 = Proc.new { return 'Second Call.' }
    function3 = Proc.new { return 'Third Call.' }
    
    @manager.add_listener(:issue_show, function1)
    @manager.add_listener(:issue_show, function2)
    @manager.add_listener(:issue_show, function3)
    
    assert_equal 'First Call.Second Call.Third Call.', @manager.call_hook(:issue_show)
  end

  def test_call_hook_without_response
    function = Proc.new { }
    
    @manager.add_listener(:issue_show, function)
    
    assert_equal '', @manager.call_hook(:issue_show)
  end

   def test_call_multiple_hooks_without_responses
     function1 = Proc.new { }
     function2 = Proc.new { }
     function3 = Proc.new { }
    
     @manager.add_listener(:issue_show, function1)
     @manager.add_listener(:issue_show, function2)
     @manager.add_listener(:issue_show, function3)
    
     assert_equal '', @manager.call_hook(:issue_show)
   end

   def test_hook_registered_yes
     @manager.add_listener(:issue_show, Proc.new { })
     assert @manager.hook_registered?(:issue_show)
   end

    def test_hook_registered_no
     assert_equal false, @manager.hook_registered?(:issue_show)
   end
end

class Redmine::Plugin::Hook::BaseTest < Test::Unit::TestCase
  def test_sanity
    assert true
  end
  
  def test_help_should_be_a_singleton
    assert Redmine::Plugin::Hook::Base::Helper.include?(Singleton)
  end
  
  def test_helper_should_include_actionview_helpers
    [ActionView::Helpers::TagHelper,
     ActionView::Helpers::FormHelper,
     ActionView::Helpers::FormTagHelper,
     ActionView::Helpers::FormOptionsHelper,
     ActionView::Helpers::JavaScriptHelper, 
     ActionView::Helpers::PrototypeHelper,
     ActionView::Helpers::NumberHelper,
     ActionView::Helpers::UrlHelper].each do |helper|
      assert Redmine::Plugin::Hook::Base::Helper.include?(helper), "#{helper} wasn't included."
    end
  end
end