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,7 +13,7 @@ class ContextsControllerTest < TodoContainerControllerTestBase
end end
def test_contexts_list def test_contexts_list
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index get :index
end end
@ -41,7 +41,7 @@ class ContextsControllerTest < TodoContainerControllerTestBase
end end
def test_rss_feed_content def test_rss_feed_content
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index, { :format => "rss" } get :index, { :format => "rss" }
assert_equal 'application/rss+xml; charset=utf-8', @response.headers["Content-Type"] assert_equal 'application/rss+xml; charset=utf-8', @response.headers["Content-Type"]
#puts @response.body #puts @response.body
@ -69,25 +69,25 @@ class ContextsControllerTest < TodoContainerControllerTestBase
end end
def test_rss_feed_not_accessible_to_anonymous_user_without_token def test_rss_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss" } get :index, { :format => "rss" }
assert_response 401 assert_response 401
end end
def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss", :token => 'foo' } get :index, { :format => "rss", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_rss_feed_accessible_to_anonymous_user_with_valid_token def test_rss_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss", :token => users(:admin_user).token } get :index, { :format => "rss", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_atom_feed_content def test_atom_feed_content
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index, { :format => "atom" } get :index, { :format => "atom" }
assert_equal 'application/atom+xml; charset=utf-8', @response.headers["Content-Type"] assert_equal 'application/atom+xml; charset=utf-8', @response.headers["Content-Type"]
#puts @response.body #puts @response.body
@ -108,78 +108,78 @@ class ContextsControllerTest < TodoContainerControllerTestBase
end end
def test_atom_feed_not_accessible_to_anonymous_user_without_token def test_atom_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom" } get :index, { :format => "atom" }
assert_response 401 assert_response 401
end end
def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom", :token => 'foo' } get :index, { :format => "atom", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_atom_feed_accessible_to_anonymous_user_with_valid_token def test_atom_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom", :token => users(:admin_user).token } get :index, { :format => "atom", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_text_feed_content def test_text_feed_content
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index, { :format => "txt" } get :index, { :format => "txt" }
assert_equal 'text/plain; charset=utf-8', @response.headers["Content-Type"] assert_equal 'text/plain; charset=utf-8', @response.headers["Content-Type"]
assert !(/&nbsp;/.match(@response.body)) assert !(/&nbsp;/.match(@response.body))
end end
def test_text_feed_not_accessible_to_anonymous_user_without_token def test_text_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt" } get :index, { :format => "txt" }
assert_response 401 assert_response 401
end end
def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt", :token => 'foo' } get :index, { :format => "txt", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_text_feed_accessible_to_anonymous_user_with_valid_token def test_text_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt", :token => users(:admin_user).token } get :index, { :format => "txt", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_show_sets_title def test_show_sets_title
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :show, { :id => "1" } get :show, { :id => "1" }
assert_equal 'TRACKS::Context: agenda', assigns['page_title'] assert_equal 'TRACKS::Context: agenda', assigns['page_title']
end end
def test_show_renders_show_template def test_show_renders_show_template
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :show, { :id => "1" } get :show, { :id => "1" }
assert_template "contexts/show" assert_template "contexts/show"
end end
def test_show_xml_renders_context_to_xml def test_show_xml_renders_context_to_xml
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :show, { :id => "1", :format => 'xml' } get :show, { :id => "1", :format => 'xml' }
assert_equal contexts(:agenda).to_xml( :except => :user_id ), @response.body assert_equal contexts(:agenda).to_xml( :except => :user_id ), @response.body
end end
def test_show_with_nil_context_returns_404 def test_show_with_nil_context_returns_404
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :show, { :id => "0" } get :show, { :id => "0" }
assert_equal 'Context not found', @response.body assert_equal 'Context not found', @response.body
assert_response 404 assert_response 404
end end
def test_show_xml_with_nil_context_returns_404 def test_show_xml_with_nil_context_returns_404
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :show, { :id => "0", :format => 'xml' } get :show, { :id => "0", :format => 'xml' }
assert_response 404 assert_response 404
assert_xml_select 'error', 'Context not found' assert_xml_select 'error', 'Context not found'
end end
end end

View file

@ -15,7 +15,7 @@ class DataControllerTest < Test::Rails::TestCase
# Replace this with your real tests. # Replace this with your real tests.
def test_csv_export_completes_without_error def test_csv_export_completes_without_error
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :csv_notes get :csv_notes
end end
end end

View file

@ -21,7 +21,7 @@ class FeedlistControllerTest < Test::Rails::TestCase
end end
def test_get_index_by_logged_in_user def test_get_index_by_logged_in_user
@request.session['user_id'] = users(:other_user).id login_as :other_user
get :index get :index
assert_response :success assert_response :success
assert_equal "TRACKS::Feeds", assigns['page_title'] assert_equal "TRACKS::Feeds", assigns['page_title']

View file

@ -14,7 +14,6 @@ class LoginControllerTest < Test::Rails::TestCase
@controller = LoginController.new @controller = LoginController.new
@request = ActionController::TestRequest.new @request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new @response = ActionController::TestResponse.new
@num_users_in_fixture = User.count
end end
#============================================ #============================================
@ -30,7 +29,8 @@ class LoginControllerTest < Test::Rails::TestCase
def test_login_with_valid_admin_user def test_login_with_valid_admin_user
@request.session['return-to'] = "/bogus/location" @request.session['return-to'] = "/bogus/location"
user = login('admin', 'abracadabra', 'on') post :login, {:user_login => 'admin', :user_password => 'abracadabra', :user_noexpiry => 'on'}
user = User.find(session['user_id'])
assert_equal user.id, @response.session['user_id'] assert_equal user.id, @response.session['user_id']
assert_equal user.login, "admin" assert_equal user.login, "admin"
assert user.is_admin assert user.is_admin
@ -39,7 +39,8 @@ class LoginControllerTest < Test::Rails::TestCase
end end
def test_login_with_valid_standard_user def test_login_with_valid_standard_user
user = login('jane','sesame', 'off') post :login, {:user_login => 'jane', :user_password => 'sesame', :user_noexpiry => 'off'}
user = User.find(session['user_id'])
assert_equal user.id, @response.session['user_id'] assert_equal user.id, @response.session['user_id']
assert_equal user.login, "jane" assert_equal user.login, "jane"
assert user.is_admin == false || user.is_admin == 0 assert user.is_admin == false || user.is_admin == 0
@ -54,7 +55,7 @@ class LoginControllerTest < Test::Rails::TestCase
end end
def test_logout def test_logout
user = login('admin','abracadabra', 'on') login_as :admin_user
get :logout get :logout
assert_nil(session['user_id']) assert_nil(session['user_id'])
assert_redirected_to :controller => 'login', :action => 'login' assert_redirected_to :controller => 'login', :action => 'login'
@ -94,7 +95,7 @@ class LoginControllerTest < Test::Rails::TestCase
def test_should_login_with_cookie def test_should_login_with_cookie
users(:other_user).remember_me users(:other_user).remember_me
@request.cookies["auth_token"] = cookie_for(:other_user) @request.cookies["auth_token"] = auth_token_cookie_for(:other_user)
get :login get :login
assert @controller.send(:logged_in?) assert @controller.send(:logged_in?)
end end
@ -102,14 +103,14 @@ class LoginControllerTest < Test::Rails::TestCase
def test_should_fail_expired_cookie_login def test_should_fail_expired_cookie_login
users(:other_user).remember_me users(:other_user).remember_me
users(:other_user).update_attribute :remember_token_expires_at, 5.minutes.ago users(:other_user).update_attribute :remember_token_expires_at, 5.minutes.ago
@request.cookies["auth_token"] = cookie_for(:other_user) @request.cookies["auth_token"] = auth_token_cookie_for(:other_user)
get :login get :login
assert !@controller.send(:logged_in?) assert !@controller.send(:logged_in?)
end end
def test_should_fail_cookie_login def test_should_fail_cookie_login
users(:other_user).remember_me users(:other_user).remember_me
@request.cookies["auth_token"] = auth_token('invalid_auth_token') @request.cookies["auth_token"] = CGI::Cookie.new('name' => 'auth_token', 'value' => 'invalid_auth_token')
get :login get :login
assert !@controller.send(:logged_in?) assert !@controller.send(:logged_in?)
end end
@ -120,35 +121,25 @@ class LoginControllerTest < Test::Rails::TestCase
end end
def test_current_user_correct def test_current_user_correct
user = login('jane','sesame', 'off') post :login, {:user_login => 'jane', :user_password => 'sesame', :user_noexpiry => 'off'}
assert_equal user, @controller.current_user assert_equal users(:other_user), @controller.current_user
end end
def test_prefs_nil def test_prefs_nil
login_as nil
get :login get :login
assert_nil @controller.prefs assert_nil @controller.prefs
end end
def test_prefs_correct def test_prefs_correct
user = login('jane','sesame', 'off') post :login, {:user_login => 'jane', :user_password => 'sesame', :user_noexpiry => 'off'}
assert_equal user.prefs, @controller.prefs assert_equal users(:other_user).prefs, @controller.prefs
end end
private private
# Logs in a user and returns the user object found in the session object def auth_token_cookie_for(user)
def login(login,password,expiry) CGI::Cookie.new('name' => 'auth_token', 'value' => users(user).remember_token)
post :login, {:user_login => login, :user_password => password, :user_noexpiry => expiry}
assert_not_nil(session['user_id'])
return User.find(session['user_id'])
end
def auth_token(token)
CGI::Cookie.new('name' => 'auth_token', 'value' => token)
end
def cookie_for(user)
auth_token users(user).remember_token
end end

View file

@ -13,13 +13,14 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_projects_list def test_projects_list
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index get :index
end end
def test_show_exposes_deferred_todos def test_show_exposes_deferred_todos
p = projects(:timemachine) p = projects(:timemachine)
show p login_as :admin_user
get :show, :id => p.to_param
assert_not_nil assigns['deferred'] assert_not_nil assigns['deferred']
assert_equal 1, assigns['deferred'].size assert_equal 1, assigns['deferred'].size
@ -32,12 +33,14 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_show_exposes_next_project_in_same_state def test_show_exposes_next_project_in_same_state
show projects(:timemachine) login_as :admin_user
get :show, :id => projects(:timemachine).to_param
assert_equal(projects(:moremoney), assigns['next_project']) assert_equal(projects(:moremoney), assigns['next_project'])
end end
def test_show_exposes_previous_project_in_same_state def test_show_exposes_previous_project_in_same_state
show projects(:moremoney) login_as :admin_user
get :show, :id => projects(:moremoney).to_param
assert_equal(projects(:timemachine), assigns['previous_project']) assert_equal(projects(:timemachine), assigns['previous_project'])
end end
@ -74,7 +77,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
def test_todo_state_is_project_hidden_after_hiding_project def test_todo_state_is_project_hidden_after_hiding_project
p = projects(:timemachine) p = projects(:timemachine)
todos = p.todos.find_in_state(:all, :active) todos = p.todos.find_in_state(:all, :active)
@request.session['user_id'] = users(:admin_user).id login_as(:admin_user)
xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"}
todos.each do |t| todos.each do |t|
assert_equal :project_hidden, t.reload().current_state assert_equal :project_hidden, t.reload().current_state
@ -85,7 +88,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
def test_not_done_counts_after_hiding_and_unhiding_project def test_not_done_counts_after_hiding_and_unhiding_project
p = projects(:timemachine) p = projects(:timemachine)
todos = p.todos.find_in_state(:all, :active) todos = p.todos.find_in_state(:all, :active)
@request.session['user_id'] = users(:admin_user).id login_as(:admin_user)
xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"} xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"hidden"}
xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"active"} xhr :post, :update, :id => 1, "project"=>{"name"=>p.name, "description"=>p.description, "state"=>"active"}
todos.each do |t| todos.each do |t|
@ -95,7 +98,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_rss_feed_content def test_rss_feed_content
@request.session['user_id'] = users(:admin_user).id login_as(:admin_user)
get :index, { :format => "rss" } get :index, { :format => "rss" }
assert_equal 'application/rss+xml; charset=utf-8', @response.headers["Content-Type"] assert_equal 'application/rss+xml; charset=utf-8', @response.headers["Content-Type"]
#puts @response.body #puts @response.body
@ -123,25 +126,25 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_rss_feed_not_accessible_to_anonymous_user_without_token def test_rss_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss" } get :index, { :format => "rss" }
assert_response 401 assert_response 401
end end
def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token def test_rss_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss", :token => 'foo' } get :index, { :format => "rss", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_rss_feed_accessible_to_anonymous_user_with_valid_token def test_rss_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "rss", :token => users(:admin_user).token } get :index, { :format => "rss", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_atom_feed_content def test_atom_feed_content
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index, { :format => "atom" } get :index, { :format => "atom" }
assert_equal 'application/atom+xml; charset=utf-8', @response.headers["Content-Type"] assert_equal 'application/atom+xml; charset=utf-8', @response.headers["Content-Type"]
#puts @response.body #puts @response.body
@ -162,25 +165,25 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_atom_feed_not_accessible_to_anonymous_user_without_token def test_atom_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom" } get :index, { :format => "atom" }
assert_response 401 assert_response 401
end end
def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token def test_atom_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom", :token => 'foo' } get :index, { :format => "atom", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_atom_feed_accessible_to_anonymous_user_with_valid_token def test_atom_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "atom", :token => users(:admin_user).token } get :index, { :format => "atom", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_text_feed_content def test_text_feed_content
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
get :index, { :format => "txt" } get :index, { :format => "txt" }
assert_equal 'text/plain; charset=utf-8', @response.headers["Content-Type"] assert_equal 'text/plain; charset=utf-8', @response.headers["Content-Type"]
assert !(/&nbsp;/.match(@response.body)) assert !(/&nbsp;/.match(@response.body))
@ -188,7 +191,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_text_feed_content_for_projects_with_no_actions def test_text_feed_content_for_projects_with_no_actions
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
p = projects(:timemachine) p = projects(:timemachine)
p.todos.each { |t| t.destroy } p.todos.each { |t| t.destroy }
@ -198,26 +201,26 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_text_feed_not_accessible_to_anonymous_user_without_token def test_text_feed_not_accessible_to_anonymous_user_without_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt" } get :index, { :format => "txt" }
assert_response 401 assert_response 401
end end
def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token def test_text_feed_not_accessible_to_anonymous_user_with_invalid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt", :token => 'foo' } get :index, { :format => "txt", :token => 'foo' }
assert_response 401 assert_response 401
end end
def test_text_feed_accessible_to_anonymous_user_with_valid_token def test_text_feed_accessible_to_anonymous_user_with_valid_token
@request.session['user_id'] = nil login_as nil
get :index, { :format => "txt", :token => users(:admin_user).token } get :index, { :format => "txt", :token => users(:admin_user).token }
assert_response :ok assert_response :ok
end end
def test_alphabetize_sorts_active_projects_alphabetically def test_alphabetize_sorts_active_projects_alphabetically
login_as :admin_user
u = users(:admin_user) u = users(:admin_user)
@request.session['user_id'] = u.id
post :alphabetize, { :state => "active" } post :alphabetize, { :state => "active" }
assert_equal 1, projects(:timemachine).position assert_equal 1, projects(:timemachine).position
assert_equal 2, projects(:gardenclean).position assert_equal 2, projects(:gardenclean).position
@ -225,25 +228,18 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
end end
def test_alphabetize_assigns_state def test_alphabetize_assigns_state
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
post :alphabetize, { :state => "active" } post :alphabetize, { :state => "active" }
assert_equal "active", assigns['state'] assert_equal "active", assigns['state']
end end
def test_alphabetize_assigns_projects def test_alphabetize_assigns_projects
@request.session['user_id'] = users(:admin_user).id login_as :admin_user
post :alphabetize, { :state => "active" } post :alphabetize, { :state => "active" }
exposed_projects = assigns['projects'] exposed_projects = assigns['projects']
assert_equal 3, exposed_projects.length assert_equal 3, exposed_projects.length
assert_equal projects(:timemachine), exposed_projects[0] assert_equal projects(:timemachine), exposed_projects[0]
assert_equal projects(:gardenclean), exposed_projects[1] assert_equal projects(:gardenclean), exposed_projects[1]
assert_equal projects(:moremoney), exposed_projects[2] assert_equal projects(:moremoney), exposed_projects[2]
end end
private
def show(project)
@request.session['user_id'] = project.user_id
get :show, :id => project.to_param
end
end end

View file

@ -3,7 +3,7 @@ class TodoContainerControllerTestBase < Test::Rails::TestCase
def perform_setup(container_class, controller_class) def perform_setup(container_class, controller_class)
@controller = controller_class.new @controller = controller_class.new
@request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new
@request.session['user_id'] = users(:other_user).id login_as :other_user
@initial_count = container_class.count @initial_count = container_class.count
@container_class = container_class @container_class = container_class
end end

View file

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