Files
sanasto-wiki/test/controllers/sessions_controller_test.rb

106 lines
2.7 KiB
Ruby

require "test_helper"
class SessionsControllerTest < ActionDispatch::IntegrationTest
test "should get login page" do
get login_path
assert_response :success
assert_select "h1", "Sign in"
assert_select "input[type=email]"
assert_select "input[type=password]"
end
test "should redirect to admin if already logged in as admin" do
login_as(users(:admin_user))
get login_path
assert_redirected_to admin_root_path
end
test "should redirect to root if already logged in as non-admin" do
login_as(users(:contributor_user))
get login_path
assert_redirected_to root_path
end
test "should login with valid credentials" do
post login_path, params: {
email: "admin@example.com",
password: "password123456"
}
assert_redirected_to admin_root_path
assert_equal users(:admin_user).id, session[:user_id]
follow_redirect!
assert_select ".bg-green-50", /Welcome back/
end
test "should login contributor and redirect to root" do
post login_path, params: {
email: "contributor@example.com",
password: "password123456"
}
assert_redirected_to root_path
assert_equal users(:contributor_user).id, session[:user_id]
end
test "should not login with invalid email" do
post login_path, params: {
email: "nonexistent@example.com",
password: "password123456"
}
assert_response :unprocessable_entity
assert_nil session[:user_id]
assert_select ".bg-red-50", /Invalid email or password/
end
test "should not login with invalid password" do
post login_path, params: {
email: "admin@example.com",
password: "wrongpassword"
}
assert_response :unprocessable_entity
assert_nil session[:user_id]
assert_select ".bg-red-50", /Invalid email or password/
end
test "should handle email with whitespace and case insensitivity" do
post login_path, params: {
email: " ADMIN@EXAMPLE.COM ",
password: "password123456"
}
assert_redirected_to admin_root_path
assert_equal users(:admin_user).id, session[:user_id]
end
test "should not login user with pending invitation" do
post login_path, params: {
email: "pending@example.com",
password: "password123456"
}
assert_response :unprocessable_entity
assert_nil session[:user_id]
assert_select ".bg-red-50", /Your account is pending/
end
test "should logout and redirect to root" do
login_as(users(:admin_user))
delete logout_path
assert_redirected_to root_path
assert_nil session[:user_id]
assert_equal "You have been logged out.", flash[:notice]
end
test "should logout even when not logged in" do
delete logout_path
assert_redirected_to root_path
assert_nil session[:user_id]
end
end