Merge pull request #4737 from oblakeerickson/approve_invited_user

FIX: approve invited user
This commit is contained in:
Guo Xiang Tan 2017-03-07 21:14:34 +08:00 committed by GitHub
commit d1e587c10a
3 changed files with 41 additions and 3 deletions

View File

@ -36,6 +36,12 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
user.password = password user.password = password
end end
if !SiteSetting.must_approve_users? || (SiteSetting.must_approve_users? && invite.invited_by.staff?)
user.approved = true
user.approved_by_id = invite.invited_by_id
user.approved_at = Time.zone.now
end
user.moderator = true if invite.moderator? && invite.invited_by.staff? user.moderator = true if invite.moderator? && invite.invited_by.staff?
user.save! user.save!
@ -49,11 +55,11 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
end end
def process_invitation def process_invitation
approve_account_if_needed
add_to_private_topics_if_invited add_to_private_topics_if_invited
add_user_to_invited_topics add_user_to_invited_topics
add_user_to_groups add_user_to_groups
send_welcome_message send_welcome_message
approve_account_if_needed
notify_invitee notify_invitee
send_password_instructions send_password_instructions
delete_duplicate_invites delete_duplicate_invites
@ -109,7 +115,9 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
end end
def approve_account_if_needed def approve_account_if_needed
invited_user.approve(invite.invited_by_id, false) if get_existing_user
invited_user.approve(invite.invited_by_id, false)
end
end end
def send_password_instructions def send_password_instructions

View File

@ -9,6 +9,7 @@ describe InviteRedeemer do
expect(user.name).to eq('Walter White') expect(user.name).to eq('Walter White')
expect(user).to be_active expect(user).to be_active
expect(user.email).to eq('walter.white@email.com') expect(user.email).to eq('walter.white@email.com')
expect(user.approved).to eq(true)
end end
it "can set the password too" do it "can set the password too" do
@ -16,6 +17,7 @@ describe InviteRedeemer do
user = InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White', password) user = InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White', password)
expect(user).to have_password expect(user).to have_password
expect(user.confirm_password?(password)).to eq(true) expect(user.confirm_password?(password)).to eq(true)
expect(user.approved).to eq(true)
end end
it "raises exception with record and errors" do it "raises exception with record and errors" do
@ -37,7 +39,21 @@ describe InviteRedeemer do
let(:password) { 'know5nOthiNG'} let(:password) { 'know5nOthiNG'}
let(:invite_redeemer) { InviteRedeemer.new(invite, username, name) } let(:invite_redeemer) { InviteRedeemer.new(invite, username, name) }
it "should redeem the invite" do it "should redeem the invite if invited by staff" do
SiteSetting.must_approve_users = true
inviter = invite.invited_by
inviter.admin = true
user = invite_redeemer.redeem
expect(user.name).to eq(name)
expect(user.username).to eq(username)
expect(user.invited_by).to eq(inviter)
expect(inviter.notifications.count).to eq(1)
expect(user.approved).to eq(true)
end
it "should redeem the invite if invited by non staff but not approve" do
SiteSetting.must_approve_users = true
inviter = invite.invited_by inviter = invite.invited_by
user = invite_redeemer.redeem user = invite_redeemer.redeem
@ -45,6 +61,18 @@ describe InviteRedeemer do
expect(user.username).to eq(username) expect(user.username).to eq(username)
expect(user.invited_by).to eq(inviter) expect(user.invited_by).to eq(inviter)
expect(inviter.notifications.count).to eq(1) expect(inviter.notifications.count).to eq(1)
expect(user.approved).to eq(false)
end
it "should redeem the invite if invited by non staff and approve if staff not required to approve" do
inviter = invite.invited_by
user = invite_redeemer.redeem
expect(user.name).to eq(name)
expect(user.username).to eq(username)
expect(user.invited_by).to eq(inviter)
expect(inviter.notifications.count).to eq(1)
expect(user.approved).to eq(true)
end end
it "should not blow up if invited_by user has been removed" do it "should not blow up if invited_by user has been removed" do
@ -63,6 +91,7 @@ describe InviteRedeemer do
user = InviteRedeemer.new(invite, username, name, password).redeem user = InviteRedeemer.new(invite, username, name, password).redeem
expect(user).to have_password expect(user).to have_password
expect(user.confirm_password?(password)).to eq(true) expect(user.confirm_password?(password)).to eq(true)
expect(user.approved).to eq(true)
end end
end end
end end

View File

@ -273,6 +273,7 @@ describe Invite do
context 'inviting when must_approve_users? is enabled' do context 'inviting when must_approve_users? is enabled' do
it 'correctly activates accounts' do it 'correctly activates accounts' do
invite.invited_by = Fabricate(:admin)
SiteSetting.stubs(:must_approve_users).returns(true) SiteSetting.stubs(:must_approve_users).returns(true)
user = invite.redeem user = invite.redeem
expect(user.approved?).to eq(true) expect(user.approved?).to eq(true)