comparison test/functional/queries_controller_test.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents cbce1fd3b1b7
children 433d4f72a19b
comparison
equal deleted inserted replaced
908:c6c2cbd0afee 909:cbb26bc654de
1 # redMine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 # 3 #
4 # This program is free software; you can redistribute it and/or 4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License 5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2 6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version. 7 # of the License, or (at your option) any later version.
8 # 8 #
9 # This program is distributed in the hope that it will be useful, 9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details. 12 # GNU General Public License for more details.
13 # 13 #
14 # You should have received a copy of the GNU General Public License 14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software 15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 require File.expand_path('../../test_helper', __FILE__) 18 require File.expand_path('../../test_helper', __FILE__)
21 # Re-raise errors caught by the controller. 21 # Re-raise errors caught by the controller.
22 class QueriesController; def rescue_action(e) raise e end; end 22 class QueriesController; def rescue_action(e) raise e end; end
23 23
24 class QueriesControllerTest < ActionController::TestCase 24 class QueriesControllerTest < ActionController::TestCase
25 fixtures :projects, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries 25 fixtures :projects, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries
26 26
27 def setup 27 def setup
28 @controller = QueriesController.new 28 @controller = QueriesController.new
29 @request = ActionController::TestRequest.new 29 @request = ActionController::TestRequest.new
30 @response = ActionController::TestResponse.new 30 @response = ActionController::TestResponse.new
31 User.current = nil 31 User.current = nil
32 end 32 end
33 33
34 def test_get_new_project_query 34 def test_get_new_project_query
35 @request.session[:user_id] = 2 35 @request.session[:user_id] = 2
36 get :new, :project_id => 1 36 get :new, :project_id => 1
37 assert_response :success 37 assert_response :success
38 assert_template 'new' 38 assert_template 'new'
39 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 39 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
40 :name => 'query[is_public]', 40 :name => 'query[is_public]',
41 :checked => nil } 41 :checked => nil }
42 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 42 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
43 :name => 'query_is_for_all', 43 :name => 'query_is_for_all',
44 :checked => nil, 44 :checked => nil,
45 :disabled => nil } 45 :disabled => nil }
46 end 46 end
47 47
48 def test_get_new_global_query 48 def test_get_new_global_query
49 @request.session[:user_id] = 2 49 @request.session[:user_id] = 2
50 get :new 50 get :new
51 assert_response :success 51 assert_response :success
52 assert_template 'new' 52 assert_template 'new'
53 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox', 53 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
54 :name => 'query[is_public]' } 54 :name => 'query[is_public]' }
55 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 55 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
56 :name => 'query_is_for_all', 56 :name => 'query_is_for_all',
57 :checked => 'checked', 57 :checked => 'checked',
58 :disabled => nil } 58 :disabled => nil }
59 end 59 end
60 60
61 def test_new_project_public_query 61 def test_new_project_public_query
62 @request.session[:user_id] = 2 62 @request.session[:user_id] = 2
63 post :new, 63 post :create,
64 :project_id => 'ecookbook', 64 :project_id => 'ecookbook',
65 :confirm => '1',
66 :default_columns => '1', 65 :default_columns => '1',
67 :f => ["status_id", "assigned_to_id"], 66 :f => ["status_id", "assigned_to_id"],
68 :op => {"assigned_to_id" => "=", "status_id" => "o"}, 67 :op => {"assigned_to_id" => "=", "status_id" => "o"},
69 :v => { "assigned_to_id" => ["1"], "status_id" => ["1"]}, 68 :v => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
70 :query => {"name" => "test_new_project_public_query", "is_public" => "1"} 69 :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
71 70
72 q = Query.find_by_name('test_new_project_public_query') 71 q = Query.find_by_name('test_new_project_public_query')
73 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q 72 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
74 assert q.is_public? 73 assert q.is_public?
75 assert q.has_default_columns? 74 assert q.has_default_columns?
76 assert q.valid? 75 assert q.valid?
77 end 76 end
78 77
79 def test_new_project_private_query 78 def test_new_project_private_query
80 @request.session[:user_id] = 3 79 @request.session[:user_id] = 3
81 post :new, 80 post :create,
82 :project_id => 'ecookbook', 81 :project_id => 'ecookbook',
83 :confirm => '1',
84 :default_columns => '1', 82 :default_columns => '1',
85 :fields => ["status_id", "assigned_to_id"], 83 :fields => ["status_id", "assigned_to_id"],
86 :operators => {"assigned_to_id" => "=", "status_id" => "o"}, 84 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
87 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]}, 85 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
88 :query => {"name" => "test_new_project_private_query", "is_public" => "1"} 86 :query => {"name" => "test_new_project_private_query", "is_public" => "1"}
89 87
90 q = Query.find_by_name('test_new_project_private_query') 88 q = Query.find_by_name('test_new_project_private_query')
91 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q 89 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
92 assert !q.is_public? 90 assert !q.is_public?
93 assert q.has_default_columns? 91 assert q.has_default_columns?
94 assert q.valid? 92 assert q.valid?
95 end 93 end
96 94
97 def test_new_global_private_query_with_custom_columns 95 def test_new_global_private_query_with_custom_columns
98 @request.session[:user_id] = 3 96 @request.session[:user_id] = 3
99 post :new, 97 post :create,
100 :confirm => '1',
101 :fields => ["status_id", "assigned_to_id"], 98 :fields => ["status_id", "assigned_to_id"],
102 :operators => {"assigned_to_id" => "=", "status_id" => "o"}, 99 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
103 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]}, 100 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
104 :query => {"name" => "test_new_global_private_query", "is_public" => "1"}, 101 :query => {"name" => "test_new_global_private_query", "is_public" => "1"},
105 :c => ["", "tracker", "subject", "priority", "category"] 102 :c => ["", "tracker", "subject", "priority", "category"]
106 103
107 q = Query.find_by_name('test_new_global_private_query') 104 q = Query.find_by_name('test_new_global_private_query')
108 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q 105 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
109 assert !q.is_public? 106 assert !q.is_public?
110 assert !q.has_default_columns? 107 assert !q.has_default_columns?
111 assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name} 108 assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name}
112 assert q.valid? 109 assert q.valid?
113 end 110 end
114 111
112 def test_new_global_query_with_custom_filters
113 @request.session[:user_id] = 3
114 post :create,
115 :fields => ["assigned_to_id"],
116 :operators => {"assigned_to_id" => "="},
117 :values => { "assigned_to_id" => ["me"]},
118 :query => {"name" => "test_new_global_query"}
119
120 q = Query.find_by_name('test_new_global_query')
121 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
122 assert !q.has_filter?(:status_id)
123 assert_equal ['assigned_to_id'], q.filters.keys
124 assert q.valid?
125 end
126
115 def test_new_with_sort 127 def test_new_with_sort
116 @request.session[:user_id] = 1 128 @request.session[:user_id] = 1
117 post :new, 129 post :create,
118 :confirm => '1',
119 :default_columns => '1', 130 :default_columns => '1',
120 :operators => {"status_id" => "o"}, 131 :operators => {"status_id" => "o"},
121 :values => {"status_id" => ["1"]}, 132 :values => {"status_id" => ["1"]},
122 :query => {:name => "test_new_with_sort", 133 :query => {:name => "test_new_with_sort",
123 :is_public => "1", 134 :is_public => "1",
124 :sort_criteria => {"0" => ["due_date", "desc"], "1" => ["tracker", ""]}} 135 :sort_criteria => {"0" => ["due_date", "desc"], "1" => ["tracker", ""]}}
125 136
126 query = Query.find_by_name("test_new_with_sort") 137 query = Query.find_by_name("test_new_with_sort")
127 assert_not_nil query 138 assert_not_nil query
128 assert_equal [['due_date', 'desc'], ['tracker', 'asc']], query.sort_criteria 139 assert_equal [['due_date', 'desc'], ['tracker', 'asc']], query.sort_criteria
129 end 140 end
130 141
131 def test_get_edit_global_public_query 142 def test_get_edit_global_public_query
132 @request.session[:user_id] = 1 143 @request.session[:user_id] = 1
133 get :edit, :id => 4 144 get :edit, :id => 4
134 assert_response :success 145 assert_response :success
135 assert_template 'edit' 146 assert_template 'edit'
136 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 147 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
137 :name => 'query[is_public]', 148 :name => 'query[is_public]',
138 :checked => 'checked' } 149 :checked => 'checked' }
139 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 150 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
140 :name => 'query_is_for_all', 151 :name => 'query_is_for_all',
141 :checked => 'checked', 152 :checked => 'checked',
142 :disabled => 'disabled' } 153 :disabled => 'disabled' }
143 end 154 end
144 155
145 def test_edit_global_public_query 156 def test_edit_global_public_query
146 @request.session[:user_id] = 1 157 @request.session[:user_id] = 1
147 post :edit, 158 put :update,
148 :id => 4, 159 :id => 4,
149 :confirm => '1',
150 :default_columns => '1', 160 :default_columns => '1',
151 :fields => ["status_id", "assigned_to_id"], 161 :fields => ["status_id", "assigned_to_id"],
152 :operators => {"assigned_to_id" => "=", "status_id" => "o"}, 162 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
153 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]}, 163 :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
154 :query => {"name" => "test_edit_global_public_query", "is_public" => "1"} 164 :query => {"name" => "test_edit_global_public_query", "is_public" => "1"}
155 165
156 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 4 166 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 4
157 q = Query.find_by_name('test_edit_global_public_query') 167 q = Query.find_by_name('test_edit_global_public_query')
158 assert q.is_public? 168 assert q.is_public?
159 assert q.has_default_columns? 169 assert q.has_default_columns?
160 assert q.valid? 170 assert q.valid?
161 end 171 end
162 172
163 def test_get_edit_global_private_query 173 def test_get_edit_global_private_query
164 @request.session[:user_id] = 3 174 @request.session[:user_id] = 3
165 get :edit, :id => 3 175 get :edit, :id => 3
166 assert_response :success 176 assert_response :success
167 assert_template 'edit' 177 assert_template 'edit'
168 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox', 178 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
169 :name => 'query[is_public]' } 179 :name => 'query[is_public]' }
170 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 180 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
171 :name => 'query_is_for_all', 181 :name => 'query_is_for_all',
172 :checked => 'checked', 182 :checked => 'checked',
173 :disabled => 'disabled' } 183 :disabled => 'disabled' }
174 end 184 end
175 185
176 def test_edit_global_private_query 186 def test_edit_global_private_query
177 @request.session[:user_id] = 3 187 @request.session[:user_id] = 3
178 post :edit, 188 put :update,
179 :id => 3, 189 :id => 3,
180 :confirm => '1',
181 :default_columns => '1', 190 :default_columns => '1',
182 :fields => ["status_id", "assigned_to_id"], 191 :fields => ["status_id", "assigned_to_id"],
183 :operators => {"assigned_to_id" => "=", "status_id" => "o"}, 192 :operators => {"assigned_to_id" => "=", "status_id" => "o"},
184 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]}, 193 :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
185 :query => {"name" => "test_edit_global_private_query", "is_public" => "1"} 194 :query => {"name" => "test_edit_global_private_query", "is_public" => "1"}
186 195
187 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 3 196 assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 3
188 q = Query.find_by_name('test_edit_global_private_query') 197 q = Query.find_by_name('test_edit_global_private_query')
189 assert !q.is_public? 198 assert !q.is_public?
190 assert q.has_default_columns? 199 assert q.has_default_columns?
191 assert q.valid? 200 assert q.valid?
192 end 201 end
193 202
194 def test_get_edit_project_private_query 203 def test_get_edit_project_private_query
195 @request.session[:user_id] = 3 204 @request.session[:user_id] = 3
196 get :edit, :id => 2 205 get :edit, :id => 2
197 assert_response :success 206 assert_response :success
198 assert_template 'edit' 207 assert_template 'edit'
199 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox', 208 assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
200 :name => 'query[is_public]' } 209 :name => 'query[is_public]' }
201 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 210 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
202 :name => 'query_is_for_all', 211 :name => 'query_is_for_all',
203 :checked => nil, 212 :checked => nil,
204 :disabled => nil } 213 :disabled => nil }
205 end 214 end
206 215
207 def test_get_edit_project_public_query 216 def test_get_edit_project_public_query
208 @request.session[:user_id] = 2 217 @request.session[:user_id] = 2
209 get :edit, :id => 1 218 get :edit, :id => 1
210 assert_response :success 219 assert_response :success
211 assert_template 'edit' 220 assert_template 'edit'
212 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 221 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
213 :name => 'query[is_public]', 222 :name => 'query[is_public]',
214 :checked => 'checked' 223 :checked => 'checked'
215 } 224 }
216 assert_tag :tag => 'input', :attributes => { :type => 'checkbox', 225 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
217 :name => 'query_is_for_all', 226 :name => 'query_is_for_all',
218 :checked => nil, 227 :checked => nil,
219 :disabled => 'disabled' } 228 :disabled => 'disabled' }
220 end 229 end
221 230
222 def test_get_edit_sort_criteria 231 def test_get_edit_sort_criteria
223 @request.session[:user_id] = 1 232 @request.session[:user_id] = 1
224 get :edit, :id => 5 233 get :edit, :id => 5
225 assert_response :success 234 assert_response :success
226 assert_template 'edit' 235 assert_template 'edit'
229 :selected => 'selected' } } 238 :selected => 'selected' } }
230 assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' }, 239 assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' },
231 :child => { :tag => 'option', :attributes => { :value => 'desc', 240 :child => { :tag => 'option', :attributes => { :value => 'desc',
232 :selected => 'selected' } } 241 :selected => 'selected' } }
233 end 242 end
234 243
235 def test_destroy 244 def test_destroy
236 @request.session[:user_id] = 2 245 @request.session[:user_id] = 2
237 post :destroy, :id => 1 246 delete :destroy, :id => 1
238 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :set_filter => 1, :query_id => nil 247 assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :set_filter => 1, :query_id => nil
239 assert_nil Query.find_by_id(1) 248 assert_nil Query.find_by_id(1)
240 end 249 end
241 end 250 end