mirror of
https://github.com/we-promise/sure.git
synced 2026-05-08 21:25:00 +00:00
* Fix:Bug:invite-code-inproper-burn * added docstring according to coderabbitai warning * updated feedback for merge
122 lines
3.7 KiB
Ruby
122 lines
3.7 KiB
Ruby
require "test_helper"
|
|
|
|
class RegistrationsControllerTest < ActionDispatch::IntegrationTest
|
|
test "new" do
|
|
get new_registration_url
|
|
assert_response :success
|
|
end
|
|
|
|
test "create redirects to correct URL" do
|
|
post registration_url, params: { user: {
|
|
email: "john@example.com",
|
|
password: "Password1!" } }
|
|
|
|
assert_redirected_to root_url
|
|
end
|
|
|
|
test "first user of instance becomes super_admin" do
|
|
# Clear all users to simulate fresh instance
|
|
User.destroy_all
|
|
|
|
assert_difference "User.count", +1 do
|
|
post registration_url, params: { user: {
|
|
email: "firstuser@example.com",
|
|
password: "Password1!" } }
|
|
end
|
|
|
|
first_user = User.find_by(email: "firstuser@example.com")
|
|
assert first_user.super_admin?, "First user should be super_admin"
|
|
end
|
|
|
|
test "subsequent users become admin not super_admin" do
|
|
# Ensure users exist from fixtures
|
|
assert User.exists?
|
|
|
|
assert_difference "User.count", +1 do
|
|
post registration_url, params: { user: {
|
|
email: "seconduser@example.com",
|
|
password: "Password1!" } }
|
|
end
|
|
|
|
new_user = User.find_by(email: "seconduser@example.com")
|
|
assert new_user.admin?, "Subsequent user should be admin"
|
|
assert_not new_user.super_admin?, "Subsequent user should not be super_admin"
|
|
end
|
|
|
|
test "create when hosted requires an invite code" do
|
|
with_env_overrides REQUIRE_INVITE_CODE: "true" do
|
|
assert_no_difference "User.count" do
|
|
post registration_url, params: { user: {
|
|
email: "john@example.com",
|
|
password: "Password1!" } }
|
|
assert_redirected_to new_registration_url
|
|
|
|
post registration_url, params: { user: {
|
|
email: "john@example.com",
|
|
password: "Password1!",
|
|
invite_code: "foo" } }
|
|
assert_redirected_to new_registration_url
|
|
end
|
|
|
|
assert_difference "User.count", +1 do
|
|
invite_code = InviteCode.generate!
|
|
post registration_url, params: { user: {
|
|
email: "john@example.com",
|
|
password: "Password1!",
|
|
invite_code: invite_code } }
|
|
assert_redirected_to root_url
|
|
assert_not InviteCode.exists?(token: invite_code)
|
|
end
|
|
end
|
|
end
|
|
|
|
test "invite code is not consumed when signup fails validation" do
|
|
with_env_overrides REQUIRE_INVITE_CODE: "true" do
|
|
invite_code = InviteCode.generate!
|
|
|
|
assert_no_difference "User.count" do
|
|
post registration_url, params: { user: {
|
|
email: "validationfail@example.com",
|
|
password: "weak",
|
|
invite_code: invite_code } }
|
|
end
|
|
|
|
assert_response :unprocessable_entity
|
|
assert InviteCode.exists?(token: invite_code)
|
|
end
|
|
end
|
|
|
|
test "invalid invite code does not create a user" do
|
|
with_env_overrides REQUIRE_INVITE_CODE: "true" do
|
|
assert_no_difference "User.count" do
|
|
post registration_url, params: { user: {
|
|
email: "valid@example.com",
|
|
password: "Password1!",
|
|
invite_code: "invalid-token-that-does-not-exist" } }
|
|
end
|
|
|
|
assert_redirected_to new_registration_url
|
|
end
|
|
end
|
|
|
|
test "creating account from guest invitation assigns guest role and intro layout" do
|
|
invitation = invitations(:one)
|
|
invitation.update!(role: "guest", email: "guest-signup@example.com")
|
|
|
|
assert_difference "User.count", +1 do
|
|
post registration_url, params: { user: {
|
|
email: invitation.email,
|
|
password: "Password1!",
|
|
invitation: invitation.token
|
|
} }
|
|
end
|
|
|
|
created_user = User.find_by(email: invitation.email)
|
|
assert_equal "guest", created_user.role
|
|
assert created_user.ui_layout_intro?
|
|
assert_not created_user.show_sidebar?
|
|
assert_not created_user.show_ai_sidebar?
|
|
assert created_user.ai_enabled?
|
|
end
|
|
end
|