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