annotate test/functional/context_menus_controller_test.rb @ 1480:75fd8eace091 issue_556

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