| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  | # redMine - project management software | 
					
						
							|  |  |  | # Copyright (C) 2006-2007  Jean-Philippe Lang | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require File.dirname(__FILE__) + '/../test_helper' | 
					
						
							|  |  |  | require 'account_controller' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Re-raise errors caught by the controller. | 
					
						
							|  |  |  | class AccountController; def rescue_action(e) raise e end; end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 17:14:35 +00:00
										 |  |  | class AccountControllerTest < ActionController::TestCase | 
					
						
							| 
									
										
										
										
											2008-12-28 09:46:16 +00:00
										 |  |  |   fixtures :users, :roles | 
					
						
							| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  |    | 
					
						
							|  |  |  |   def setup | 
					
						
							|  |  |  |     @controller = AccountController.new | 
					
						
							|  |  |  |     @request    = ActionController::TestRequest.new | 
					
						
							|  |  |  |     @response   = ActionController::TestResponse.new | 
					
						
							|  |  |  |     User.current = nil | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2008-07-26 08:46:33 +00:00
										 |  |  |   def test_login_should_redirect_to_back_url_param | 
					
						
							|  |  |  |     # request.uri is "test.host" in test environment | 
					
						
							| 
									
										
										
										
											2008-09-21 12:45:22 +00:00
										 |  |  |     post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http%3A%2F%2Ftest.host%2Fissues%2Fshow%2F1' | 
					
						
							| 
									
										
										
										
											2008-07-26 08:46:33 +00:00
										 |  |  |     assert_redirected_to '/issues/show/1' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def test_login_should_not_redirect_to_another_host | 
					
						
							| 
									
										
										
										
											2008-09-21 12:45:22 +00:00
										 |  |  |     post :login, :username => 'jsmith', :password => 'jsmith', :back_url => 'http%3A%2F%2Ftest.foo%2Ffake' | 
					
						
							| 
									
										
										
										
											2008-07-26 08:46:33 +00:00
										 |  |  |     assert_redirected_to '/my/page' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  |   def test_login_with_wrong_password | 
					
						
							| 
									
										
										
										
											2008-02-29 21:18:35 +00:00
										 |  |  |     post :login, :username => 'admin', :password => 'bad' | 
					
						
							| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  |     assert_response :success | 
					
						
							|  |  |  |     assert_template 'login' | 
					
						
							|  |  |  |     assert_tag 'div', | 
					
						
							|  |  |  |                :attributes => { :class => "flash error" }, | 
					
						
							|  |  |  |                :content => /Invalid user or password/ | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2009-02-12 21:25:50 +00:00
										 |  |  |   if Object.const_defined?(:OpenID) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:34 +00:00
										 |  |  |   def test_login_with_openid_for_existing_user | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |     Setting.self_registration = '3' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:34 +00:00
										 |  |  |     existing_user = User.new(:firstname => 'Cool', | 
					
						
							|  |  |  |                              :lastname => 'User', | 
					
						
							|  |  |  |                              :mail => 'user@somedomain.com', | 
					
						
							|  |  |  |                              :identity_url => 'http://openid.example.com/good_user') | 
					
						
							|  |  |  |     existing_user.login = 'cool_user' | 
					
						
							|  |  |  |     assert existing_user.save! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     post :login, :openid_url => existing_user.identity_url | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:18 +00:00
										 |  |  |     assert_redirected_to 'my/page' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-20 00:16:45 +00:00
										 |  |  |   def test_login_with_openid_for_existing_non_active_user | 
					
						
							|  |  |  |     Setting.self_registration = '2' | 
					
						
							|  |  |  |     Setting.openid = '1' | 
					
						
							|  |  |  |     existing_user = User.new(:firstname => 'Cool', | 
					
						
							|  |  |  |                              :lastname => 'User', | 
					
						
							|  |  |  |                              :mail => 'user@somedomain.com', | 
					
						
							|  |  |  |                              :identity_url => 'http://openid.example.com/good_user', | 
					
						
							|  |  |  |                              :status => User::STATUS_REGISTERED) | 
					
						
							|  |  |  |     existing_user.login = 'cool_user' | 
					
						
							|  |  |  |     assert existing_user.save! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     post :login, :openid_url => existing_user.identity_url | 
					
						
							|  |  |  |     assert_redirected_to 'login' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:18 +00:00
										 |  |  |   def test_login_with_openid_with_new_user_created | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |     Setting.self_registration = '3' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:23 +00:00
										 |  |  |     post :login, :openid_url => 'http://openid.example.com/good_user' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:34 +00:00
										 |  |  |     assert_redirected_to 'my/account' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:23 +00:00
										 |  |  |     user = User.find_by_login('cool_user') | 
					
						
							|  |  |  |     assert user | 
					
						
							|  |  |  |     assert_equal 'Cool', user.firstname | 
					
						
							|  |  |  |     assert_equal 'User', user.lastname | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:18 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_login_with_openid_with_new_user_and_self_registration_off | 
					
						
							|  |  |  |     Setting.self_registration = '0' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:41 +00:00
										 |  |  |     post :login, :openid_url => 'http://openid.example.com/good_user' | 
					
						
							|  |  |  |     assert_redirected_to home_url | 
					
						
							|  |  |  |     user = User.find_by_login('cool_user') | 
					
						
							|  |  |  |     assert ! user | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |   def test_login_with_openid_with_new_user_created_with_email_activation_should_have_a_token | 
					
						
							|  |  |  |     Setting.self_registration = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |     post :login, :openid_url => 'http://openid.example.com/good_user' | 
					
						
							|  |  |  |     assert_redirected_to 'login' | 
					
						
							|  |  |  |     user = User.find_by_login('cool_user') | 
					
						
							|  |  |  |     assert user | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     token = Token.find_by_user_id_and_action(user.id, 'register') | 
					
						
							|  |  |  |     assert token | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def test_login_with_openid_with_new_user_created_with_manual_activation | 
					
						
							|  |  |  |     Setting.self_registration = '2' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |     post :login, :openid_url => 'http://openid.example.com/good_user' | 
					
						
							|  |  |  |     assert_redirected_to 'login' | 
					
						
							|  |  |  |     user = User.find_by_login('cool_user') | 
					
						
							|  |  |  |     assert user | 
					
						
							|  |  |  |     assert_equal User::STATUS_REGISTERED, user.status | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:23 +00:00
										 |  |  |   def test_login_with_openid_with_new_user_with_conflict_should_register | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:28 +00:00
										 |  |  |     Setting.self_registration = '3' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:24:28 +00:00
										 |  |  |     Setting.openid = '1' | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:23 +00:00
										 |  |  |     existing_user = User.new(:firstname => 'Cool', :lastname => 'User', :mail => 'user@somedomain.com') | 
					
						
							|  |  |  |     existing_user.login = 'cool_user' | 
					
						
							|  |  |  |     assert existing_user.save! | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:18 +00:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:23 +00:00
										 |  |  |     post :login, :openid_url => 'http://openid.example.com/good_user' | 
					
						
							|  |  |  |     assert_response :success | 
					
						
							|  |  |  |     assert_template 'register' | 
					
						
							|  |  |  |     assert assigns(:user) | 
					
						
							|  |  |  |     assert_equal 'http://openid.example.com/good_user', assigns(:user)[:identity_url] | 
					
						
							| 
									
										
										
										
											2009-02-11 19:07:18 +00:00
										 |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2009-02-19 21:03:08 +00:00
										 |  |  |   def test_setting_openid_should_return_true_when_set_to_true | 
					
						
							|  |  |  |     Setting.openid = '1' | 
					
						
							|  |  |  |     assert_equal true, Setting.openid? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2009-02-12 21:25:50 +00:00
										 |  |  |   else | 
					
						
							|  |  |  |     puts "Skipping openid tests." | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  |   def test_logout | 
					
						
							|  |  |  |     @request.session[:user_id] = 2
 | 
					
						
							|  |  |  |     get :logout | 
					
						
							|  |  |  |     assert_redirected_to '' | 
					
						
							|  |  |  |     assert_nil @request.session[:user_id] | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-08-02 15:42:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   context "GET #register" do | 
					
						
							|  |  |  |     context "with self registration on" do | 
					
						
							|  |  |  |       setup do | 
					
						
							|  |  |  |         Setting.self_registration = '3' | 
					
						
							|  |  |  |         get :register | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       should_respond_with :success | 
					
						
							|  |  |  |       should_render_template :register | 
					
						
							|  |  |  |       should_assign_to :user | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     context "with self registration off" do | 
					
						
							|  |  |  |       setup do | 
					
						
							|  |  |  |         Setting.self_registration = '0' | 
					
						
							|  |  |  |         get :register | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       should_redirect_to('/') { home_url } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-08-02 15:42:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # See integration/account_test.rb for the full test | 
					
						
							|  |  |  |   context "POST #register" do | 
					
						
							|  |  |  |     context "with self registration on automatic" do | 
					
						
							|  |  |  |       setup do | 
					
						
							|  |  |  |         Setting.self_registration = '3' | 
					
						
							|  |  |  |         post :register, :user => { | 
					
						
							|  |  |  |           :login => 'register', | 
					
						
							|  |  |  |           :password => 'test', | 
					
						
							|  |  |  |           :password_confirmation => 'test', | 
					
						
							|  |  |  |           :firstname => 'John', | 
					
						
							|  |  |  |           :lastname => 'Doe', | 
					
						
							|  |  |  |           :mail => 'register@example.com' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       should_respond_with :redirect | 
					
						
							|  |  |  |       should_assign_to :user | 
					
						
							|  |  |  |       should_redirect_to('my page') { {:controller => 'my', :action => 'account'} } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-02 15:43:04 +00:00
										 |  |  |       should_create_a_new_user { User.last(:conditions => {:login => 'register'}) } | 
					
						
							| 
									
										
										
										
											2010-08-02 15:42:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       should 'set the user status to active' do | 
					
						
							|  |  |  |         user = User.last(:conditions => {:login => 'register'}) | 
					
						
							|  |  |  |         assert user | 
					
						
							|  |  |  |         assert_equal User::STATUS_ACTIVE, user.status | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     context "with self registration off" do | 
					
						
							|  |  |  |       setup do | 
					
						
							|  |  |  |         Setting.self_registration = '0' | 
					
						
							|  |  |  |         post :register | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       should_redirect_to('/') { home_url } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-13 18:52:09 +00:00
										 |  |  | end |