Refactored tests for improved solubility/grokability.

git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@615 a4c988fc-2ded-0310-b66e-134b36920a42
This commit is contained in:
lukemelia 2007-10-09 05:17:28 +00:00
parent b31561736e
commit e0b63acfab
7 changed files with 129 additions and 133 deletions

View file

@ -13,9 +13,6 @@ class UsersControllerTest < Test::Rails::TestCase
@controller = UsersController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@num_users_in_fixture = User.count
@admin_user = users(:admin_user)
@nonadmin_user = users(:other_user)
end
def test_get_index_when_not_logged_in
@ -24,13 +21,13 @@ class UsersControllerTest < Test::Rails::TestCase
end
def test_get_index_by_nonadmin
login_as @nonadmin_user
login_as :other_user
get :index
assert_response 401
end
def test_get_index_by_admin
login_as @admin_user
login_as :admin_user
get :index
assert_response :success
assert_equal "TRACKS::Manage Users", assigns['page_title']
@ -39,7 +36,7 @@ class UsersControllerTest < Test::Rails::TestCase
end
def test_destroy_user
login_as @admin_user
login_as :admin_user
@no_users_before = User.find(:all).size
xhr :post, :destroy, :id => 3
assert_rjs :page, "user-3", :remove
@ -49,7 +46,7 @@ class UsersControllerTest < Test::Rails::TestCase
def test_update_password_successful
get :change_password # should fail because no login
assert_redirected_to :controller => 'login', :action => 'login'
login_as @admin_user
login_as :admin_user
@user = @request.session['user_id']
get :change_password # should now pass because we're logged in
assert_response :success
@ -64,7 +61,7 @@ class UsersControllerTest < Test::Rails::TestCase
def test_update_password_no_confirmation
post :update_password # should fail because no login
assert_redirected_to :controller => 'login', :action => 'login'
login_as @admin_user
login_as :admin_user
post :update_password, :updateuser => {:password => 'newpassword', :password_confirmation => 'wrong'}
assert_redirected_to :controller => 'users', :action => 'change_password'
assert users(:admin_user).save, false
@ -74,7 +71,7 @@ class UsersControllerTest < Test::Rails::TestCase
def test_update_password_validation_errors
post :update_password # should fail because no login
assert_redirected_to :controller => 'login', :action => 'login'
login_as @admin_user
login_as :admin_user
post :update_password, :updateuser => {:password => 'ba', :password_confirmation => 'ba'}
assert_redirected_to :controller => 'users', :action => 'change_password'
assert users(:admin_user).save, false
@ -88,74 +85,86 @@ class UsersControllerTest < Test::Rails::TestCase
# Signup and creation of new users
# ============================================
def test_create
login_as @admin_user
newbie = create('newbie', 'newbiepass')
assert_equal "Signup successful for user newbie.", flash[:notice], "expected flash notice not found"
assert_redirected_to home_url
assert_valid newbie
session['user_id'] = nil # logout the admin user
def test_create_adds_a_new_nonadmin_user
login_as :admin_user
post :create, :user => {:login => 'newbie', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
newbie = User.find_by_login('newbie')
assert_equal newbie.login, "newbie"
assert newbie.is_admin == false || newbie.is_admin == 0
assert_not_nil newbie.preference # have user preferences been created?
assert_not_nil User.authenticate('newbie', 'newbiepass')
assert_equal User.count, @num_users_in_fixture + 1
end
def test_create_redirects_to_home_page
login_as :admin_user
post :create, :user => {:login => 'newbie', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_redirected_to home_url
end
def test_create_sets_flash_message
login_as :admin_user
post :create, :user => {:login => 'newbie', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_equal "Signup successful for user newbie.", flash[:notice], "expected flash notice not found"
end
def test_create_adds_a_user
login_as :admin_user
assert_difference(User, :count) do
post :create, :user => {:login => 'newbie', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
end
end
# Test whether signup of new users is denied to a non-admin user
#
def test_create_by_non_admin
non_admin = login_as @nonadmin_user
post :create, :user => {:login => 'newbie2', :password => 'newbiepass2', :password_confirmation => 'newbiepass2'}
login_as :other_user
assert_no_difference(User, :count) do
post :create, :user => {:login => 'newbie2', :password => 'newbiepass2', :password_confirmation => 'newbiepass2'}
end
assert_response :success
assert_template 'users/nosignup'
assert_number_of_users_is_unchanged
end
# ============================================
# Test validations
# ============================================
def test_create_with_invalid_password
login_as @admin_user
post :create, :user => {:login => 'newbie', :password => '', :password_confirmation => ''}
assert_number_of_users_is_unchanged
assert_redirected_to :controller => 'users', :action => 'new'
end
def test_create_with_invalid_user
login_as @admin_user
post :create, :user => {:login => 'n', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_number_of_users_is_unchanged
assert_redirected_to :controller => 'users', :action => 'new'
end
# Test uniqueness of login
#
def test_validate_uniqueness_of_login
login_as @admin_user
post :create, :user => {:login => 'jane', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
num_users = User.find(:all)
assert_number_of_users_is_unchanged
assert_redirected_to :controller => 'users', :action => 'new'
end
private
def login_as(user)
returning user do |u|
@request.session['user_id'] = u.id
def test_create_with_invalid_password_does_not_add_a_new_user
login_as :admin_user
assert_no_difference(User, :count) do
post :create, :user => {:login => 'newbie', :password => '', :password_confirmation => ''}
end
end
# Creates a new users with the login and password given
def create(login,password)
post :create, :user => {:login => login, :password => password, :password_confirmation => password}
return User.find_by_login(login)
def test_create_with_invalid_password_redirects_to_new_user_page
login_as :admin_user
post :create, :user => {:login => 'newbie', :password => '', :password_confirmation => ''}
assert_redirected_to :controller => 'users', :action => 'new'
end
def assert_number_of_users_is_unchanged
assert_equal User.count, @num_users_in_fixture
end
def test_create_with_invalid_login_does_not_add_a_new_user
login_as :admin_user
post :create, :user => {:login => 'n', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_redirected_to :controller => 'users', :action => 'new'
end
def test_create_with_invalid_login_redirects_to_new_user_page
login_as :admin_user
post :create, :user => {:login => 'n', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_redirected_to :controller => 'users', :action => 'new'
end
def test_create_with_duplicate_login_does_not_add_a_new_user
login_as :admin_user
assert_no_difference(User, :count) do
post :create, :user => {:login => 'jane', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
end
end
def test_create_with_duplicate_login_redirects_to_new_user_page
login_as :admin_user
post :create, :user => {:login => 'jane', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
assert_redirected_to :controller => 'users', :action => 'new'
end
end