FIX: Approves user when redeeming an invite for invites only sites (#16984)

When a site has `SiteSetting.invite_only` enabled, we create a
`ReviewableUser`record when activating a user if the user is not
approved. Therefore, we need to approve the user when redeeming an
invite.

There are some uncertainties surrounding why a `ReviewableRecord` is
created for a user in an invites only site but this commit does not seek
to address that.

Follow-up to 7c4e2d33fa
This commit is contained in:
Alan Guo Xiang Tan
2022-06-03 11:43:52 +08:00
committed by GitHub
parent f94682e2c4
commit 0fa0094531
2 changed files with 30 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
# frozen_string_literal: true
describe InviteRedeemer do
fab!(:admin) { Fabricate(:admin) }
describe '.create_user_from_invite' do
it "should be created correctly" do
@@ -83,6 +84,32 @@ describe InviteRedeemer do
expect(user.approved).to eq(false)
expect(user.active).to eq(false)
end
it "approves and actives user when redeeming an invite with email token and SiteSetting.invite_only is enabled" do
SiteSetting.invite_only = true
Jobs.run_immediately!
invite = Fabricate(:invite,
invited_by: admin,
email: 'walter.white@email.com',
emailed_status: Invite.emailed_status_types[:sent],
)
user = InviteRedeemer.create_user_from_invite(
invite: invite,
email: invite.email,
email_token: invite.email_token,
username: 'walter',
name: 'Walter White'
)
expect(user.name).to eq("Walter White")
expect(user.username).to eq("walter")
expect(user.email).to eq("walter.white@email.com")
expect(user.approved).to eq(true)
expect(user.active).to eq(true)
expect(ReviewableUser.count).to eq(0)
end
end
describe "#redeem" do