annotate test/functional/workflows_controller_test.rb @ 8:0c83d98252d9 yuya

* Add custom repo prefix and proper auth realm, remove auth cache (seems like an unwise feature), pass DB handle around, various other bits of tidying
author Chris Cannam
date Thu, 12 Aug 2010 15:31:37 +0100
parents 513646585e45
children af80e5618e9b
rev   line source
Chris@0 1 # Redmine - project management software
Chris@0 2 # Copyright (C) 2006-2008 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@0 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@0 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@0 18 require File.dirname(__FILE__) + '/../test_helper'
Chris@0 19 require 'workflows_controller'
Chris@0 20
Chris@0 21 # Re-raise errors caught by the controller.
Chris@0 22 class WorkflowsController; def rescue_action(e) raise e end; end
Chris@0 23
Chris@0 24 class WorkflowsControllerTest < ActionController::TestCase
Chris@0 25 fixtures :roles, :trackers, :workflows, :users, :issue_statuses
Chris@0 26
Chris@0 27 def setup
Chris@0 28 @controller = WorkflowsController.new
Chris@0 29 @request = ActionController::TestRequest.new
Chris@0 30 @response = ActionController::TestResponse.new
Chris@0 31 User.current = nil
Chris@0 32 @request.session[:user_id] = 1 # admin
Chris@0 33 end
Chris@0 34
Chris@0 35 def test_index
Chris@0 36 get :index
Chris@0 37 assert_response :success
Chris@0 38 assert_template 'index'
Chris@0 39
Chris@0 40 count = Workflow.count(:all, :conditions => 'role_id = 1 AND tracker_id = 2')
Chris@0 41 assert_tag :tag => 'a', :content => count.to_s,
Chris@0 42 :attributes => { :href => '/workflows/edit?role_id=1&amp;tracker_id=2' }
Chris@0 43 end
Chris@0 44
Chris@0 45 def test_get_edit
Chris@0 46 get :edit
Chris@0 47 assert_response :success
Chris@0 48 assert_template 'edit'
Chris@0 49 assert_not_nil assigns(:roles)
Chris@0 50 assert_not_nil assigns(:trackers)
Chris@0 51 end
Chris@0 52
Chris@0 53 def test_get_edit_with_role_and_tracker
Chris@0 54 Workflow.delete_all
Chris@0 55 Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3)
Chris@0 56 Workflow.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5)
Chris@0 57
Chris@0 58 get :edit, :role_id => 2, :tracker_id => 1
Chris@0 59 assert_response :success
Chris@0 60 assert_template 'edit'
Chris@0 61
Chris@0 62 # used status only
Chris@0 63 assert_not_nil assigns(:statuses)
Chris@0 64 assert_equal [2, 3, 5], assigns(:statuses).collect(&:id)
Chris@0 65
Chris@0 66 # allowed transitions
Chris@0 67 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 68 :name => 'issue_status[3][]',
Chris@0 69 :value => '5',
Chris@0 70 :checked => 'checked' }
Chris@0 71 # not allowed
Chris@0 72 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 73 :name => 'issue_status[3][]',
Chris@0 74 :value => '2',
Chris@0 75 :checked => nil }
Chris@0 76 # unused
Chris@0 77 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 78 :name => 'issue_status[4][]' }
Chris@0 79 end
Chris@0 80
Chris@0 81 def test_get_edit_with_role_and_tracker_and_all_statuses
Chris@0 82 Workflow.delete_all
Chris@0 83
Chris@0 84 get :edit, :role_id => 2, :tracker_id => 1, :used_statuses_only => '0'
Chris@0 85 assert_response :success
Chris@0 86 assert_template 'edit'
Chris@0 87
Chris@0 88 assert_not_nil assigns(:statuses)
Chris@0 89 assert_equal IssueStatus.count, assigns(:statuses).size
Chris@0 90
Chris@0 91 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 92 :name => 'issue_status[1][]',
Chris@0 93 :value => '1',
Chris@0 94 :checked => nil }
Chris@0 95 end
Chris@0 96
Chris@0 97 def test_post_edit
Chris@0 98 post :edit, :role_id => 2, :tracker_id => 1, :issue_status => {'4' => ['5'], '3' => ['1', '2']}
Chris@0 99 assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
Chris@0 100
Chris@0 101 assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
Chris@0 102 assert_not_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
Chris@0 103 assert_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
Chris@0 104 end
Chris@0 105
Chris@0 106 def test_clear_workflow
Chris@0 107 assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
Chris@0 108
Chris@0 109 post :edit, :role_id => 2, :tracker_id => 1
Chris@0 110 assert_equal 0, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
Chris@0 111 end
Chris@0 112
Chris@0 113 def test_get_copy
Chris@0 114 get :copy
Chris@0 115 assert_response :success
Chris@0 116 assert_template 'copy'
Chris@0 117 end
Chris@0 118
Chris@0 119 def test_post_copy_one_to_one
Chris@0 120 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
Chris@0 121
Chris@0 122 post :copy, :source_tracker_id => '1', :source_role_id => '2',
Chris@0 123 :target_tracker_ids => ['3'], :target_role_ids => ['1']
Chris@0 124 assert_response 302
Chris@0 125 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 126 end
Chris@0 127
Chris@0 128 def test_post_copy_one_to_many
Chris@0 129 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
Chris@0 130
Chris@0 131 post :copy, :source_tracker_id => '1', :source_role_id => '2',
Chris@0 132 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
Chris@0 133 assert_response 302
Chris@0 134 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 1)
Chris@0 135 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 136 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 3)
Chris@0 137 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 3)
Chris@0 138 end
Chris@0 139
Chris@0 140 def test_post_copy_many_to_many
Chris@0 141 source_t2 = status_transitions(:tracker_id => 2, :role_id => 2)
Chris@0 142 source_t3 = status_transitions(:tracker_id => 3, :role_id => 2)
Chris@0 143
Chris@0 144 post :copy, :source_tracker_id => 'any', :source_role_id => '2',
Chris@0 145 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
Chris@0 146 assert_response 302
Chris@0 147 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 1)
Chris@0 148 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 149 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 3)
Chris@0 150 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 3)
Chris@0 151 end
Chris@0 152
Chris@0 153 # Returns an array of status transitions that can be compared
Chris@0 154 def status_transitions(conditions)
Chris@0 155 Workflow.find(:all, :conditions => conditions,
Chris@0 156 :order => 'tracker_id, role_id, old_status_id, new_status_id').collect {|w| [w.old_status, w.new_status_id]}
Chris@0 157 end
Chris@0 158 end