Chris@119
|
1 require File.expand_path('../../test_helper', __FILE__)
|
Chris@14
|
2
|
Chris@14
|
3 class ContextMenusControllerTest < ActionController::TestCase
|
Chris@909
|
4 fixtures :projects,
|
Chris@909
|
5 :trackers,
|
Chris@909
|
6 :projects_trackers,
|
Chris@909
|
7 :roles,
|
Chris@909
|
8 :member_roles,
|
Chris@909
|
9 :members,
|
Chris@909
|
10 :enabled_modules,
|
Chris@909
|
11 :workflows,
|
Chris@909
|
12 :journals, :journal_details,
|
Chris@909
|
13 :versions,
|
Chris@909
|
14 :issues, :issue_statuses, :issue_categories,
|
Chris@909
|
15 :users,
|
Chris@1115
|
16 :enumerations,
|
Chris@1115
|
17 :time_entries
|
Chris@14
|
18
|
Chris@14
|
19 def test_context_menu_one_issue
|
Chris@14
|
20 @request.session[:user_id] = 2
|
Chris@14
|
21 get :issues, :ids => [1]
|
Chris@14
|
22 assert_response :success
|
Chris@14
|
23 assert_template 'context_menu'
|
Chris@14
|
24 assert_tag :tag => 'a', :content => 'Edit',
|
Chris@14
|
25 :attributes => { :href => '/issues/1/edit',
|
Chris@14
|
26 :class => 'icon-edit' }
|
Chris@14
|
27 assert_tag :tag => 'a', :content => 'Closed',
|
Chris@1115
|
28 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bstatus_id%5D=5',
|
Chris@14
|
29 :class => '' }
|
Chris@14
|
30 assert_tag :tag => 'a', :content => 'Immediate',
|
Chris@1115
|
31 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bpriority_id%5D=8',
|
Chris@14
|
32 :class => '' }
|
Chris@909
|
33 assert_no_tag :tag => 'a', :content => 'Inactive Priority'
|
Chris@14
|
34 # Versions
|
Chris@14
|
35 assert_tag :tag => 'a', :content => '2.0',
|
Chris@1115
|
36 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3',
|
Chris@14
|
37 :class => '' }
|
Chris@14
|
38 assert_tag :tag => 'a', :content => 'eCookbook Subproject 1 - 2.0',
|
Chris@1115
|
39 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4',
|
Chris@14
|
40 :class => '' }
|
Chris@14
|
41
|
Chris@14
|
42 assert_tag :tag => 'a', :content => 'Dave Lopper',
|
Chris@1115
|
43 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3',
|
Chris@14
|
44 :class => '' }
|
Chris@1115
|
45 assert_tag :tag => 'a', :content => 'Copy',
|
Chris@14
|
46 :attributes => { :href => '/projects/ecookbook/issues/1/copy',
|
Chris@14
|
47 :class => 'icon-copy' }
|
Chris@1115
|
48 assert_no_tag :tag => 'a', :content => 'Move'
|
Chris@14
|
49 assert_tag :tag => 'a', :content => 'Delete',
|
Chris@1115
|
50 :attributes => { :href => '/issues?ids%5B%5D=1',
|
Chris@14
|
51 :class => 'icon-del' }
|
Chris@14
|
52 end
|
Chris@14
|
53
|
Chris@14
|
54 def test_context_menu_one_issue_by_anonymous
|
Chris@14
|
55 get :issues, :ids => [1]
|
Chris@14
|
56 assert_response :success
|
Chris@14
|
57 assert_template 'context_menu'
|
Chris@14
|
58 assert_tag :tag => 'a', :content => 'Delete',
|
Chris@14
|
59 :attributes => { :href => '#',
|
Chris@14
|
60 :class => 'icon-del disabled' }
|
Chris@14
|
61 end
|
Chris@909
|
62
|
Chris@14
|
63 def test_context_menu_multiple_issues_of_same_project
|
Chris@14
|
64 @request.session[:user_id] = 2
|
Chris@14
|
65 get :issues, :ids => [1, 2]
|
Chris@14
|
66 assert_response :success
|
Chris@14
|
67 assert_template 'context_menu'
|
Chris@119
|
68 assert_not_nil assigns(:issues)
|
Chris@119
|
69 assert_equal [1, 2], assigns(:issues).map(&:id).sort
|
Chris@909
|
70
|
Chris@1115
|
71 ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
Chris@14
|
72 assert_tag :tag => 'a', :content => 'Edit',
|
Chris@119
|
73 :attributes => { :href => "/issues/bulk_edit?#{ids}",
|
Chris@14
|
74 :class => 'icon-edit' }
|
chris@22
|
75 assert_tag :tag => 'a', :content => 'Closed',
|
Chris@1115
|
76 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5",
|
chris@22
|
77 :class => '' }
|
Chris@14
|
78 assert_tag :tag => 'a', :content => 'Immediate',
|
Chris@1115
|
79 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8",
|
Chris@14
|
80 :class => '' }
|
Chris@14
|
81 assert_tag :tag => 'a', :content => 'Dave Lopper',
|
Chris@1115
|
82 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=3",
|
Chris@14
|
83 :class => '' }
|
Chris@14
|
84 assert_tag :tag => 'a', :content => 'Copy',
|
Chris@1115
|
85 :attributes => { :href => "/issues/bulk_edit?copy=1&#{ids}",
|
Chris@14
|
86 :class => 'icon-copy' }
|
Chris@1115
|
87 assert_no_tag :tag => 'a', :content => 'Move'
|
Chris@14
|
88 assert_tag :tag => 'a', :content => 'Delete',
|
Chris@1115
|
89 :attributes => { :href => "/issues?#{ids}",
|
Chris@14
|
90 :class => 'icon-del' }
|
Chris@14
|
91 end
|
Chris@14
|
92
|
chris@37
|
93 def test_context_menu_multiple_issues_of_different_projects
|
Chris@14
|
94 @request.session[:user_id] = 2
|
chris@37
|
95 get :issues, :ids => [1, 2, 6]
|
Chris@14
|
96 assert_response :success
|
Chris@14
|
97 assert_template 'context_menu'
|
Chris@119
|
98 assert_not_nil assigns(:issues)
|
Chris@119
|
99 assert_equal [1, 2, 6], assigns(:issues).map(&:id).sort
|
Chris@909
|
100
|
Chris@1115
|
101 ids = assigns(:issues).map(&:id).sort.map {|i| "ids%5B%5D=#{i}"}.join('&')
|
chris@37
|
102 assert_tag :tag => 'a', :content => 'Edit',
|
chris@37
|
103 :attributes => { :href => "/issues/bulk_edit?#{ids}",
|
chris@37
|
104 :class => 'icon-edit' }
|
chris@37
|
105 assert_tag :tag => 'a', :content => 'Closed',
|
Chris@1115
|
106 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bstatus_id%5D=5",
|
chris@37
|
107 :class => '' }
|
chris@37
|
108 assert_tag :tag => 'a', :content => 'Immediate',
|
Chris@1115
|
109 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bpriority_id%5D=8",
|
chris@37
|
110 :class => '' }
|
chris@37
|
111 assert_tag :tag => 'a', :content => 'John Smith',
|
Chris@1115
|
112 :attributes => { :href => "/issues/bulk_update?#{ids}&issue%5Bassigned_to_id%5D=2",
|
chris@37
|
113 :class => '' }
|
Chris@14
|
114 assert_tag :tag => 'a', :content => 'Delete',
|
Chris@1115
|
115 :attributes => { :href => "/issues?#{ids}",
|
chris@37
|
116 :class => 'icon-del' }
|
Chris@14
|
117 end
|
Chris@909
|
118
|
Chris@1115
|
119 def test_context_menu_should_include_list_custom_fields
|
Chris@1115
|
120 field = IssueCustomField.create!(:name => 'List', :field_format => 'list',
|
Chris@1115
|
121 :possible_values => ['Foo', 'Bar'], :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
122 @request.session[:user_id] = 2
|
Chris@1115
|
123 get :issues, :ids => [1]
|
Chris@1115
|
124
|
Chris@1115
|
125 assert_tag 'a',
|
Chris@1115
|
126 :content => 'List',
|
Chris@1115
|
127 :attributes => {:href => '#'},
|
Chris@1115
|
128 :sibling => {:tag => 'ul', :children => {:count => 3}}
|
Chris@1115
|
129
|
Chris@1115
|
130 assert_tag 'a',
|
Chris@1115
|
131 :content => 'Foo',
|
Chris@1115
|
132 :attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=Foo"}
|
Chris@1115
|
133 assert_tag 'a',
|
Chris@1115
|
134 :content => 'none',
|
Chris@1294
|
135 :attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=__none__"}
|
Chris@1115
|
136 end
|
Chris@1115
|
137
|
Chris@1115
|
138 def test_context_menu_should_not_include_null_value_for_required_custom_fields
|
Chris@1115
|
139 field = IssueCustomField.create!(:name => 'List', :is_required => true, :field_format => 'list',
|
Chris@1115
|
140 :possible_values => ['Foo', 'Bar'], :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
141 @request.session[:user_id] = 2
|
Chris@1115
|
142 get :issues, :ids => [1, 2]
|
Chris@1115
|
143
|
Chris@1115
|
144 assert_tag 'a',
|
Chris@1115
|
145 :content => 'List',
|
Chris@1115
|
146 :attributes => {:href => '#'},
|
Chris@1115
|
147 :sibling => {:tag => 'ul', :children => {:count => 2}}
|
Chris@1115
|
148 end
|
Chris@1115
|
149
|
Chris@1115
|
150 def test_context_menu_on_single_issue_should_select_current_custom_field_value
|
Chris@1115
|
151 field = IssueCustomField.create!(:name => 'List', :field_format => 'list',
|
Chris@1115
|
152 :possible_values => ['Foo', 'Bar'], :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
153 issue = Issue.find(1)
|
Chris@1115
|
154 issue.custom_field_values = {field.id => 'Bar'}
|
Chris@1115
|
155 issue.save!
|
Chris@1115
|
156 @request.session[:user_id] = 2
|
Chris@1115
|
157 get :issues, :ids => [1]
|
Chris@1115
|
158
|
Chris@1115
|
159 assert_tag 'a',
|
Chris@1115
|
160 :content => 'List',
|
Chris@1115
|
161 :attributes => {:href => '#'},
|
Chris@1115
|
162 :sibling => {:tag => 'ul', :children => {:count => 3}}
|
Chris@1115
|
163 assert_tag 'a',
|
Chris@1115
|
164 :content => 'Bar',
|
Chris@1115
|
165 :attributes => {:class => /icon-checked/}
|
Chris@1115
|
166 end
|
Chris@1115
|
167
|
Chris@1115
|
168 def test_context_menu_should_include_bool_custom_fields
|
Chris@1115
|
169 field = IssueCustomField.create!(:name => 'Bool', :field_format => 'bool',
|
Chris@1115
|
170 :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
171 @request.session[:user_id] = 2
|
Chris@1115
|
172 get :issues, :ids => [1]
|
Chris@1115
|
173
|
Chris@1115
|
174 assert_tag 'a',
|
Chris@1115
|
175 :content => 'Bool',
|
Chris@1115
|
176 :attributes => {:href => '#'},
|
Chris@1115
|
177 :sibling => {:tag => 'ul', :children => {:count => 3}}
|
Chris@1115
|
178
|
Chris@1115
|
179 assert_tag 'a',
|
Chris@1115
|
180 :content => 'Yes',
|
Chris@1115
|
181 :attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=1"}
|
Chris@1115
|
182 end
|
Chris@1115
|
183
|
Chris@1115
|
184 def test_context_menu_should_include_user_custom_fields
|
Chris@1115
|
185 field = IssueCustomField.create!(:name => 'User', :field_format => 'user',
|
Chris@1115
|
186 :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
187 @request.session[:user_id] = 2
|
Chris@1115
|
188 get :issues, :ids => [1]
|
Chris@1115
|
189
|
Chris@1115
|
190 assert_tag 'a',
|
Chris@1115
|
191 :content => 'User',
|
Chris@1115
|
192 :attributes => {:href => '#'},
|
Chris@1115
|
193 :sibling => {:tag => 'ul', :children => {:count => Project.find(1).members.count + 1}}
|
Chris@1115
|
194
|
Chris@1115
|
195 assert_tag 'a',
|
Chris@1115
|
196 :content => 'John Smith',
|
Chris@1115
|
197 :attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=2"}
|
Chris@1115
|
198 end
|
Chris@1115
|
199
|
Chris@1115
|
200 def test_context_menu_should_include_version_custom_fields
|
Chris@1115
|
201 field = IssueCustomField.create!(:name => 'Version', :field_format => 'version', :is_for_all => true, :tracker_ids => [1, 2, 3])
|
Chris@1115
|
202 @request.session[:user_id] = 2
|
Chris@1115
|
203 get :issues, :ids => [1]
|
Chris@1115
|
204
|
Chris@1115
|
205 assert_tag 'a',
|
Chris@1115
|
206 :content => 'Version',
|
Chris@1115
|
207 :attributes => {:href => '#'},
|
Chris@1115
|
208 :sibling => {:tag => 'ul', :children => {:count => Project.find(1).shared_versions.count + 1}}
|
Chris@1115
|
209
|
Chris@1115
|
210 assert_tag 'a',
|
Chris@1115
|
211 :content => '2.0',
|
Chris@1115
|
212 :attributes => {:href => "/issues/bulk_update?ids%5B%5D=1&issue%5Bcustom_field_values%5D%5B#{field.id}%5D=3"}
|
Chris@1115
|
213 end
|
Chris@1115
|
214
|
Chris@1115
|
215 def test_context_menu_by_assignable_user_should_include_assigned_to_me_link
|
Chris@1115
|
216 @request.session[:user_id] = 2
|
Chris@1115
|
217 get :issues, :ids => [1]
|
Chris@1115
|
218 assert_response :success
|
Chris@1115
|
219 assert_template 'context_menu'
|
Chris@1115
|
220
|
Chris@1115
|
221 assert_tag :tag => 'a', :content => / me /,
|
Chris@1115
|
222 :attributes => { :href => '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=2',
|
Chris@1115
|
223 :class => '' }
|
Chris@1115
|
224 end
|
Chris@1115
|
225
|
Chris@1115
|
226 def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects
|
Chris@1115
|
227 @request.session[:user_id] = 2
|
Chris@1115
|
228 version = Version.create!(:name => 'Shared', :sharing => 'system', :project_id => 1)
|
Chris@1115
|
229
|
Chris@1115
|
230 get :issues, :ids => [1, 4]
|
Chris@1115
|
231 assert_response :success
|
Chris@1115
|
232 assert_template 'context_menu'
|
Chris@1115
|
233
|
Chris@1115
|
234 assert_include version, assigns(:versions)
|
Chris@1115
|
235 assert_tag :tag => 'a', :content => 'eCookbook - Shared'
|
Chris@1115
|
236 end
|
Chris@1115
|
237
|
Chris@119
|
238 def test_context_menu_issue_visibility
|
Chris@119
|
239 get :issues, :ids => [1, 4]
|
Chris@119
|
240 assert_response :success
|
Chris@119
|
241 assert_template 'context_menu'
|
Chris@119
|
242 assert_equal [1], assigns(:issues).collect(&:id)
|
Chris@119
|
243 end
|
Chris@909
|
244
|
Chris@909
|
245 def test_time_entries_context_menu
|
Chris@909
|
246 @request.session[:user_id] = 2
|
Chris@909
|
247 get :time_entries, :ids => [1, 2]
|
Chris@909
|
248 assert_response :success
|
Chris@909
|
249 assert_template 'time_entries'
|
Chris@909
|
250 assert_tag 'a', :content => 'Edit'
|
Chris@909
|
251 assert_no_tag 'a', :content => 'Edit', :attributes => {:class => /disabled/}
|
Chris@909
|
252 end
|
Chris@909
|
253
|
Chris@909
|
254 def test_time_entries_context_menu_without_edit_permission
|
Chris@909
|
255 @request.session[:user_id] = 2
|
Chris@909
|
256 Role.find_by_name('Manager').remove_permission! :edit_time_entries
|
Chris@909
|
257
|
Chris@909
|
258 get :time_entries, :ids => [1, 2]
|
Chris@909
|
259 assert_response :success
|
Chris@909
|
260 assert_template 'time_entries'
|
Chris@909
|
261 assert_tag 'a', :content => 'Edit', :attributes => {:class => /disabled/}
|
Chris@909
|
262 end
|
Chris@14
|
263 end
|