annotate test/functional/workflows_controller_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@0 1 # Redmine - project management software
Chris@909 2 # Copyright (C) 2006-2011 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@909 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@909 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@119 18 require File.expand_path('../../test_helper', __FILE__)
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@909 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@909 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@909 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@909 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@909 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@909 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@909 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@909 65
Chris@0 66 # allowed transitions
Chris@0 67 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@245 68 :name => 'issue_status[3][5][]',
Chris@245 69 :value => 'always',
Chris@0 70 :checked => 'checked' }
Chris@0 71 # not allowed
Chris@0 72 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@245 73 :name => 'issue_status[3][2][]',
Chris@245 74 :value => 'always',
Chris@0 75 :checked => nil }
Chris@0 76 # unused
Chris@0 77 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@245 78 :name => 'issue_status[1][1][]' }
Chris@0 79 end
Chris@909 80
Chris@0 81 def test_get_edit_with_role_and_tracker_and_all_statuses
Chris@0 82 Workflow.delete_all
Chris@909 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@909 87
Chris@0 88 assert_not_nil assigns(:statuses)
Chris@0 89 assert_equal IssueStatus.count, assigns(:statuses).size
Chris@909 90
Chris@0 91 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@245 92 :name => 'issue_status[1][1][]',
Chris@245 93 :value => 'always',
Chris@0 94 :checked => nil }
Chris@0 95 end
Chris@909 96
Chris@0 97 def test_post_edit
Chris@245 98 post :edit, :role_id => 2, :tracker_id => 1,
Chris@245 99 :issue_status => {
Chris@245 100 '4' => {'5' => ['always']},
Chris@245 101 '3' => {'1' => ['always'], '2' => ['always']}
Chris@245 102 }
Chris@0 103 assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
Chris@909 104
Chris@0 105 assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
Chris@0 106 assert_not_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
Chris@0 107 assert_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
Chris@0 108 end
Chris@909 109
Chris@245 110 def test_post_edit_with_additional_transitions
Chris@245 111 post :edit, :role_id => 2, :tracker_id => 1,
Chris@245 112 :issue_status => {
Chris@245 113 '4' => {'5' => ['always']},
Chris@245 114 '3' => {'1' => ['author'], '2' => ['assignee'], '4' => ['author', 'assignee']}
Chris@245 115 }
Chris@245 116 assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
Chris@909 117
Chris@245 118 assert_equal 4, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
Chris@909 119
Chris@245 120 w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 4, :new_status_id => 5})
Chris@245 121 assert ! w.author
Chris@245 122 assert ! w.assignee
Chris@245 123 w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 1})
Chris@245 124 assert w.author
Chris@245 125 assert ! w.assignee
Chris@245 126 w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
Chris@245 127 assert ! w.author
Chris@245 128 assert w.assignee
Chris@245 129 w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 4})
Chris@245 130 assert w.author
Chris@245 131 assert w.assignee
Chris@245 132 end
Chris@909 133
Chris@0 134 def test_clear_workflow
Chris@0 135 assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
Chris@0 136
Chris@0 137 post :edit, :role_id => 2, :tracker_id => 1
Chris@0 138 assert_equal 0, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
Chris@0 139 end
Chris@909 140
Chris@0 141 def test_get_copy
Chris@0 142 get :copy
Chris@0 143 assert_response :success
Chris@0 144 assert_template 'copy'
Chris@0 145 end
Chris@909 146
Chris@0 147 def test_post_copy_one_to_one
Chris@0 148 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
Chris@909 149
Chris@0 150 post :copy, :source_tracker_id => '1', :source_role_id => '2',
Chris@0 151 :target_tracker_ids => ['3'], :target_role_ids => ['1']
Chris@0 152 assert_response 302
Chris@0 153 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 154 end
Chris@909 155
Chris@0 156 def test_post_copy_one_to_many
Chris@0 157 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
Chris@909 158
Chris@0 159 post :copy, :source_tracker_id => '1', :source_role_id => '2',
Chris@0 160 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
Chris@0 161 assert_response 302
Chris@0 162 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 1)
Chris@0 163 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 164 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 3)
Chris@0 165 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 3)
Chris@0 166 end
Chris@909 167
Chris@0 168 def test_post_copy_many_to_many
Chris@0 169 source_t2 = status_transitions(:tracker_id => 2, :role_id => 2)
Chris@0 170 source_t3 = status_transitions(:tracker_id => 3, :role_id => 2)
Chris@909 171
Chris@0 172 post :copy, :source_tracker_id => 'any', :source_role_id => '2',
Chris@0 173 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
Chris@0 174 assert_response 302
Chris@0 175 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 1)
Chris@0 176 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 1)
Chris@0 177 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 3)
Chris@0 178 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 3)
Chris@0 179 end
Chris@909 180
Chris@0 181 # Returns an array of status transitions that can be compared
Chris@0 182 def status_transitions(conditions)
Chris@0 183 Workflow.find(:all, :conditions => conditions,
Chris@0 184 :order => 'tracker_id, role_id, old_status_id, new_status_id').collect {|w| [w.old_status, w.new_status_id]}
Chris@0 185 end
Chris@0 186 end