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