require File.dirname(__FILE__) + '/../test_helper' require 'account_controller' # Set salt to 'change-me' because thats what the fixtures assume. Account.salt = 'change-me' # Raise errors beyond the default web-based presentation class AccountController; def rescue_action(e) raise e end; end class AccountControllerTest < Test::Unit::TestCase fixtures :companies, :accounts privileged_actions :list, :create, :edit, :update, :destroy, :toggleadmin def setup @controller = AccountController.new @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new @request.host = "localhost" end def test_admin_update_user put_admin full_name = 'New Full Name' email = Account.find(1).login post :update, :id => 1, :account => {:name => full_name, :login => email} assert_response :redirect assert_redirected_to :action => 'show', :id => 1 account = Account.find 1 assert_equal full_name, account.name assert_equal email, account.login end def test_index put_user get :index assert_response :success assert_template 'welcome' end def test_welcome put_user get :welcome assert_response :success assert_template 'welcome' assert_no_tag :content => /administrator/ put_admin get :welcome assert_response :success assert_template 'welcome' assert_tag :content => /administrator/ end def test_list put_admin get :list assert_response :success assert_template 'list' assert_not_nil assigns(:accounts) end def test_new put_admin get :new assert_response :success assert_template 'new' assert_not_nil assigns(:account) end def test_create put_admin num_accounts = Account.count post :create, :account => {:login => 'abob'} assert_redirected_to :action => 'list' assert_equal num_accounts + 1, Account.count end def test_edit put_user get :edit, :id => 1 assert_response :success assert_template 'edit' assert_not_nil assigns(:account) assert assigns(:account).valid? end def test_update put_user full_name = 'New Full Name' email = 'newlogin@example.com' post :update, :id => 1, :account => {:name => full_name, :login => email} assert_response :redirect assert_redirected_to :action => 'show', :id => 1 account = Account.find 1 assert_equal full_name, account.name assert_equal email, account.login end def test_update_login_conflict put_user existing_login = 'existing@example.com' existing_account = Account.new existing_account.login = existing_login assert existing_account.save current_account = @request.session[:user] post :update, :id => current_account.id, :account => {:login => existing_login} assert_template 'edit' current_account.reload assert current_account.login != existing_login end def test_toggle_admin put_admin account = Account.new account.login = 'user@example.com' assert account.save assert !account.admin? get :toggleadmin, :id => account.id account.reload assert account.admin? assert_redirected_to :action => 'show' post :toggleadmin, :id => account.id account.reload assert !account.admin? assert_redirected_to :action => 'show' end def test_destroy put_admin assert_not_nil Account.find(1) post :destroy, :id => 1 assert_response :redirect assert_redirected_to :action => 'list' assert_raise(ActiveRecord::RecordNotFound) { Account.find(1) } end def test_auth_bob @request.session[:return_to] = "/bogus/location" post :login, :user_login => "bob", :user_password => "test" assert_user_logged_in assert_equal "bob", @response.session[:user].login assert(@response.redirect_url_match?("/bogus/location")) end def test_signup_and_promote_as_admin perform_signup assert @request.session[:user].admin? end def test_normal_signup put_admin perform_signup assert !@request.session[:user].admin? end def perform_signup @request.session[:return_to] = "/bogus/location" post :signup, :account => { :login => "newbob", :password => "newpassword", :password_confirmation => "newpassword" } assert_user_logged_in assert(@response.redirect_url_match?("/bogus/location")) end def test_bad_signup @request.session[:return_to] = "/bogus/location" post :signup, :user => { :login => "newbob", :password => "newpassword", :password_confirmation => "wrong" } assert_invalid_column_on_record "account", :password assert_response(:success) post :signup, :user => { :login => "yoyo", :password => "newpassword", :password_confirmation => "newpassword" } assert_invalid_column_on_record "account", :login assert_response(:success) end def test_invalid_login post :login, :user_login => "bob", :user_password => "not_correct" assert_user_logged_out assert(@response.has_template_object?("login")) end def test_login_logoff post :login, :user_login => "bob", :user_password => "test" assert_user_logged_in get :logout assert_user_logged_out end end