##// END OF EJS Templates
remove trailing white-spaces from functional IssuesController test....
Toshi MARUYAMA -
r5677:6a5c9ed3c7cf
parent child
Show More
@@ -5,12 +5,12
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.
@@ -45,17 +45,17 class IssuesControllerTest < ActionController::TestCase
45 45 :journals,
46 46 :journal_details,
47 47 :queries
48
48
49 49 def setup
50 50 @controller = IssuesController.new
51 51 @request = ActionController::TestRequest.new
52 52 @response = ActionController::TestResponse.new
53 53 User.current = nil
54 54 end
55
55
56 56 def test_index
57 57 Setting.default_language = 'en'
58
58
59 59 get :index
60 60 assert_response :success
61 61 assert_template 'index.rhtml'
@@ -69,7 +69,7 class IssuesControllerTest < ActionController::TestCase
69 69 # project column
70 70 assert_tag :tag => 'th', :content => /Project/
71 71 end
72
72
73 73 def test_index_should_not_list_issues_when_module_disabled
74 74 EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
75 75 get :index
@@ -98,7 +98,7 class IssuesControllerTest < ActionController::TestCase
98 98 assert_not_nil assigns(:issues)
99 99 assert_nil assigns(:issues).detect {|issue| !issue.visible?}
100 100 end
101
101
102 102 def test_index_with_project
103 103 Setting.display_subprojects_issues = 0
104 104 get :index, :project_id => 1
@@ -108,7 +108,7 class IssuesControllerTest < ActionController::TestCase
108 108 assert_tag :tag => 'a', :content => /Can't print recipes/
109 109 assert_no_tag :tag => 'a', :content => /Subproject issue/
110 110 end
111
111
112 112 def test_index_with_project_and_subprojects
113 113 Setting.display_subprojects_issues = 1
114 114 get :index, :project_id => 1
@@ -119,7 +119,7 class IssuesControllerTest < ActionController::TestCase
119 119 assert_tag :tag => 'a', :content => /Subproject issue/
120 120 assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
121 121 end
122
122
123 123 def test_index_with_project_and_subprojects_should_show_private_subprojects
124 124 @request.session[:user_id] = 2
125 125 Setting.display_subprojects_issues = 1
@@ -131,45 +131,45 class IssuesControllerTest < ActionController::TestCase
131 131 assert_tag :tag => 'a', :content => /Subproject issue/
132 132 assert_tag :tag => 'a', :content => /Issue of a private subproject/
133 133 end
134
134
135 135 def test_index_with_project_and_default_filter
136 136 get :index, :project_id => 1, :set_filter => 1
137 137 assert_response :success
138 138 assert_template 'index.rhtml'
139 139 assert_not_nil assigns(:issues)
140
140
141 141 query = assigns(:query)
142 142 assert_not_nil query
143 143 # default filter
144 144 assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters)
145 145 end
146
146
147 147 def test_index_with_project_and_filter
148 get :index, :project_id => 1, :set_filter => 1,
148 get :index, :project_id => 1, :set_filter => 1,
149 149 :f => ['tracker_id'],
150 150 :op => {'tracker_id' => '='},
151 :v => {'tracker_id' => ['1']}
151 :v => {'tracker_id' => ['1']}
152 152 assert_response :success
153 153 assert_template 'index.rhtml'
154 154 assert_not_nil assigns(:issues)
155
155
156 156 query = assigns(:query)
157 157 assert_not_nil query
158 158 assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters)
159 159 end
160
160
161 161 def test_index_with_project_and_empty_filters
162 162 get :index, :project_id => 1, :set_filter => 1, :fields => ['']
163 163 assert_response :success
164 164 assert_template 'index.rhtml'
165 165 assert_not_nil assigns(:issues)
166
166
167 167 query = assigns(:query)
168 168 assert_not_nil query
169 169 # no filter
170 170 assert_equal({}, query.filters)
171 171 end
172
172
173 173 def test_index_with_query
174 174 get :index, :project_id => 1, :query_id => 5
175 175 assert_response :success
@@ -177,7 +177,7 class IssuesControllerTest < ActionController::TestCase
177 177 assert_not_nil assigns(:issues)
178 178 assert_nil assigns(:issue_count_by_group)
179 179 end
180
180
181 181 def test_index_with_query_grouped_by_tracker
182 182 get :index, :project_id => 1, :query_id => 6
183 183 assert_response :success
@@ -185,7 +185,7 class IssuesControllerTest < ActionController::TestCase
185 185 assert_not_nil assigns(:issues)
186 186 assert_not_nil assigns(:issue_count_by_group)
187 187 end
188
188
189 189 def test_index_with_query_grouped_by_list_custom_field
190 190 get :index, :project_id => 1, :query_id => 9
191 191 assert_response :success
@@ -193,15 +193,15 class IssuesControllerTest < ActionController::TestCase
193 193 assert_not_nil assigns(:issues)
194 194 assert_not_nil assigns(:issue_count_by_group)
195 195 end
196
196
197 197 def test_index_sort_by_field_not_included_in_columns
198 198 Setting.issue_list_default_columns = %w(subject author)
199 199 get :index, :sort => 'tracker'
200 200 end
201
201
202 202 def test_index_csv_with_project
203 203 Setting.default_language = 'en'
204
204
205 205 get :index, :format => 'csv'
206 206 assert_response :success
207 207 assert_not_nil assigns(:issues)
@@ -213,24 +213,24 class IssuesControllerTest < ActionController::TestCase
213 213 assert_not_nil assigns(:issues)
214 214 assert_equal 'text/csv', @response.content_type
215 215 end
216
216
217 217 def test_index_pdf
218 218 get :index, :format => 'pdf'
219 219 assert_response :success
220 220 assert_not_nil assigns(:issues)
221 221 assert_equal 'application/pdf', @response.content_type
222
222
223 223 get :index, :project_id => 1, :format => 'pdf'
224 224 assert_response :success
225 225 assert_not_nil assigns(:issues)
226 226 assert_equal 'application/pdf', @response.content_type
227
227
228 228 get :index, :project_id => 1, :query_id => 6, :format => 'pdf'
229 229 assert_response :success
230 230 assert_not_nil assigns(:issues)
231 231 assert_equal 'application/pdf', @response.content_type
232 232 end
233
233
234 234 def test_index_pdf_with_query_grouped_by_list_custom_field
235 235 get :index, :project_id => 1, :query_id => 9, :format => 'pdf'
236 236 assert_response :success
@@ -238,47 +238,47 class IssuesControllerTest < ActionController::TestCase
238 238 assert_not_nil assigns(:issue_count_by_group)
239 239 assert_equal 'application/pdf', @response.content_type
240 240 end
241
241
242 242 def test_index_sort
243 243 get :index, :sort => 'tracker,id:desc'
244 244 assert_response :success
245
245
246 246 sort_params = @request.session['issues_index_sort']
247 247 assert sort_params.is_a?(String)
248 248 assert_equal 'tracker,id:desc', sort_params
249
249
250 250 issues = assigns(:issues)
251 251 assert_not_nil issues
252 252 assert !issues.empty?
253 253 assert_equal issues.sort {|a,b| a.tracker == b.tracker ? b.id <=> a.id : a.tracker <=> b.tracker }.collect(&:id), issues.collect(&:id)
254 254 end
255
255
256 256 def test_index_with_columns
257 257 columns = ['tracker', 'subject', 'assigned_to']
258 258 get :index, :set_filter => 1, :c => columns
259 259 assert_response :success
260
260
261 261 # query should use specified columns
262 262 query = assigns(:query)
263 263 assert_kind_of Query, query
264 264 assert_equal columns, query.column_names.map(&:to_s)
265
265
266 266 # columns should be stored in session
267 267 assert_kind_of Hash, session[:query]
268 268 assert_kind_of Array, session[:query][:column_names]
269 269 assert_equal columns, session[:query][:column_names].map(&:to_s)
270 270 end
271
271
272 272 def test_index_with_custom_field_column
273 273 columns = %w(tracker subject cf_2)
274 274 get :index, :set_filter => 1, :c => columns
275 275 assert_response :success
276
276
277 277 # query should use specified columns
278 278 query = assigns(:query)
279 279 assert_kind_of Query, query
280 280 assert_equal columns, query.column_names.map(&:to_s)
281
281
282 282 assert_tag :td,
283 283 :attributes => {:class => 'cf_2 string'},
284 284 :ancestor => {:tag => 'table', :attributes => {:class => /issues/}}
@@ -290,88 +290,88 class IssuesControllerTest < ActionController::TestCase
290 290 assert_template 'show.rhtml'
291 291 assert_not_nil assigns(:issue)
292 292 assert_equal Issue.find(1), assigns(:issue)
293
293
294 294 # anonymous role is allowed to add a note
295 295 assert_tag :tag => 'form',
296 296 :descendant => { :tag => 'fieldset',
297 :child => { :tag => 'legend',
297 :child => { :tag => 'legend',
298 298 :content => /Notes/ } }
299 299 end
300
300
301 301 def test_show_by_manager
302 302 @request.session[:user_id] = 2
303 303 get :show, :id => 1
304 304 assert_response :success
305
305
306 306 assert_tag :tag => 'a',
307 307 :content => /Quote/
308
308
309 309 assert_tag :tag => 'form',
310 310 :descendant => { :tag => 'fieldset',
311 :child => { :tag => 'legend',
311 :child => { :tag => 'legend',
312 312 :content => /Change properties/ } },
313 313 :descendant => { :tag => 'fieldset',
314 :child => { :tag => 'legend',
314 :child => { :tag => 'legend',
315 315 :content => /Log time/ } },
316 316 :descendant => { :tag => 'fieldset',
317 :child => { :tag => 'legend',
317 :child => { :tag => 'legend',
318 318 :content => /Notes/ } }
319 319 end
320
320
321 321 def test_show_should_deny_anonymous_access_without_permission
322 322 Role.anonymous.remove_permission!(:view_issues)
323 323 get :show, :id => 1
324 324 assert_response :redirect
325 325 end
326
326
327 327 def test_show_should_deny_anonymous_access_to_private_issue
328 328 Issue.update_all(["is_private = ?", true], "id = 1")
329 329 get :show, :id => 1
330 330 assert_response :redirect
331 331 end
332
332
333 333 def test_show_should_deny_non_member_access_without_permission
334 334 Role.non_member.remove_permission!(:view_issues)
335 335 @request.session[:user_id] = 9
336 336 get :show, :id => 1
337 337 assert_response 403
338 338 end
339
339
340 340 def test_show_should_deny_non_member_access_to_private_issue
341 341 Issue.update_all(["is_private = ?", true], "id = 1")
342 342 @request.session[:user_id] = 9
343 343 get :show, :id => 1
344 344 assert_response 403
345 345 end
346
346
347 347 def test_show_should_deny_member_access_without_permission
348 348 Role.find(1).remove_permission!(:view_issues)
349 349 @request.session[:user_id] = 2
350 350 get :show, :id => 1
351 351 assert_response 403
352 352 end
353
353
354 354 def test_show_should_deny_member_access_to_private_issue_without_permission
355 355 Issue.update_all(["is_private = ?", true], "id = 1")
356 356 @request.session[:user_id] = 3
357 357 get :show, :id => 1
358 358 assert_response 403
359 359 end
360
360
361 361 def test_show_should_allow_author_access_to_private_issue
362 362 Issue.update_all(["is_private = ?, author_id = 3", true], "id = 1")
363 363 @request.session[:user_id] = 3
364 364 get :show, :id => 1
365 365 assert_response :success
366 366 end
367
367
368 368 def test_show_should_allow_assignee_access_to_private_issue
369 369 Issue.update_all(["is_private = ?, assigned_to_id = 3", true], "id = 1")
370 370 @request.session[:user_id] = 3
371 371 get :show, :id => 1
372 372 assert_response :success
373 373 end
374
374
375 375 def test_show_should_allow_member_access_to_private_issue_with_permission
376 376 Issue.update_all(["is_private = ?", true], "id = 1")
377 377 User.find(3).roles_for_project(Project.find(1)).first.update_attribute :issues_visibility, 'all'
@@ -379,22 +379,22 class IssuesControllerTest < ActionController::TestCase
379 379 get :show, :id => 1
380 380 assert_response :success
381 381 end
382
382
383 383 def test_show_should_not_disclose_relations_to_invisible_issues
384 384 Setting.cross_project_issue_relations = '1'
385 385 IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => 'relates')
386 386 # Relation to a private project issue
387 387 IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(4), :relation_type => 'relates')
388
388
389 389 get :show, :id => 1
390 390 assert_response :success
391
391
392 392 assert_tag :div, :attributes => { :id => 'relations' },
393 393 :descendant => { :tag => 'a', :content => /#2$/ }
394 394 assert_no_tag :div, :attributes => { :id => 'relations' },
395 395 :descendant => { :tag => 'a', :content => /#4$/ }
396 396 end
397
397
398 398 def test_show_atom
399 399 get :show, :id => 2, :format => 'atom'
400 400 assert_response :success
@@ -402,7 +402,7 class IssuesControllerTest < ActionController::TestCase
402 402 # Inline image
403 403 assert_select 'content', :text => Regexp.new(Regexp.quote('http://test.host/attachments/download/10'))
404 404 end
405
405
406 406 def test_show_export_to_pdf
407 407 get :show, :id => 3, :format => 'pdf'
408 408 assert_response :success
@@ -416,7 +416,7 class IssuesControllerTest < ActionController::TestCase
416 416 get :new, :project_id => 1, :tracker_id => 1
417 417 assert_response :success
418 418 assert_template 'new'
419
419
420 420 assert_tag :tag => 'input', :attributes => { :name => 'issue[custom_field_values][2]',
421 421 :value => 'Default string' }
422 422 end
@@ -426,51 +426,51 class IssuesControllerTest < ActionController::TestCase
426 426 get :new, :project_id => 1
427 427 assert_response :success
428 428 assert_template 'new'
429
429
430 430 issue = assigns(:issue)
431 431 assert_not_nil issue
432 432 assert_equal Project.find(1).trackers.first, issue.tracker
433 433 end
434
434
435 435 def test_get_new_with_no_default_status_should_display_an_error
436 436 @request.session[:user_id] = 2
437 437 IssueStatus.delete_all
438
438
439 439 get :new, :project_id => 1
440 440 assert_response 500
441 441 assert_error_tag :content => /No default issue/
442 442 end
443
443
444 444 def test_get_new_with_no_tracker_should_display_an_error
445 445 @request.session[:user_id] = 2
446 446 Tracker.delete_all
447
447
448 448 get :new, :project_id => 1
449 449 assert_response 500
450 450 assert_error_tag :content => /No tracker/
451 451 end
452
452
453 453 def test_update_new_form
454 454 @request.session[:user_id] = 2
455 455 xhr :post, :new, :project_id => 1,
456 :issue => {:tracker_id => 2,
456 :issue => {:tracker_id => 2,
457 457 :subject => 'This is the test_new issue',
458 458 :description => 'This is the description',
459 459 :priority_id => 5}
460 460 assert_response :success
461 461 assert_template 'attributes'
462
462
463 463 issue = assigns(:issue)
464 464 assert_kind_of Issue, issue
465 465 assert_equal 1, issue.project_id
466 466 assert_equal 2, issue.tracker_id
467 467 assert_equal 'This is the test_new issue', issue.subject
468 468 end
469
469
470 470 def test_post_create
471 471 @request.session[:user_id] = 2
472 472 assert_difference 'Issue.count' do
473 post :create, :project_id => 1,
473 post :create, :project_id => 1,
474 474 :issue => {:tracker_id => 3,
475 475 :status_id => 2,
476 476 :subject => 'This is the test_new issue',
@@ -481,7 +481,7 class IssuesControllerTest < ActionController::TestCase
481 481 :custom_field_values => {'2' => 'Value for field 2'}}
482 482 end
483 483 assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
484
484
485 485 issue = Issue.find_by_subject('This is the test_new issue')
486 486 assert_not_nil issue
487 487 assert_equal 2, issue.author_id
@@ -493,11 +493,11 class IssuesControllerTest < ActionController::TestCase
493 493 assert_not_nil v
494 494 assert_equal 'Value for field 2', v.value
495 495 end
496
496
497 497 def test_post_create_without_start_date
498 498 @request.session[:user_id] = 2
499 499 assert_difference 'Issue.count' do
500 post :create, :project_id => 1,
500 post :create, :project_id => 1,
501 501 :issue => {:tracker_id => 3,
502 502 :status_id => 2,
503 503 :subject => 'This is the test_new issue',
@@ -508,15 +508,15 class IssuesControllerTest < ActionController::TestCase
508 508 :custom_field_values => {'2' => 'Value for field 2'}}
509 509 end
510 510 assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
511
511
512 512 issue = Issue.find_by_subject('This is the test_new issue')
513 513 assert_not_nil issue
514 514 assert_nil issue.start_date
515 515 end
516
516
517 517 def test_post_create_and_continue
518 518 @request.session[:user_id] = 2
519 post :create, :project_id => 1,
519 post :create, :project_id => 1,
520 520 :issue => {:tracker_id => 3,
521 521 :subject => 'This is first issue',
522 522 :priority_id => 5},
@@ -524,11 +524,11 class IssuesControllerTest < ActionController::TestCase
524 524 assert_redirected_to :controller => 'issues', :action => 'new', :project_id => 'ecookbook',
525 525 :issue => {:tracker_id => 3}
526 526 end
527
527
528 528 def test_post_create_without_custom_fields_param
529 529 @request.session[:user_id] = 2
530 530 assert_difference 'Issue.count' do
531 post :create, :project_id => 1,
531 post :create, :project_id => 1,
532 532 :issue => {:tracker_id => 1,
533 533 :subject => 'This is the test_new issue',
534 534 :description => 'This is the description',
@@ -542,7 +542,7 class IssuesControllerTest < ActionController::TestCase
542 542 field.update_attribute(:is_required, true)
543 543
544 544 @request.session[:user_id] = 2
545 post :create, :project_id => 1,
545 post :create, :project_id => 1,
546 546 :issue => {:tracker_id => 1,
547 547 :subject => 'This is the test_new issue',
548 548 :description => 'This is the description',
@@ -553,13 +553,13 class IssuesControllerTest < ActionController::TestCase
553 553 assert_not_nil issue
554 554 assert_equal I18n.translate('activerecord.errors.messages.invalid'), issue.errors.on(:custom_values)
555 555 end
556
556
557 557 def test_post_create_with_watchers
558 558 @request.session[:user_id] = 2
559 559 ActionMailer::Base.deliveries.clear
560
560
561 561 assert_difference 'Watcher.count', 2 do
562 post :create, :project_id => 1,
562 post :create, :project_id => 1,
563 563 :issue => {:tracker_id => 1,
564 564 :subject => 'This is a new issue with watchers',
565 565 :description => 'This is the description',
@@ -569,7 +569,7 class IssuesControllerTest < ActionController::TestCase
569 569 issue = Issue.find_by_subject('This is a new issue with watchers')
570 570 assert_not_nil issue
571 571 assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
572
572
573 573 # Watchers added
574 574 assert_equal [2, 3], issue.watcher_user_ids.sort
575 575 assert issue.watched_by?(User.find(3))
@@ -578,12 +578,12 class IssuesControllerTest < ActionController::TestCase
578 578 assert_kind_of TMail::Mail, mail
579 579 assert [mail.bcc, mail.cc].flatten.include?(User.find(3).mail)
580 580 end
581
581
582 582 def test_post_create_subissue
583 583 @request.session[:user_id] = 2
584
584
585 585 assert_difference 'Issue.count' do
586 post :create, :project_id => 1,
586 post :create, :project_id => 1,
587 587 :issue => {:tracker_id => 1,
588 588 :subject => 'This is a child issue',
589 589 :parent_issue_id => 2}
@@ -595,9 +595,9 class IssuesControllerTest < ActionController::TestCase
595 595
596 596 def test_post_create_subissue_with_non_numeric_parent_id
597 597 @request.session[:user_id] = 2
598
598
599 599 assert_difference 'Issue.count' do
600 post :create, :project_id => 1,
600 post :create, :project_id => 1,
601 601 :issue => {:tracker_id => 1,
602 602 :subject => 'This is a child issue',
603 603 :parent_issue_id => 'ABC'}
@@ -606,12 +606,12 class IssuesControllerTest < ActionController::TestCase
606 606 assert_not_nil issue
607 607 assert_nil issue.parent
608 608 end
609
609
610 610 def test_post_create_should_send_a_notification
611 611 ActionMailer::Base.deliveries.clear
612 612 @request.session[:user_id] = 2
613 613 assert_difference 'Issue.count' do
614 post :create, :project_id => 1,
614 post :create, :project_id => 1,
615 615 :issue => {:tracker_id => 3,
616 616 :subject => 'This is the test_new issue',
617 617 :description => 'This is the description',
@@ -620,13 +620,13 class IssuesControllerTest < ActionController::TestCase
620 620 :custom_field_values => {'2' => 'Value for field 2'}}
621 621 end
622 622 assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
623
623
624 624 assert_equal 1, ActionMailer::Base.deliveries.size
625 625 end
626
626
627 627 def test_post_create_should_preserve_fields_values_on_validation_failure
628 628 @request.session[:user_id] = 2
629 post :create, :project_id => 1,
629 post :create, :project_id => 1,
630 630 :issue => {:tracker_id => 1,
631 631 # empty subject
632 632 :subject => '',
@@ -635,35 +635,35 class IssuesControllerTest < ActionController::TestCase
635 635 :custom_field_values => {'1' => 'Oracle', '2' => 'Value for field 2'}}
636 636 assert_response :success
637 637 assert_template 'new'
638
638
639 639 assert_tag :textarea, :attributes => { :name => 'issue[description]' },
640 640 :content => 'This is a description'
641 641 assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
642 642 :child => { :tag => 'option', :attributes => { :selected => 'selected',
643 643 :value => '6' },
644 :content => 'High' }
644 :content => 'High' }
645 645 # Custom fields
646 646 assert_tag :select, :attributes => { :name => 'issue[custom_field_values][1]' },
647 647 :child => { :tag => 'option', :attributes => { :selected => 'selected',
648 648 :value => 'Oracle' },
649 :content => 'Oracle' }
649 :content => 'Oracle' }
650 650 assert_tag :input, :attributes => { :name => 'issue[custom_field_values][2]',
651 651 :value => 'Value for field 2'}
652 652 end
653
653
654 654 def test_post_create_should_ignore_non_safe_attributes
655 655 @request.session[:user_id] = 2
656 656 assert_nothing_raised do
657 657 post :create, :project_id => 1, :issue => { :tracker => "A param can not be a Tracker" }
658 658 end
659 659 end
660
660
661 661 context "without workflow privilege" do
662 662 setup do
663 663 Workflow.delete_all(["role_id = ?", Role.anonymous.id])
664 664 Role.anonymous.add_permission! :add_issues, :add_issue_notes
665 665 end
666
666
667 667 context "#new" do
668 668 should "propose default status only" do
669 669 get :new, :project_id => 1
@@ -674,10 +674,10 class IssuesControllerTest < ActionController::TestCase
674 674 :children => {:count => 1},
675 675 :child => {:tag => 'option', :attributes => {:value => IssueStatus.default.id.to_s}}
676 676 end
677
677
678 678 should "accept default status" do
679 679 assert_difference 'Issue.count' do
680 post :create, :project_id => 1,
680 post :create, :project_id => 1,
681 681 :issue => {:tracker_id => 1,
682 682 :subject => 'This is an issue',
683 683 :status_id => 1}
@@ -685,10 +685,10 class IssuesControllerTest < ActionController::TestCase
685 685 issue = Issue.last(:order => 'id')
686 686 assert_equal IssueStatus.default, issue.status
687 687 end
688
688
689 689 should "ignore unauthorized status" do
690 690 assert_difference 'Issue.count' do
691 post :create, :project_id => 1,
691 post :create, :project_id => 1,
692 692 :issue => {:tracker_id => 1,
693 693 :subject => 'This is an issue',
694 694 :status_id => 3}
@@ -697,7 +697,7 class IssuesControllerTest < ActionController::TestCase
697 697 assert_equal IssueStatus.default, issue.status
698 698 end
699 699 end
700
700
701 701 context "#update" do
702 702 should "ignore status change" do
703 703 assert_difference 'Journal.count' do
@@ -705,7 +705,7 class IssuesControllerTest < ActionController::TestCase
705 705 end
706 706 assert_equal 1, Issue.find(1).status_id
707 707 end
708
708
709 709 should "ignore attributes changes" do
710 710 assert_difference 'Journal.count' do
711 711 put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -716,7 +716,7 class IssuesControllerTest < ActionController::TestCase
716 716 end
717 717 end
718 718 end
719
719
720 720 context "with workflow privilege" do
721 721 setup do
722 722 Workflow.delete_all(["role_id = ?", Role.anonymous.id])
@@ -724,7 +724,7 class IssuesControllerTest < ActionController::TestCase
724 724 Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4)
725 725 Role.anonymous.add_permission! :add_issues, :add_issue_notes
726 726 end
727
727
728 728 context "#update" do
729 729 should "accept authorized status" do
730 730 assert_difference 'Journal.count' do
@@ -732,14 +732,14 class IssuesControllerTest < ActionController::TestCase
732 732 end
733 733 assert_equal 3, Issue.find(1).status_id
734 734 end
735
735
736 736 should "ignore unauthorized status" do
737 737 assert_difference 'Journal.count' do
738 738 put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
739 739 end
740 740 assert_equal 1, Issue.find(1).status_id
741 741 end
742
742
743 743 should "accept authorized attributes changes" do
744 744 assert_difference 'Journal.count' do
745 745 put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2}
@@ -747,7 +747,7 class IssuesControllerTest < ActionController::TestCase
747 747 issue = Issue.find(1)
748 748 assert_equal 2, issue.assigned_to_id
749 749 end
750
750
751 751 should "ignore unauthorized attributes changes" do
752 752 assert_difference 'Journal.count' do
753 753 put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'}
@@ -756,7 +756,7 class IssuesControllerTest < ActionController::TestCase
756 756 assert_equal "Can't print recipes", issue.subject
757 757 end
758 758 end
759
759
760 760 context "and :edit_issues permission" do
761 761 setup do
762 762 Role.anonymous.add_permission! :add_issues, :edit_issues
@@ -768,14 +768,14 class IssuesControllerTest < ActionController::TestCase
768 768 end
769 769 assert_equal 3, Issue.find(1).status_id
770 770 end
771
771
772 772 should "ignore unauthorized status" do
773 773 assert_difference 'Journal.count' do
774 774 put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2}
775 775 end
776 776 assert_equal 1, Issue.find(1).status_id
777 777 end
778
778
779 779 should "accept authorized attributes changes" do
780 780 assert_difference 'Journal.count' do
781 781 put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2}
@@ -786,7 +786,7 class IssuesControllerTest < ActionController::TestCase
786 786 end
787 787 end
788 788 end
789
789
790 790 def test_copy_issue
791 791 @request.session[:user_id] = 2
792 792 get :new, :project_id => 1, :copy_from => 1
@@ -795,7 +795,7 class IssuesControllerTest < ActionController::TestCase
795 795 orig = Issue.find(1)
796 796 assert_equal orig.subject, assigns(:issue).subject
797 797 end
798
798
799 799 def test_get_edit
800 800 @request.session[:user_id] = 2
801 801 get :edit, :id => 1
@@ -804,26 +804,26 class IssuesControllerTest < ActionController::TestCase
804 804 assert_not_nil assigns(:issue)
805 805 assert_equal Issue.find(1), assigns(:issue)
806 806 end
807
807
808 808 def test_get_edit_with_params
809 809 @request.session[:user_id] = 2
810 810 get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
811 811 :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id }
812 812 assert_response :success
813 813 assert_template 'edit'
814
814
815 815 issue = assigns(:issue)
816 816 assert_not_nil issue
817
817
818 818 assert_equal 5, issue.status_id
819 819 assert_tag :select, :attributes => { :name => 'issue[status_id]' },
820 :child => { :tag => 'option',
820 :child => { :tag => 'option',
821 821 :content => 'Closed',
822 822 :attributes => { :selected => 'selected' } }
823
823
824 824 assert_equal 7, issue.priority_id
825 825 assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
826 :child => { :tag => 'option',
826 :child => { :tag => 'option',
827 827 :content => 'Urgent',
828 828 :attributes => { :selected => 'selected' } }
829 829
@@ -838,13 +838,13 class IssuesControllerTest < ActionController::TestCase
838 838 @request.session[:user_id] = 2
839 839 xhr :post, :new, :project_id => 1,
840 840 :id => 1,
841 :issue => {:tracker_id => 2,
841 :issue => {:tracker_id => 2,
842 842 :subject => 'This is the test_new issue',
843 843 :description => 'This is the description',
844 844 :priority_id => 5}
845 845 assert_response :success
846 846 assert_template 'attributes'
847
847
848 848 issue = assigns(:issue)
849 849 assert_kind_of Issue, issue
850 850 assert_equal 1, issue.id
@@ -852,7 +852,7 class IssuesControllerTest < ActionController::TestCase
852 852 assert_equal 2, issue.tracker_id
853 853 assert_equal 'This is the test_new issue', issue.subject
854 854 end
855
855
856 856 def test_update_using_invalid_http_verbs
857 857 @request.session[:user_id] = 2
858 858 subject = 'Updated by an invalid http verb'
@@ -870,12 +870,12 class IssuesControllerTest < ActionController::TestCase
870 870 def test_put_update_without_custom_fields_param
871 871 @request.session[:user_id] = 2
872 872 ActionMailer::Base.deliveries.clear
873
873
874 874 issue = Issue.find(1)
875 875 assert_equal '125', issue.custom_value_for(2).value
876 876 old_subject = issue.subject
877 877 new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
878
878
879 879 assert_difference('Journal.count') do
880 880 assert_difference('JournalDetail.count', 2) do
881 881 put :update, :id => 1, :issue => {:subject => new_subject,
@@ -889,18 +889,18 class IssuesControllerTest < ActionController::TestCase
889 889 assert_equal new_subject, issue.subject
890 890 # Make sure custom fields were not cleared
891 891 assert_equal '125', issue.custom_value_for(2).value
892
892
893 893 mail = ActionMailer::Base.deliveries.last
894 894 assert_kind_of TMail::Mail, mail
895 895 assert mail.subject.starts_with?("[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}]")
896 896 assert mail.body.include?("Subject changed from #{old_subject} to #{new_subject}")
897 897 end
898
898
899 899 def test_put_update_with_custom_field_change
900 900 @request.session[:user_id] = 2
901 901 issue = Issue.find(1)
902 902 assert_equal '125', issue.custom_value_for(2).value
903
903
904 904 assert_difference('Journal.count') do
905 905 assert_difference('JournalDetail.count', 3) do
906 906 put :update, :id => 1, :issue => {:subject => 'Custom field change',
@@ -913,12 +913,12 class IssuesControllerTest < ActionController::TestCase
913 913 assert_redirected_to :action => 'show', :id => '1'
914 914 issue.reload
915 915 assert_equal 'New custom value', issue.custom_value_for(2).value
916
916
917 917 mail = ActionMailer::Base.deliveries.last
918 918 assert_kind_of TMail::Mail, mail
919 919 assert mail.body.include?("Searchable field changed from 125 to New custom value")
920 920 end
921
921
922 922 def test_put_update_with_status_and_assignee_change
923 923 issue = Issue.find(1)
924 924 assert_equal 1, issue.status_id
@@ -936,13 +936,13 class IssuesControllerTest < ActionController::TestCase
936 936 j = Journal.find(:first, :order => 'id DESC')
937 937 assert_equal 'Assigned to dlopper', j.notes
938 938 assert_equal 2, j.details.size
939
939
940 940 mail = ActionMailer::Base.deliveries.last
941 941 assert mail.body.include?("Status changed from New to Assigned")
942 942 # subject should contain the new status
943 943 assert mail.subject.include?("(#{ IssueStatus.find(2).name })")
944 944 end
945
945
946 946 def test_put_update_with_note_only
947 947 notes = 'Note added by IssuesControllerTest#test_update_with_note_only'
948 948 # anonymous user
@@ -954,11 +954,11 class IssuesControllerTest < ActionController::TestCase
954 954 assert_equal notes, j.notes
955 955 assert_equal 0, j.details.size
956 956 assert_equal User.anonymous, j.user
957
957
958 958 mail = ActionMailer::Base.deliveries.last
959 959 assert mail.body.include?(notes)
960 960 end
961
961
962 962 def test_put_update_with_note_and_spent_time
963 963 @request.session[:user_id] = 2
964 964 spent_hours_before = Issue.find(1).spent_hours
@@ -969,22 +969,22 class IssuesControllerTest < ActionController::TestCase
969 969 :time_entry => { :hours => '2.5', :comments => 'test_put_update_with_note_and_spent_time', :activity_id => TimeEntryActivity.first.id }
970 970 end
971 971 assert_redirected_to :action => 'show', :id => '1'
972
972
973 973 issue = Issue.find(1)
974
974
975 975 j = Journal.find(:first, :order => 'id DESC')
976 976 assert_equal '2.5 hours added', j.notes
977 977 assert_equal 0, j.details.size
978
978
979 979 t = issue.time_entries.find_by_comments('test_put_update_with_note_and_spent_time')
980 980 assert_not_nil t
981 981 assert_equal 2.5, t.hours
982 982 assert_equal spent_hours_before + 2.5, issue.spent_hours
983 983 end
984
984
985 985 def test_put_update_with_attachment_only
986 986 set_tmp_attachments_directory
987
987
988 988 # Delete all fixtured journals, a race condition can occur causing the wrong
989 989 # journal to get fetched in the next find.
990 990 Journal.delete_all
@@ -1000,21 +1000,21 class IssuesControllerTest < ActionController::TestCase
1000 1000 assert_equal 1, j.details.size
1001 1001 assert_equal 'testfile.txt', j.details.first.value
1002 1002 assert_equal User.anonymous, j.user
1003
1003
1004 1004 mail = ActionMailer::Base.deliveries.last
1005 1005 assert mail.body.include?('testfile.txt')
1006 1006 end
1007 1007
1008 1008 def test_put_update_with_attachment_that_fails_to_save
1009 1009 set_tmp_attachments_directory
1010
1010
1011 1011 # Delete all fixtured journals, a race condition can occur causing the wrong
1012 1012 # journal to get fetched in the next find.
1013 1013 Journal.delete_all
1014 1014
1015 1015 # Mock out the unsaved attachment
1016 1016 Attachment.any_instance.stubs(:create).returns(Attachment.new)
1017
1017
1018 1018 # anonymous user
1019 1019 put :update,
1020 1020 :id => 1,
@@ -1029,12 +1029,12 class IssuesControllerTest < ActionController::TestCase
1029 1029 issue = Issue.find(1)
1030 1030 issue.journals.clear
1031 1031 ActionMailer::Base.deliveries.clear
1032
1032
1033 1033 put :update,
1034 1034 :id => 1,
1035 1035 :notes => ''
1036 1036 assert_redirected_to :action => 'show', :id => '1'
1037
1037
1038 1038 issue.reload
1039 1039 assert issue.journals.empty?
1040 1040 # No email should be sent
@@ -1047,18 +1047,18 class IssuesControllerTest < ActionController::TestCase
1047 1047 issue = Issue.find(1)
1048 1048 old_subject = issue.subject
1049 1049 new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
1050
1050
1051 1051 put :update, :id => 1, :issue => {:subject => new_subject,
1052 1052 :priority_id => '6',
1053 1053 :category_id => '1' # no change
1054 1054 }
1055 1055 assert_equal 1, ActionMailer::Base.deliveries.size
1056 1056 end
1057
1057
1058 1058 def test_put_update_with_invalid_spent_time_hours_only
1059 1059 @request.session[:user_id] = 2
1060 1060 notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
1061
1061
1062 1062 assert_no_difference('Journal.count') do
1063 1063 put :update,
1064 1064 :id => 1,
@@ -1067,16 +1067,16 class IssuesControllerTest < ActionController::TestCase
1067 1067 end
1068 1068 assert_response :success
1069 1069 assert_template 'edit'
1070
1070
1071 1071 assert_error_tag :descendant => {:content => /Activity can't be blank/}
1072 1072 assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
1073 1073 assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => "2z" }
1074 1074 end
1075
1075
1076 1076 def test_put_update_with_invalid_spent_time_comments_only
1077 1077 @request.session[:user_id] = 2
1078 1078 notes = 'Note added by IssuesControllerTest#test_post_edit_with_invalid_spent_time'
1079
1079
1080 1080 assert_no_difference('Journal.count') do
1081 1081 put :update,
1082 1082 :id => 1,
@@ -1085,13 +1085,13 class IssuesControllerTest < ActionController::TestCase
1085 1085 end
1086 1086 assert_response :success
1087 1087 assert_template 'edit'
1088
1088
1089 1089 assert_error_tag :descendant => {:content => /Activity can't be blank/}
1090 1090 assert_error_tag :descendant => {:content => /Hours can't be blank/}
1091 1091 assert_tag :textarea, :attributes => { :name => 'notes' }, :content => notes
1092 1092 assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => "this is my comment" }
1093 1093 end
1094
1094
1095 1095 def test_put_update_should_allow_fixed_version_to_be_set_to_a_subproject
1096 1096 issue = Issue.find(2)
1097 1097 @request.session[:user_id] = 2
@@ -1122,7 +1122,7 class IssuesControllerTest < ActionController::TestCase
1122 1122 assert_response :redirect
1123 1123 assert_redirected_to '/issues'
1124 1124 end
1125
1125
1126 1126 def test_put_update_should_not_redirect_back_using_the_back_url_parameter_off_the_host
1127 1127 issue = Issue.find(2)
1128 1128 @request.session[:user_id] = 2
@@ -1137,21 +1137,21 class IssuesControllerTest < ActionController::TestCase
1137 1137 assert_response :redirect
1138 1138 assert_redirected_to :controller => 'issues', :action => 'show', :id => issue.id
1139 1139 end
1140
1140
1141 1141 def test_get_bulk_edit
1142 1142 @request.session[:user_id] = 2
1143 1143 get :bulk_edit, :ids => [1, 2]
1144 1144 assert_response :success
1145 1145 assert_template 'bulk_edit'
1146
1146
1147 1147 assert_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
1148
1148
1149 1149 # Project specific custom field, date type
1150 1150 field = CustomField.find(9)
1151 1151 assert !field.is_for_all?
1152 1152 assert_equal 'date', field.field_format
1153 1153 assert_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
1154
1154
1155 1155 # System wide custom field
1156 1156 assert CustomField.find(1).is_for_all?
1157 1157 assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'}
@@ -1162,25 +1162,25 class IssuesControllerTest < ActionController::TestCase
1162 1162 get :bulk_edit, :ids => [1, 2, 6]
1163 1163 assert_response :success
1164 1164 assert_template 'bulk_edit'
1165
1165
1166 1166 # Can not set issues from different projects as children of an issue
1167 1167 assert_no_tag :input, :attributes => {:name => 'issue[parent_issue_id]'}
1168
1168
1169 1169 # Project specific custom field, date type
1170 1170 field = CustomField.find(9)
1171 1171 assert !field.is_for_all?
1172 1172 assert !field.project_ids.include?(Issue.find(6).project_id)
1173 1173 assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'}
1174 1174 end
1175
1175
1176 1176 def test_get_bulk_edit_with_user_custom_field
1177 1177 field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user', :is_for_all => true)
1178
1178
1179 1179 @request.session[:user_id] = 2
1180 1180 get :bulk_edit, :ids => [1, 2]
1181 1181 assert_response :success
1182 1182 assert_template 'bulk_edit'
1183
1183
1184 1184 assert_tag :select,
1185 1185 :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
1186 1186 :children => {
@@ -1188,15 +1188,15 class IssuesControllerTest < ActionController::TestCase
1188 1188 :count => Project.find(1).users.count + 1
1189 1189 }
1190 1190 end
1191
1191
1192 1192 def test_get_bulk_edit_with_version_custom_field
1193 1193 field = IssueCustomField.create!(:name => 'Affected version', :field_format => 'version', :is_for_all => true)
1194
1194
1195 1195 @request.session[:user_id] = 2
1196 1196 get :bulk_edit, :ids => [1, 2]
1197 1197 assert_response :success
1198 1198 assert_template 'bulk_edit'
1199
1199
1200 1200 assert_tag :select,
1201 1201 :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
1202 1202 :children => {
@@ -1212,11 +1212,11 class IssuesControllerTest < ActionController::TestCase
1212 1212 :issue => {:priority_id => 7,
1213 1213 :assigned_to_id => '',
1214 1214 :custom_field_values => {'2' => ''}}
1215
1215
1216 1216 assert_response 302
1217 1217 # check that the issues were updated
1218 1218 assert_equal [7, 7], Issue.find_all_by_id([1, 2]).collect {|i| i.priority.id}
1219
1219
1220 1220 issue = Issue.find(1)
1221 1221 journal = issue.journals.find(:first, :order => 'created_on DESC')
1222 1222 assert_equal '125', issue.custom_value_for(2).value
@@ -1231,11 +1231,11 class IssuesControllerTest < ActionController::TestCase
1231 1231 :issue => {:priority_id => 7,
1232 1232 :assigned_to_id => '',
1233 1233 :custom_field_values => {'2' => ''}}
1234
1234
1235 1235 assert_response 302
1236 1236 # check that the issues were updated
1237 1237 assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id)
1238
1238
1239 1239 issue = Issue.find(1)
1240 1240 journal = issue.journals.find(:first, :order => 'created_on DESC')
1241 1241 assert_equal '125', issue.custom_value_for(2).value
@@ -1256,7 +1256,7 class IssuesControllerTest < ActionController::TestCase
1256 1256 assert_response 403
1257 1257 assert_not_equal "Bulk should fail", Journal.last.notes
1258 1258 end
1259
1259
1260 1260 def test_bullk_update_should_send_a_notification
1261 1261 @request.session[:user_id] = 2
1262 1262 ActionMailer::Base.deliveries.clear
@@ -1282,18 +1282,18 class IssuesControllerTest < ActionController::TestCase
1282 1282 :issue => {:priority_id => '',
1283 1283 :assigned_to_id => '',
1284 1284 :status_id => '5'}
1285
1285
1286 1286 assert_response 302
1287 1287 issue = Issue.find(1)
1288 1288 assert issue.closed?
1289 1289 end
1290
1290
1291 1291 def test_bulk_update_parent_id
1292 1292 @request.session[:user_id] = 2
1293 1293 post :bulk_update, :ids => [1, 3],
1294 1294 :notes => 'Bulk editing parent',
1295 1295 :issue => {:priority_id => '', :assigned_to_id => '', :status_id => '', :parent_issue_id => '2'}
1296
1296
1297 1297 assert_response 302
1298 1298 parent = Issue.find(2)
1299 1299 assert_equal parent.id, Issue.find(1).parent_id
@@ -1308,9 +1308,9 class IssuesControllerTest < ActionController::TestCase
1308 1308 :issue => {:priority_id => '',
1309 1309 :assigned_to_id => '',
1310 1310 :custom_field_values => {'2' => '777'}}
1311
1311
1312 1312 assert_response 302
1313
1313
1314 1314 issue = Issue.find(1)
1315 1315 journal = issue.journals.find(:first, :order => 'created_on DESC')
1316 1316 assert_equal '777', issue.custom_value_for(2).value
@@ -1328,7 +1328,7 class IssuesControllerTest < ActionController::TestCase
1328 1328 # check that the issues were updated
1329 1329 assert_nil Issue.find(2).assigned_to
1330 1330 end
1331
1331
1332 1332 def test_post_bulk_update_should_allow_fixed_version_to_be_set_to_a_subproject
1333 1333 @request.session[:user_id] = 2
1334 1334
@@ -1357,7 +1357,7 class IssuesControllerTest < ActionController::TestCase
1357 1357 assert_response :redirect
1358 1358 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier
1359 1359 end
1360
1360
1361 1361 def test_destroy_issue_with_no_time_entries
1362 1362 assert_nil TimeEntry.find_by_issue_id(2)
1363 1363 @request.session[:user_id] = 2
@@ -1391,7 +1391,7 class IssuesControllerTest < ActionController::TestCase
1391 1391 assert_nil TimeEntry.find(1).issue_id
1392 1392 assert_nil TimeEntry.find(2).issue_id
1393 1393 end
1394
1394
1395 1395 def test_destroy_issues_and_reassign_time_entries_to_another_issue
1396 1396 @request.session[:user_id] = 2
1397 1397 post :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 2
@@ -1400,26 +1400,26 class IssuesControllerTest < ActionController::TestCase
1400 1400 assert_equal 2, TimeEntry.find(1).issue_id
1401 1401 assert_equal 2, TimeEntry.find(2).issue_id
1402 1402 end
1403
1403
1404 1404 def test_destroy_issues_from_different_projects
1405 1405 @request.session[:user_id] = 2
1406 1406 post :destroy, :ids => [1, 2, 6], :todo => 'destroy'
1407 1407 assert_redirected_to :controller => 'issues', :action => 'index'
1408 1408 assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6))
1409 1409 end
1410
1410
1411 1411 def test_destroy_parent_and_child_issues
1412 1412 parent = Issue.generate!(:project_id => 1, :tracker_id => 1)
1413 1413 child = Issue.generate!(:project_id => 1, :tracker_id => 1, :parent_issue_id => parent.id)
1414 1414 assert child.is_descendant_of?(parent.reload)
1415
1415
1416 1416 @request.session[:user_id] = 2
1417 1417 assert_difference 'Issue.count', -2 do
1418 1418 post :destroy, :ids => [parent.id, child.id], :todo => 'destroy'
1419 1419 end
1420 1420 assert_response 302
1421 1421 end
1422
1422
1423 1423 def test_default_search_scope
1424 1424 get :index
1425 1425 assert_tag :div, :attributes => {:id => 'quick-search'},
General Comments 0
You need to be logged in to leave comments. Login now