annotate .svn/pristine/dd/ddb1e7765908d6669ef044e05cf9c200a2438849.svn-base @ 1298:4f746d8966dd redmine_2.3_integration

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