annotate test/functional/queries_controller_test.rb @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents 433d4f72a19b
children 622f24f53b42 261b3d9a4903
rev   line source
Chris@909 1 # Redmine - project management software
Chris@1115 2 # Copyright (C) 2006-2012 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
Chris@0 20 class QueriesControllerTest < ActionController::TestCase
Chris@1115 21 fixtures :projects, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries, :enabled_modules
Chris@909 22
Chris@0 23 def setup
Chris@0 24 User.current = nil
Chris@0 25 end
Chris@909 26
Chris@1115 27 def test_new_project_query
Chris@0 28 @request.session[:user_id] = 2
Chris@0 29 get :new, :project_id => 1
Chris@0 30 assert_response :success
Chris@0 31 assert_template 'new'
Chris@0 32 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 33 :name => 'query[is_public]',
Chris@909 34 :checked => nil }
Chris@0 35 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 36 :name => 'query_is_for_all',
Chris@0 37 :checked => nil,
Chris@0 38 :disabled => nil }
Chris@1115 39 assert_select 'select[name=?]', 'c[]' do
Chris@1115 40 assert_select 'option[value=tracker]'
Chris@1115 41 assert_select 'option[value=subject]'
Chris@1115 42 end
Chris@0 43 end
Chris@909 44
Chris@1115 45 def test_new_global_query
Chris@0 46 @request.session[:user_id] = 2
Chris@0 47 get :new
Chris@0 48 assert_response :success
Chris@0 49 assert_template 'new'
Chris@0 50 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@909 51 :name => 'query[is_public]' }
Chris@0 52 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 53 :name => 'query_is_for_all',
Chris@0 54 :checked => 'checked',
Chris@0 55 :disabled => nil }
Chris@0 56 end
Chris@909 57
Chris@1115 58 def test_new_on_invalid_project
Chris@1115 59 @request.session[:user_id] = 2
Chris@1115 60 get :new, :project_id => 'invalid'
Chris@1115 61 assert_response 404
Chris@1115 62 end
Chris@1115 63
Chris@1115 64 def test_create_project_public_query
Chris@0 65 @request.session[:user_id] = 2
Chris@909 66 post :create,
Chris@909 67 :project_id => 'ecookbook',
Chris@0 68 :default_columns => '1',
Chris@441 69 :f => ["status_id", "assigned_to_id"],
Chris@441 70 :op => {"assigned_to_id" => "=", "status_id" => "o"},
Chris@441 71 :v => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
Chris@0 72 :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
Chris@909 73
Chris@0 74 q = Query.find_by_name('test_new_project_public_query')
Chris@0 75 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
Chris@0 76 assert q.is_public?
Chris@0 77 assert q.has_default_columns?
Chris@0 78 assert q.valid?
Chris@0 79 end
Chris@909 80
Chris@1115 81 def test_create_project_private_query
Chris@0 82 @request.session[:user_id] = 3
Chris@909 83 post :create,
Chris@909 84 :project_id => 'ecookbook',
Chris@0 85 :default_columns => '1',
Chris@0 86 :fields => ["status_id", "assigned_to_id"],
Chris@0 87 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
Chris@0 88 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
Chris@0 89 :query => {"name" => "test_new_project_private_query", "is_public" => "1"}
Chris@909 90
Chris@0 91 q = Query.find_by_name('test_new_project_private_query')
Chris@0 92 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
Chris@0 93 assert !q.is_public?
Chris@0 94 assert q.has_default_columns?
Chris@0 95 assert q.valid?
Chris@0 96 end
Chris@909 97
Chris@1115 98 def test_create_global_private_query_with_custom_columns
Chris@0 99 @request.session[:user_id] = 3
Chris@909 100 post :create,
Chris@0 101 :fields => ["status_id", "assigned_to_id"],
Chris@0 102 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
Chris@0 103 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
Chris@441 104 :query => {"name" => "test_new_global_private_query", "is_public" => "1"},
Chris@441 105 :c => ["", "tracker", "subject", "priority", "category"]
Chris@909 106
Chris@0 107 q = Query.find_by_name('test_new_global_private_query')
Chris@0 108 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
Chris@0 109 assert !q.is_public?
Chris@0 110 assert !q.has_default_columns?
Chris@0 111 assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name}
Chris@0 112 assert q.valid?
Chris@0 113 end
Chris@909 114
Chris@1115 115 def test_create_global_query_with_custom_filters
Chris@909 116 @request.session[:user_id] = 3
Chris@909 117 post :create,
Chris@909 118 :fields => ["assigned_to_id"],
Chris@909 119 :operators => {"assigned_to_id" => "="},
Chris@909 120 :values => { "assigned_to_id" => ["me"]},
Chris@909 121 :query => {"name" => "test_new_global_query"}
Chris@909 122
Chris@909 123 q = Query.find_by_name('test_new_global_query')
Chris@909 124 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
Chris@909 125 assert !q.has_filter?(:status_id)
Chris@909 126 assert_equal ['assigned_to_id'], q.filters.keys
Chris@909 127 assert q.valid?
Chris@909 128 end
Chris@909 129
Chris@1115 130 def test_create_with_sort
Chris@0 131 @request.session[:user_id] = 1
Chris@909 132 post :create,
Chris@0 133 :default_columns => '1',
Chris@0 134 :operators => {"status_id" => "o"},
Chris@0 135 :values => {"status_id" => ["1"]},
Chris@0 136 :query => {:name => "test_new_with_sort",
Chris@909 137 :is_public => "1",
Chris@0 138 :sort_criteria => {"0" => ["due_date", "desc"], "1" => ["tracker", ""]}}
Chris@909 139
Chris@0 140 query = Query.find_by_name("test_new_with_sort")
Chris@0 141 assert_not_nil query
Chris@0 142 assert_equal [['due_date', 'desc'], ['tracker', 'asc']], query.sort_criteria
Chris@0 143 end
Chris@909 144
Chris@1115 145 def test_create_with_failure
Chris@1115 146 @request.session[:user_id] = 2
Chris@1115 147 assert_no_difference '::Query.count' do
Chris@1115 148 post :create, :project_id => 'ecookbook', :query => {:name => ''}
Chris@1115 149 end
Chris@1115 150 assert_response :success
Chris@1115 151 assert_template 'new'
Chris@1115 152 assert_select 'input[name=?]', 'query[name]'
Chris@1115 153 end
Chris@1115 154
Chris@1115 155 def test_edit_global_public_query
Chris@0 156 @request.session[:user_id] = 1
Chris@0 157 get :edit, :id => 4
Chris@0 158 assert_response :success
Chris@0 159 assert_template 'edit'
Chris@0 160 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 161 :name => 'query[is_public]',
Chris@909 162 :checked => 'checked' }
Chris@0 163 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@0 164 :name => 'query_is_for_all',
Chris@0 165 :checked => 'checked',
Chris@0 166 :disabled => 'disabled' }
Chris@0 167 end
Chris@0 168
Chris@1115 169 def test_edit_global_private_query
Chris@1115 170 @request.session[:user_id] = 3
Chris@1115 171 get :edit, :id => 3
Chris@1115 172 assert_response :success
Chris@1115 173 assert_template 'edit'
Chris@1115 174 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 175 :name => 'query[is_public]' }
Chris@1115 176 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 177 :name => 'query_is_for_all',
Chris@1115 178 :checked => 'checked',
Chris@1115 179 :disabled => 'disabled' }
Chris@1115 180 end
Chris@1115 181
Chris@1115 182 def test_edit_project_private_query
Chris@1115 183 @request.session[:user_id] = 3
Chris@1115 184 get :edit, :id => 2
Chris@1115 185 assert_response :success
Chris@1115 186 assert_template 'edit'
Chris@1115 187 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 188 :name => 'query[is_public]' }
Chris@1115 189 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 190 :name => 'query_is_for_all',
Chris@1115 191 :checked => nil,
Chris@1115 192 :disabled => nil }
Chris@1115 193 end
Chris@1115 194
Chris@1115 195 def test_edit_project_public_query
Chris@1115 196 @request.session[:user_id] = 2
Chris@1115 197 get :edit, :id => 1
Chris@1115 198 assert_response :success
Chris@1115 199 assert_template 'edit'
Chris@1115 200 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 201 :name => 'query[is_public]',
Chris@1115 202 :checked => 'checked'
Chris@1115 203 }
Chris@1115 204 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
Chris@1115 205 :name => 'query_is_for_all',
Chris@1115 206 :checked => nil,
Chris@1115 207 :disabled => 'disabled' }
Chris@1115 208 end
Chris@1115 209
Chris@1115 210 def test_edit_sort_criteria
Chris@1115 211 @request.session[:user_id] = 1
Chris@1115 212 get :edit, :id => 5
Chris@1115 213 assert_response :success
Chris@1115 214 assert_template 'edit'
Chris@1115 215 assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' },
Chris@1115 216 :child => { :tag => 'option', :attributes => { :value => 'priority',
Chris@1115 217 :selected => 'selected' } }
Chris@1115 218 assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' },
Chris@1115 219 :child => { :tag => 'option', :attributes => { :value => 'desc',
Chris@1115 220 :selected => 'selected' } }
Chris@1115 221 end
Chris@1115 222
Chris@1115 223 def test_edit_invalid_query
Chris@1115 224 @request.session[:user_id] = 2
Chris@1115 225 get :edit, :id => 99
Chris@1115 226 assert_response 404
Chris@1115 227 end
Chris@1115 228
Chris@1115 229 def test_udpate_global_private_query
Chris@1115 230 @request.session[:user_id] = 3
Chris@1115 231 put :update,
Chris@1115 232 :id => 3,
Chris@1115 233 :default_columns => '1',
Chris@1115 234 :fields => ["status_id", "assigned_to_id"],
Chris@1115 235 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
Chris@1115 236 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
Chris@1115 237 :query => {"name" => "test_edit_global_private_query", "is_public" => "1"}
Chris@1115 238
Chris@1115 239 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 3
Chris@1115 240 q = Query.find_by_name('test_edit_global_private_query')
Chris@1115 241 assert !q.is_public?
Chris@1115 242 assert q.has_default_columns?
Chris@1115 243 assert q.valid?
Chris@1115 244 end
Chris@1115 245
Chris@1115 246 def test_update_global_public_query
Chris@0 247 @request.session[:user_id] = 1
Chris@909 248 put :update,
Chris@909 249 :id => 4,
Chris@0 250 :default_columns => '1',
Chris@0 251 :fields => ["status_id", "assigned_to_id"],
Chris@0 252 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
Chris@0 253 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
Chris@0 254 :query => {"name" => "test_edit_global_public_query", "is_public" => "1"}
Chris@909 255
Chris@0 256 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 4
Chris@0 257 q = Query.find_by_name('test_edit_global_public_query')
Chris@0 258 assert q.is_public?
Chris@0 259 assert q.has_default_columns?
Chris@0 260 assert q.valid?
Chris@0 261 end
Chris@909 262
Chris@1115 263 def test_update_with_failure
Chris@1115 264 @request.session[:user_id] = 1
Chris@1115 265 put :update, :id => 4, :query => {:name => ''}
Chris@0 266 assert_response :success
Chris@0 267 assert_template 'edit'
Chris@0 268 end
Chris@909 269
Chris@0 270 def test_destroy
Chris@0 271 @request.session[:user_id] = 2
Chris@909 272 delete :destroy, :id => 1
Chris@0 273 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :set_filter => 1, :query_id => nil
Chris@0 274 assert_nil Query.find_by_id(1)
Chris@0 275 end
Chris@1115 276
Chris@1115 277 def test_backslash_should_be_escaped_in_filters
Chris@1115 278 @request.session[:user_id] = 2
Chris@1115 279 get :new, :subject => 'foo/bar'
Chris@1115 280 assert_response :success
Chris@1115 281 assert_template 'new'
Chris@1115 282 assert_include 'addFilter("subject", "=", ["foo\/bar"]);', response.body
Chris@1115 283 end
Chris@0 284 end