add controller tests

This commit is contained in:
2026-01-23 12:20:31 +01:00
parent dea0ef508a
commit 35c29749fb
16 changed files with 515 additions and 51 deletions
@@ -0,0 +1,36 @@
require "test_helper"
class Admin::DashboardControllerTest < ActionDispatch::IntegrationTest
test "should redirect to login when not authenticated" do
get admin_root_path
assert_redirected_to login_path
follow_redirect!
assert_select ".bg-red-50", /You must be logged in/
end
test "should redirect to root when logged in as non-admin" do
login_as(users(:contributor_user))
get admin_root_path
assert_redirected_to root_path
assert_equal "You must be an administrator to access this page.", flash[:alert]
end
test "should redirect to root when logged in as reviewer" do
login_as(users(:reviewer_user))
get admin_root_path
assert_redirected_to root_path
assert_equal "You must be an administrator to access this page.", flash[:alert]
end
test "should show dashboard when logged in as admin" do
login_as(users(:admin_user))
get admin_root_path
assert_response :success
end
test "should show admin dashboard path" do
login_as(users(:admin_user))
get admin_dashboard_path
assert_response :success
end
end
@@ -0,0 +1,116 @@
require "test_helper"
class Admin::InvitationsControllerTest < ActionDispatch::IntegrationTest
test "should redirect to login when not authenticated" do
get admin_invitations_path
assert_redirected_to login_path
end
test "should redirect to root when logged in as non-admin" do
login_as(users(:contributor_user))
get admin_invitations_path
assert_redirected_to root_path
end
test "should show invitations index when logged in as admin" do
login_as(users(:admin_user))
get admin_invitations_path
assert_response :success
end
test "should get new invitation page when logged in as admin" do
login_as(users(:admin_user))
get new_admin_invitation_path
assert_response :success
end
test "should create invitation when logged in as admin" do
login_as(users(:admin_user))
assert_difference("User.count", 1) do
post admin_invitations_path, params: {
user: {
email: "newuser@example.com",
name: "New User",
role: "contributor",
primary_language: "en"
}
}
end
assert_redirected_to admin_invitations_path
new_user = User.find_by(email: "newuser@example.com")
assert_not_nil new_user
assert_not_nil new_user.invitation_token
assert_not_nil new_user.invitation_sent_at
assert_nil new_user.invitation_accepted_at
assert_equal users(:admin_user).id, new_user.invited_by_id
end
test "should not create invitation with invalid data" do
login_as(users(:admin_user))
assert_no_difference("User.count") do
post admin_invitations_path, params: {
user: {
email: "",
name: "New User",
role: "contributor",
primary_language: "en"
}
}
end
assert_response :unprocessable_entity
end
test "should cancel pending invitation when logged in as admin" do
login_as(users(:admin_user))
assert_difference("User.count", -1) do
delete admin_invitation_path(users(:pending_invitation))
end
assert_redirected_to admin_invitations_path
end
test "should not cancel accepted invitation" do
login_as(users(:admin_user))
assert_no_difference("User.count") do
delete admin_invitation_path(users(:contributor_user))
end
assert_redirected_to admin_invitations_path
follow_redirect!
assert_select ".bg-red-50", /Cannot cancel an accepted invitation/
end
test "should not allow non-admin to create invitation" do
login_as(users(:contributor_user))
assert_no_difference("User.count") do
post admin_invitations_path, params: {
user: {
email: "newuser@example.com",
name: "New User",
role: "contributor",
primary_language: "en"
}
}
end
assert_redirected_to root_path
end
test "should not allow non-admin to cancel invitation" do
login_as(users(:contributor_user))
assert_no_difference("User.count") do
delete admin_invitation_path(users(:pending_invitation))
end
assert_redirected_to root_path
end
end
@@ -0,0 +1,68 @@
require "test_helper"
class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
test "should redirect to login when not authenticated" do
get admin_users_path
assert_redirected_to login_path
end
test "should redirect to root when logged in as non-admin" do
login_as(users(:contributor_user))
get admin_users_path
assert_redirected_to root_path
end
test "should show users index when logged in as admin" do
login_as(users(:admin_user))
get admin_users_path
assert_response :success
end
test "should get edit page for user when logged in as admin" do
login_as(users(:admin_user))
get edit_admin_user_path(users(:contributor_user))
assert_response :success
end
test "should update user role when logged in as admin" do
login_as(users(:admin_user))
patch admin_user_path(users(:contributor_user)), params: {
user: { role: "reviewer" }
}
assert_redirected_to admin_users_path
assert_equal "reviewer", users(:contributor_user).reload.role
end
test "should delete user when logged in as admin" do
login_as(users(:admin_user))
# Delete reviewer_user who has no associated records
assert_difference("User.count", -1) do
delete admin_user_path(users(:reviewer_user))
end
assert_redirected_to admin_users_path
end
test "should not allow non-admin to update user" do
login_as(users(:contributor_user))
patch admin_user_path(users(:reviewer_user)), params: {
user: { role: "admin" }
}
assert_redirected_to root_path
end
test "should not allow non-admin to delete user" do
login_as(users(:contributor_user))
assert_no_difference("User.count") do
delete admin_user_path(users(:reviewer_user))
end
assert_redirected_to root_path
end
end