OSDN Git Service

877095dfb643835a3c4488a940eedb30b8e06709
[redminele/redminele.git] / redmine / test / functional / my_controller_test.rb
1 # redMine - project management software
2 # Copyright (C) 2006-2007  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 'my_controller'
20
21 # Re-raise errors caught by the controller.
22 class MyController; def rescue_action(e) raise e end; end
23
24 class MyControllerTest < ActionController::TestCase
25   fixtures :users, :user_preferences, :roles, :projects, :issues, :issue_statuses, :trackers, :enumerations, :custom_fields
26   
27   def setup
28     @controller = MyController.new
29     @request    = ActionController::TestRequest.new
30     @request.session[:user_id] = 2
31     @response   = ActionController::TestResponse.new
32   end
33
34   def test_index
35     get :index
36     assert_response :success
37     assert_template 'page'
38   end
39   
40   def test_page
41     get :page
42     assert_response :success
43     assert_template 'page'
44   end
45   
46   def test_my_account_should_show_editable_custom_fields
47     get :account
48     assert_response :success
49     assert_template 'account'
50     assert_equal User.find(2), assigns(:user)
51     
52     assert_tag :input, :attributes => { :name => 'user[custom_field_values][4]'}
53   end
54   
55   def test_my_account_should_not_show_non_editable_custom_fields
56     UserCustomField.find(4).update_attribute :editable, false
57     
58     get :account
59     assert_response :success
60     assert_template 'account'
61     assert_equal User.find(2), assigns(:user)
62     
63     assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'}
64   end
65
66   def test_update_account
67     post :account, :user => {:firstname => "Joe",
68                              :login => "root",
69                              :admin => 1,
70                              :custom_field_values => {"4" => "0100562500"}}
71     assert_redirected_to 'my/account'
72     user = User.find(2)
73     assert_equal user, assigns(:user)
74     assert_equal "Joe", user.firstname
75     assert_equal "jsmith", user.login
76     assert_equal "0100562500", user.custom_value_for(4).value
77     assert !user.admin?
78   end
79   
80   def test_change_password
81     get :password
82     assert_response :success
83     assert_template 'password'
84     
85     # non matching password confirmation
86     post :password, :password => 'jsmith', 
87                     :new_password => 'hello',
88                     :new_password_confirmation => 'hello2'
89     assert_response :success
90     assert_template 'password'
91     assert_tag :tag => "div", :attributes => { :class => "errorExplanation" }
92     
93     # wrong password
94     post :password, :password => 'wrongpassword', 
95                     :new_password => 'hello',
96                     :new_password_confirmation => 'hello'
97     assert_response :success
98     assert_template 'password'
99     assert_equal 'Wrong password', flash[:error]
100     
101     # good password
102     post :password, :password => 'jsmith',
103                     :new_password => 'hello',
104                     :new_password_confirmation => 'hello'
105     assert_redirected_to 'my/account'
106     assert User.try_to_login('jsmith', 'hello')
107   end
108   
109   def test_page_layout
110     get :page_layout
111     assert_response :success
112     assert_template 'page_layout'
113   end
114   
115   def test_add_block
116     xhr :post, :add_block, :block => 'issuesreportedbyme'
117     assert_response :success
118     assert User.find(2).pref[:my_page_layout]['top'].include?('issuesreportedbyme')
119   end
120
121   def test_remove_block
122     xhr :post, :remove_block, :block => 'issuesassignedtome'
123     assert_response :success
124     assert !User.find(2).pref[:my_page_layout].values.flatten.include?('issuesassignedtome')
125   end
126
127   def test_order_blocks
128     xhr :post, :order_blocks, :group => 'left', 'list-left' => ['documents', 'calendar', 'latestnews']
129     assert_response :success
130     assert_equal ['documents', 'calendar', 'latestnews'], User.find(2).pref[:my_page_layout]['left']
131   end
132
133   context "POST to reset_rss_key" do
134     context "with an existing rss_token" do
135       setup do
136         @previous_token_value = User.find(2).rss_key # Will generate one if it's missing
137         post :reset_rss_key
138       end
139
140       should "destroy the existing token" do
141         assert_not_equal @previous_token_value, User.find(2).rss_key
142       end
143
144       should "create a new token" do
145         assert User.find(2).rss_token
146       end
147
148       should_set_the_flash_to /reset/
149       should_redirect_to('my account') {'/my/account' }
150     end
151     
152     context "with no rss_token" do
153       setup do
154         assert_nil User.find(2).rss_token
155         post :reset_rss_key
156       end
157
158       should "create a new token" do
159         assert User.find(2).rss_token
160       end
161
162       should_set_the_flash_to /reset/
163       should_redirect_to('my account') {'/my/account' }
164     end
165   end
166
167   context "POST to reset_api_key" do
168     context "with an existing api_token" do
169       setup do
170         @previous_token_value = User.find(2).api_key # Will generate one if it's missing
171         post :reset_api_key
172       end
173
174       should "destroy the existing token" do
175         assert_not_equal @previous_token_value, User.find(2).api_key
176       end
177
178       should "create a new token" do
179         assert User.find(2).api_token
180       end
181
182       should_set_the_flash_to /reset/
183       should_redirect_to('my account') {'/my/account' }
184     end
185     
186     context "with no api_token" do
187       setup do
188         assert_nil User.find(2).api_token
189         post :reset_api_key
190       end
191
192       should "create a new token" do
193         assert User.find(2).api_token
194       end
195
196       should_set_the_flash_to /reset/
197       should_redirect_to('my account') {'/my/account' }
198     end
199   end
200 end