require File.dirname(__FILE__) + '/../test_helper' require 'login_controller' # Raise errors beyond the default web-based presentation class LoginController; def rescue_action(e) raise e end; end class LoginControllerTest < Test::Unit::TestCase fixtures :users, :groups, :groups_users def setup RetroCM.reload @controller = LoginController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end def test_index get :index assert_response :redirect assert_redirected_to(:controller => 'login', :action => 'login') end def test_login_basics @request.session[:user_id] = nil get :login assert_response :success assert_template 'login/login' assert_valid_markup @request.session[:user_id] = 3 get :login assert_response :success assert_template 'login/logged_in' assert_valid_markup @request.session[:user_id] = nil post :login assert_response :success assert_template 'login/login' RetroCM[:general][:user_management][:secure_auth] = true @request.session[:user_id] = nil get :login assert_response :success assert_template 'login/login' end def test_login_unsecure RetroCM[:general][:user_management][:secure_auth] = false @request.session[:user_id] = nil post :login, :user => {:login => 'admin', :password => 'wrong_password'} assert_response :redirect assert_redirected_to login_path assert_not_nil(flash[:error]) flash[:error] = nil @request.session[:user_id] = nil post :login, :user => {:login => 'admin', :password => 'password'} assert_response :redirect assert_redirected_to home_path assert_nil(flash[:error]) assert_not_nil(flash[:notice]) flash[:notice] = nil end def test_login_secure RetroCM[:general][:user_management][:secure_auth] = true @request.session[:user_id] = nil post :login, :user => {:login => 'admin', :password => 'password'} assert_response :redirect assert_redirected_to login_path assert_not_nil(flash[:error]) flash[:error] = nil admin_user = User.find_by_login('admin') @request.session[:user_id] = nil tan = 'invalid' pass = admin_user.password hash = Digest::SHA1.hexdigest("#{tan}:#{pass}") post :login, :user => {:login => 'admin', :tan => tan, :hash => hash} assert_response :redirect assert_redirected_to login_path assert_not_nil(flash[:error]) flash[:error] = nil @request.session[:user_id] = nil tan = Tan.generate pass = 'wrong_hashed_password' hash = Digest::SHA1.hexdigest("#{tan}:#{pass}") post :login, :user => {:login => 'admin', :tan => tan, :hash => hash} assert_response :redirect assert_redirected_to login_path assert_not_nil(flash[:error]) flash[:error] = nil @request.session[:user_id] = nil tan = Tan.generate pass = admin_user.password hash = Digest::SHA1.hexdigest("#{tan}:#{pass}") post :login, :user => {:login => 'admin', :tan => tan, :hash => hash} assert_response :redirect assert_redirected_to home_path assert_nil(flash[:error]) assert_not_nil(flash[:notice]) flash[:notice] = nil end def test_logout @request.session[:user_id] = 3 User.current = User.find(3) get :logout assert_response :success assert_valid_markup assert_nil(@request.session[:user_id]) assert_equal(User.public_user, User.current) end def test_code get :code assert_response :redirect assert_redirected_to login_path admin_user = User.find_by_login('admin') assert_equal(false, RetroCM[:general][:user_management][:secure_auth]) xhr :get, :code assert_response :redirect assert_redirected_to login_path xhr :get, :code, :login => admin_user.login assert_response :success assert(@response.body.blank?) RetroCM[:general][:user_management][:secure_auth] = true assert_equal(true, RetroCM[:general][:user_management][:secure_auth]) xhr :get, :code, :login => 'invalid_login' assert_response :success assert(@response.body.blank?) xhr :get, :code assert_response :redirect assert_redirected_to login_path xhr :get, :code, :login => admin_user.login assert_response :success assert_equal(admin_user.salt, @response.body) end end