Mercurial > hg > soundsoftware-site
comparison test/unit/lib/redmine/hook_test.rb @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | 8661b858af72 |
children | 433d4f72a19b |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 # redMine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2008 Jean-Philippe Lang | 2 # Copyright (C) 2006-2011 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
8 # | 8 # |
9 # This program is distributed in the hope that it will be useful, | 9 # This program is distributed in the hope that it will be useful, |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 # GNU General Public License for more details. | 12 # GNU General Public License for more details. |
13 # | 13 # |
14 # You should have received a copy of the GNU General Public License | 14 # You should have received a copy of the GNU General Public License |
15 # along with this program; if not, write to the Free Software | 15 # along with this program; if not, write to the Free Software |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 |
18 require File.expand_path('../../../../test_helper', __FILE__) | 18 require File.expand_path('../../../../test_helper', __FILE__) |
19 | 19 |
20 class Redmine::Hook::ManagerTest < ActiveSupport::TestCase | 20 class Redmine::Hook::ManagerTest < ActiveSupport::TestCase |
21 | 21 |
22 fixtures :issues | 22 fixtures :issues |
23 | 23 |
24 # Some hooks that are manually registered in these tests | 24 # Some hooks that are manually registered in these tests |
25 class TestHook < Redmine::Hook::ViewListener; end | 25 class TestHook < Redmine::Hook::ViewListener; end |
26 | 26 |
27 class TestHook1 < TestHook | 27 class TestHook1 < TestHook |
28 def view_layouts_base_html_head(context) | 28 def view_layouts_base_html_head(context) |
29 'Test hook 1 listener.' | 29 'Test hook 1 listener.' |
30 end | 30 end |
31 end | 31 end |
33 class TestHook2 < TestHook | 33 class TestHook2 < TestHook |
34 def view_layouts_base_html_head(context) | 34 def view_layouts_base_html_head(context) |
35 'Test hook 2 listener.' | 35 'Test hook 2 listener.' |
36 end | 36 end |
37 end | 37 end |
38 | 38 |
39 class TestHook3 < TestHook | 39 class TestHook3 < TestHook |
40 def view_layouts_base_html_head(context) | 40 def view_layouts_base_html_head(context) |
41 "Context keys: #{context.keys.collect(&:to_s).sort.join(', ')}." | 41 "Context keys: #{context.keys.collect(&:to_s).sort.join(', ')}." |
42 end | 42 end |
43 end | 43 end |
44 | 44 |
45 class TestLinkToHook < TestHook | 45 class TestLinkToHook < TestHook |
46 def view_layouts_base_html_head(context) | 46 def view_layouts_base_html_head(context) |
47 link_to('Issues', :controller => 'issues') | 47 link_to('Issues', :controller => 'issues') |
48 end | 48 end |
49 end | 49 end |
50 | 50 |
51 class TestHookHelperController < ActionController::Base | 51 class TestHookHelperController < ActionController::Base |
52 include Redmine::Hook::Helper | 52 include Redmine::Hook::Helper |
53 end | 53 end |
54 | 54 |
55 class TestHookHelperView < ActionView::Base | 55 class TestHookHelperView < ActionView::Base |
56 include Redmine::Hook::Helper | 56 include Redmine::Hook::Helper |
57 end | 57 end |
58 | 58 |
59 Redmine::Hook.clear_listeners | 59 Redmine::Hook.clear_listeners |
60 | 60 |
61 def setup | 61 def setup |
62 @hook_module = Redmine::Hook | 62 @hook_module = Redmine::Hook |
63 end | 63 end |
64 | 64 |
65 def teardown | 65 def teardown |
66 @hook_module.clear_listeners | 66 @hook_module.clear_listeners |
67 end | 67 end |
68 | 68 |
69 def test_clear_listeners | 69 def test_clear_listeners |
70 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size | 70 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size |
71 @hook_module.add_listener(TestHook1) | 71 @hook_module.add_listener(TestHook1) |
72 @hook_module.add_listener(TestHook2) | 72 @hook_module.add_listener(TestHook2) |
73 assert_equal 2, @hook_module.hook_listeners(:view_layouts_base_html_head).size | 73 assert_equal 2, @hook_module.hook_listeners(:view_layouts_base_html_head).size |
74 | 74 |
75 @hook_module.clear_listeners | 75 @hook_module.clear_listeners |
76 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size | 76 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size |
77 end | 77 end |
78 | 78 |
79 def test_add_listener | 79 def test_add_listener |
80 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size | 80 assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size |
81 @hook_module.add_listener(TestHook1) | 81 @hook_module.add_listener(TestHook1) |
82 assert_equal 1, @hook_module.hook_listeners(:view_layouts_base_html_head).size | 82 assert_equal 1, @hook_module.hook_listeners(:view_layouts_base_html_head).size |
83 end | 83 end |
84 | 84 |
85 def test_call_hook | 85 def test_call_hook |
86 @hook_module.add_listener(TestHook1) | 86 @hook_module.add_listener(TestHook1) |
87 assert_equal ['Test hook 1 listener.'], hook_helper.call_hook(:view_layouts_base_html_head) | 87 assert_equal ['Test hook 1 listener.'], hook_helper.call_hook(:view_layouts_base_html_head) |
88 end | 88 end |
89 | 89 |
90 def test_call_hook_with_context | 90 def test_call_hook_with_context |
91 @hook_module.add_listener(TestHook3) | 91 @hook_module.add_listener(TestHook3) |
92 assert_equal ['Context keys: bar, controller, foo, project, request.'], | 92 assert_equal ['Context keys: bar, controller, foo, project, request.'], |
93 hook_helper.call_hook(:view_layouts_base_html_head, :foo => 1, :bar => 'a') | 93 hook_helper.call_hook(:view_layouts_base_html_head, :foo => 1, :bar => 'a') |
94 end | 94 end |
95 | 95 |
96 def test_call_hook_with_multiple_listeners | 96 def test_call_hook_with_multiple_listeners |
97 @hook_module.add_listener(TestHook1) | 97 @hook_module.add_listener(TestHook1) |
98 @hook_module.add_listener(TestHook2) | 98 @hook_module.add_listener(TestHook2) |
99 assert_equal ['Test hook 1 listener.', 'Test hook 2 listener.'], hook_helper.call_hook(:view_layouts_base_html_head) | 99 assert_equal ['Test hook 1 listener.', 'Test hook 2 listener.'], hook_helper.call_hook(:view_layouts_base_html_head) |
100 end | 100 end |
101 | 101 |
102 # Context: Redmine::Hook::Helper.call_hook default_url | 102 # Context: Redmine::Hook::Helper.call_hook default_url |
103 def test_call_hook_default_url_options | 103 def test_call_hook_default_url_options |
104 @hook_module.add_listener(TestLinkToHook) | 104 @hook_module.add_listener(TestLinkToHook) |
105 | 105 |
106 assert_equal ['<a href="/issues">Issues</a>'], hook_helper.call_hook(:view_layouts_base_html_head) | 106 assert_equal ['<a href="/issues">Issues</a>'], hook_helper.call_hook(:view_layouts_base_html_head) |
109 # Context: Redmine::Hook::Helper.call_hook | 109 # Context: Redmine::Hook::Helper.call_hook |
110 def test_call_hook_with_project_added_to_context | 110 def test_call_hook_with_project_added_to_context |
111 @hook_module.add_listener(TestHook3) | 111 @hook_module.add_listener(TestHook3) |
112 assert_match /project/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] | 112 assert_match /project/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] |
113 end | 113 end |
114 | 114 |
115 def test_call_hook_from_controller_with_controller_added_to_context | 115 def test_call_hook_from_controller_with_controller_added_to_context |
116 @hook_module.add_listener(TestHook3) | 116 @hook_module.add_listener(TestHook3) |
117 assert_match /controller/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] | 117 assert_match /controller/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] |
118 end | 118 end |
119 | 119 |
120 def test_call_hook_from_controller_with_request_added_to_context | 120 def test_call_hook_from_controller_with_request_added_to_context |
121 @hook_module.add_listener(TestHook3) | 121 @hook_module.add_listener(TestHook3) |
122 assert_match /request/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] | 122 assert_match /request/i, hook_helper.call_hook(:view_layouts_base_html_head)[0] |
123 end | 123 end |
124 | 124 |
125 def test_call_hook_from_view_with_project_added_to_context | 125 def test_call_hook_from_view_with_project_added_to_context |
126 @hook_module.add_listener(TestHook3) | 126 @hook_module.add_listener(TestHook3) |
127 assert_match /project/i, view_hook_helper.call_hook(:view_layouts_base_html_head) | 127 assert_match /project/i, view_hook_helper.call_hook(:view_layouts_base_html_head) |
128 end | 128 end |
129 | 129 |
130 def test_call_hook_from_view_with_controller_added_to_context | 130 def test_call_hook_from_view_with_controller_added_to_context |
131 @hook_module.add_listener(TestHook3) | 131 @hook_module.add_listener(TestHook3) |
132 assert_match /controller/i, view_hook_helper.call_hook(:view_layouts_base_html_head) | 132 assert_match /controller/i, view_hook_helper.call_hook(:view_layouts_base_html_head) |
133 end | 133 end |
134 | 134 |
135 def test_call_hook_from_view_with_request_added_to_context | 135 def test_call_hook_from_view_with_request_added_to_context |
136 @hook_module.add_listener(TestHook3) | 136 @hook_module.add_listener(TestHook3) |
137 assert_match /request/i, view_hook_helper.call_hook(:view_layouts_base_html_head) | 137 assert_match /request/i, view_hook_helper.call_hook(:view_layouts_base_html_head) |
138 end | 138 end |
139 | 139 |
144 view_hook_helper.call_hook(:view_layouts_base_html_head) | 144 view_hook_helper.call_hook(:view_layouts_base_html_head) |
145 end | 145 end |
146 | 146 |
147 def test_call_hook_should_not_change_the_default_url_for_email_notifications | 147 def test_call_hook_should_not_change_the_default_url_for_email_notifications |
148 issue = Issue.find(1) | 148 issue = Issue.find(1) |
149 | 149 |
150 ActionMailer::Base.deliveries.clear | 150 ActionMailer::Base.deliveries.clear |
151 Mailer.deliver_issue_add(issue) | 151 Mailer.deliver_issue_add(issue) |
152 mail = ActionMailer::Base.deliveries.last | 152 mail = ActionMailer::Base.deliveries.last |
153 | 153 |
154 @hook_module.add_listener(TestLinkToHook) | 154 @hook_module.add_listener(TestLinkToHook) |
155 hook_helper.call_hook(:view_layouts_base_html_head) | 155 hook_helper.call_hook(:view_layouts_base_html_head) |
156 | 156 |
157 ActionMailer::Base.deliveries.clear | 157 ActionMailer::Base.deliveries.clear |
158 Mailer.deliver_issue_add(issue) | 158 Mailer.deliver_issue_add(issue) |
159 mail2 = ActionMailer::Base.deliveries.last | 159 mail2 = ActionMailer::Base.deliveries.last |
160 | 160 |
161 assert_equal mail.body, mail2.body | 161 assert_equal mail.body, mail2.body |
162 end | 162 end |
163 | 163 |
164 def hook_helper | 164 def hook_helper |
165 @hook_helper ||= TestHookHelperController.new | 165 @hook_helper ||= TestHookHelperController.new |
166 end | 166 end |
167 | 167 |
168 def view_hook_helper | 168 def view_hook_helper |
169 @view_hook_helper ||= TestHookHelperView.new(RAILS_ROOT + '/app/views') | 169 @view_hook_helper ||= TestHookHelperView.new(Rails.root.to_s + '/app/views') |
170 end | 170 end |
171 end | 171 end |
172 | 172 |