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