OSDN Git Service

add Redmine trunk rev 3089
[redminele/redminele.git] / redmine / test / functional / queries_controller_test.rb
1 # redMine - project management software
2 # Copyright (C) 2006-2008  Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13
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
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17
18 require File.dirname(__FILE__) + '/../test_helper'
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
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
26   
27   def setup
28     @controller = QueriesController.new
29     @request    = ActionController::TestRequest.new
30     @response   = ActionController::TestResponse.new
31     User.current = nil
32   end
33   
34   def test_get_new_project_query
35     @request.session[:user_id] = 2
36     get :new, :project_id => 1
37     assert_response :success
38     assert_template 'new'
39     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
40                                                  :name => 'query[is_public]',
41                                                  :checked => nil } 
42     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
43                                                  :name => 'query_is_for_all',
44                                                  :checked => nil,
45                                                  :disabled => nil }
46   end
47   
48   def test_get_new_global_query
49     @request.session[:user_id] = 2
50     get :new
51     assert_response :success
52     assert_template 'new'
53     assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
54                                                     :name => 'query[is_public]' } 
55     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
56                                                  :name => 'query_is_for_all',
57                                                  :checked => 'checked',
58                                                  :disabled => nil }
59   end
60   
61   def test_new_project_public_query
62     @request.session[:user_id] = 2
63     post :new,
64          :project_id => 'ecookbook', 
65          :confirm => '1',
66          :default_columns => '1',
67          :fields => ["status_id", "assigned_to_id"],
68          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
69          :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
70          :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
71          
72     q = Query.find_by_name('test_new_project_public_query')
73     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
74     assert q.is_public?
75     assert q.has_default_columns?
76     assert q.valid?
77   end
78   
79   def test_new_project_private_query
80     @request.session[:user_id] = 3
81     post :new,
82          :project_id => 'ecookbook', 
83          :confirm => '1',
84          :default_columns => '1',
85          :fields => ["status_id", "assigned_to_id"],
86          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
87          :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
88          :query => {"name" => "test_new_project_private_query", "is_public" => "1"}
89          
90     q = Query.find_by_name('test_new_project_private_query')
91     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
92     assert !q.is_public?
93     assert q.has_default_columns?
94     assert q.valid?
95   end
96   
97   def test_new_global_private_query_with_custom_columns
98     @request.session[:user_id] = 3
99     post :new,
100          :confirm => '1',
101          :fields => ["status_id", "assigned_to_id"],
102          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
103          :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
104          :query => {"name" => "test_new_global_private_query", "is_public" => "1", "column_names" => ["", "tracker", "subject", "priority", "category"]}
105          
106     q = Query.find_by_name('test_new_global_private_query')
107     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
108     assert !q.is_public?
109     assert !q.has_default_columns?
110     assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name}
111     assert q.valid?
112   end
113   
114   def test_new_with_sort
115     @request.session[:user_id] = 1
116     post :new,
117          :confirm => '1',
118          :default_columns => '1',
119          :operators => {"status_id" => "o"},
120          :values => {"status_id" => ["1"]},
121          :query => {:name => "test_new_with_sort",
122                     :is_public => "1", 
123                     :sort_criteria => {"0" => ["due_date", "desc"], "1" => ["tracker", ""]}}
124     
125     query = Query.find_by_name("test_new_with_sort")
126     assert_not_nil query
127     assert_equal [['due_date', 'desc'], ['tracker', 'asc']], query.sort_criteria
128   end
129   
130   def test_get_edit_global_public_query
131     @request.session[:user_id] = 1
132     get :edit, :id => 4
133     assert_response :success
134     assert_template 'edit'
135     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
136                                                  :name => 'query[is_public]',
137                                                  :checked => 'checked' } 
138     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
139                                                  :name => 'query_is_for_all',
140                                                  :checked => 'checked',
141                                                  :disabled => 'disabled' }
142   end
143
144   def test_edit_global_public_query
145     @request.session[:user_id] = 1
146     post :edit,
147          :id => 4, 
148          :confirm => '1',
149          :default_columns => '1',
150          :fields => ["status_id", "assigned_to_id"],
151          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
152          :values => { "assigned_to_id" => ["1"], "status_id" => ["1"]},
153          :query => {"name" => "test_edit_global_public_query", "is_public" => "1"}
154          
155     assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 4
156     q = Query.find_by_name('test_edit_global_public_query')
157     assert q.is_public?
158     assert q.has_default_columns?
159     assert q.valid?
160   end
161   
162   def test_get_edit_global_private_query
163     @request.session[:user_id] = 3
164     get :edit, :id => 3
165     assert_response :success
166     assert_template 'edit'
167     assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
168                                                     :name => 'query[is_public]' } 
169     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
170                                                  :name => 'query_is_for_all',
171                                                  :checked => 'checked',
172                                                  :disabled => 'disabled' }
173   end
174   
175   def test_edit_global_private_query
176     @request.session[:user_id] = 3
177     post :edit,
178          :id => 3, 
179          :confirm => '1',
180          :default_columns => '1',
181          :fields => ["status_id", "assigned_to_id"],
182          :operators => {"assigned_to_id" => "=", "status_id" => "o"},
183          :values => { "assigned_to_id" => ["me"], "status_id" => ["1"]},
184          :query => {"name" => "test_edit_global_private_query", "is_public" => "1"}
185          
186     assert_redirected_to :controller => 'issues', :action => 'index', :query_id => 3
187     q = Query.find_by_name('test_edit_global_private_query')
188     assert !q.is_public?
189     assert q.has_default_columns?
190     assert q.valid?
191   end
192   
193   def test_get_edit_project_private_query
194     @request.session[:user_id] = 3
195     get :edit, :id => 2
196     assert_response :success
197     assert_template 'edit'
198     assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
199                                                     :name => 'query[is_public]' } 
200     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
201                                                  :name => 'query_is_for_all',
202                                                  :checked => nil,
203                                                  :disabled => nil }
204   end
205   
206   def test_get_edit_project_public_query
207     @request.session[:user_id] = 2
208     get :edit, :id => 1
209     assert_response :success
210     assert_template 'edit'
211     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
212                                                  :name => 'query[is_public]',
213                                                  :checked => 'checked'
214                                                   } 
215     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
216                                                  :name => 'query_is_for_all',
217                                                  :checked => nil,
218                                                  :disabled => 'disabled' }
219   end
220   
221   def test_get_edit_sort_criteria
222     @request.session[:user_id] = 1
223     get :edit, :id => 5
224     assert_response :success
225     assert_template 'edit'
226     assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' },
227                                  :child => { :tag => 'option', :attributes => { :value => 'priority',
228                                                                                 :selected => 'selected' } }
229     assert_tag :tag => 'select', :attributes => { :name => 'query[sort_criteria][0][]' },
230                                  :child => { :tag => 'option', :attributes => { :value => 'desc',
231                                                                                 :selected => 'selected' } }
232   end
233   
234   def test_destroy
235     @request.session[:user_id] = 2
236     post :destroy, :id => 1
237     assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :set_filter => 1, :query_id => nil
238     assert_nil Query.find_by_id(1)
239   end
240 end