##// END OF EJS Templates
Implementing the missing tests now that HookTest has a cleaner setup....
Eric Davis -
r2428:00b568c194db
parent child
Show More
@@ -1,164 +1,178
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../../../test_helper'
19 19
20 20 class Redmine::Hook::ManagerTest < Test::Unit::TestCase
21 21
22 22 # Some hooks that are manually registered in these tests
23 23 class TestHook < Redmine::Hook::ViewListener; end
24 24
25 25 class TestHook1 < TestHook
26 26 def view_layouts_base_html_head(context)
27 27 'Test hook 1 listener.'
28 28 end
29 29 end
30 30
31 31 class TestHook2 < TestHook
32 32 def view_layouts_base_html_head(context)
33 33 'Test hook 2 listener.'
34 34 end
35 35 end
36 36
37 37 class TestHook3 < TestHook
38 38 def view_layouts_base_html_head(context)
39 39 "Context keys: #{context.keys.collect(&:to_s).sort.join(', ')}."
40 40 end
41 41 end
42 42
43 43 class TestLinkToHook < TestHook
44 44 def view_layouts_base_html_head(context)
45 45 link_to('Issues', :controller => 'issues')
46 46 end
47 47 end
48 48
49 49 class TestHookHelperController < ActionController::Base
50 50 include Redmine::Hook::Helper
51 51 end
52 52
53 class TestHookHelperView < ActionView::Base
54 include Redmine::Hook::Helper
55 end
56
53 57 Redmine::Hook.clear_listeners
54 58
55 59 def setup
56 60 @hook_module = Redmine::Hook
57 61 @hook_helper = TestHookHelperController.new
62 @view_hook_helper = TestHookHelperView.new(RAILS_ROOT + '/app/views')
58 63 end
59 64
60 65 def teardown
61 66 @hook_module.clear_listeners
62 67 @hook_module.default_url_options = { }
63 68 end
64 69
65 70 def test_clear_listeners
66 71 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
67 72 @hook_module.add_listener(TestHook1)
68 73 @hook_module.add_listener(TestHook2)
69 74 assert_equal 2, @hook_module.hook_listeners(:view_layouts_base_html_head).size
70 75
71 76 @hook_module.clear_listeners
72 77 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
73 78 end
74 79
75 80 def test_add_listener
76 81 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
77 82 @hook_module.add_listener(TestHook1)
78 83 assert_equal 1, @hook_module.hook_listeners(:view_layouts_base_html_head).size
79 84 end
80 85
81 86 def test_call_hook
82 87 @hook_module.add_listener(TestHook1)
83 88 assert_equal ['Test hook 1 listener.'], @hook_helper.call_hook(:view_layouts_base_html_head)
84 89 end
85 90
86 91 def test_call_hook_with_context
87 92 @hook_module.add_listener(TestHook3)
88 93 assert_equal ['Context keys: bar, controller, foo, project, request.'],
89 94 @hook_helper.call_hook(:view_layouts_base_html_head, :foo => 1, :bar => 'a')
90 95 end
91 96
92 97 def test_call_hook_with_multiple_listeners
93 98 @hook_module.add_listener(TestHook1)
94 99 @hook_module.add_listener(TestHook2)
95 100 assert_equal ['Test hook 1 listener.', 'Test hook 2 listener.'], @hook_helper.call_hook(:view_layouts_base_html_head)
96 101 end
97 102
98 103 # Context: Redmine::Hook::call_hook
99 104 def test_call_hook_default_url_options_set
100 105 request = ActionController::TestRequest.new
101 106 request.env = { "SERVER_NAME" => 'example.com'}
102 107 @hook_module.add_listener(TestLinkToHook)
103 108
104 109 assert_equal ['<a href="http://example.com/issues">Issues</a>'],
105 110 @hook_helper.call_hook(:view_layouts_base_html_head, :request => request)
106 111 end
107 112
108 113 def test_call_hook_default_url_options_set_with_no_standard_request_port
109 114 request = ActionController::TestRequest.new
110 115 request.env = { "SERVER_NAME" => 'example.com', "SERVER_PORT" => 3000}
111 116 @hook_module.add_listener(TestLinkToHook)
112 117
113 118 assert_equal ['<a href="http://example.com:3000/issues">Issues</a>'],
114 119 @hook_helper.call_hook(:view_layouts_base_html_head, :request => request)
115 120 end
116 121
117 122 def test_call_hook_default_url_options_set_with_ssl
118 123 request = ActionController::TestRequest.new
119 124 request.env = { "SERVER_NAME" => 'example.com', "HTTPS" => 'on'}
120 125 @hook_module.add_listener(TestLinkToHook)
121 126
122 127 assert_equal ['<a href="https://example.com/issues">Issues</a>'],
123 128 @hook_helper.call_hook(:view_layouts_base_html_head, :request => request)
124 129 end
125 130
126 131 def test_call_hook_default_url_options_set_with_forwarded_ssl
127 132 request = ActionController::TestRequest.new
128 133 request.env = { "SERVER_NAME" => 'example.com', "HTTP_X_FORWARDED_PROTO" => "https"}
129 134 @hook_module.add_listener(TestLinkToHook)
130 135
131 136 assert_equal ['<a href="https://example.com/issues">Issues</a>'],
132 137 @hook_helper.call_hook(:view_layouts_base_html_head, :request => request)
133 138 end
134 139
135 140 # Context: Redmine::Hook::Helper.call_hook
136 141 def test_call_hook_with_project_added_to_context
137 # TODO: Implement test
142 @hook_module.add_listener(TestHook3)
143 assert_match /project/i, @hook_helper.call_hook(:view_layouts_base_html_head)[0]
138 144 end
139 145
140 146 def test_call_hook_from_controller_with_controller_added_to_context
141 # TODO: Implement test
147 @hook_module.add_listener(TestHook3)
148 assert_match /controller/i, @hook_helper.call_hook(:view_layouts_base_html_head)[0]
142 149 end
143 150
144 151 def test_call_hook_from_controller_with_request_added_to_context
145 # TODO: Implement test
152 @hook_module.add_listener(TestHook3)
153 assert_match /request/i, @hook_helper.call_hook(:view_layouts_base_html_head)[0]
146 154 end
147 155
148 156 def test_call_hook_from_view_with_project_added_to_context
149 # TODO: Implement test
157 @hook_module.add_listener(TestHook3)
158 assert_match /project/i, @view_hook_helper.call_hook(:view_layouts_base_html_head)
150 159 end
151 160
152 161 def test_call_hook_from_view_with_controller_added_to_context
153 # TODO: Implement test
162 @hook_module.add_listener(TestHook3)
163 assert_match /controller/i, @view_hook_helper.call_hook(:view_layouts_base_html_head)
154 164 end
155 165
156 166 def test_call_hook_from_view_with_request_added_to_context
157 # TODO: Implement test
167 @hook_module.add_listener(TestHook3)
168 assert_match /request/i, @view_hook_helper.call_hook(:view_layouts_base_html_head)
158 169 end
159 170
160 171 def test_call_hook_from_view_should_join_responses_with_a_space
161 # TODO: Implement test
172 @hook_module.add_listener(TestHook1)
173 @hook_module.add_listener(TestHook2)
174 assert_equal 'Test hook 1 listener. Test hook 2 listener.',
175 @view_hook_helper.call_hook(:view_layouts_base_html_head)
162 176 end
163 177 end
164 178
General Comments 0
You need to be logged in to leave comments. Login now