117 lines
3.0 KiB
Ruby
117 lines
3.0 KiB
Ruby
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
|