Merge pull request #2501 from techAPJ/bulk-invite-5

FEATURE: redeem Invite when user sign up
This commit is contained in:
Sam 2014-07-07 15:14:35 +10:00
commit ee3f7362e6
4 changed files with 34 additions and 0 deletions

View file

@ -57,6 +57,8 @@ class EmailToken < ActiveRecord::Base
user.save! user.save!
end end
end end
# redeem invite, if available
Invite.redeem_from_email(user.email)
user user
rescue ActiveRecord::RecordInvalid rescue ActiveRecord::RecordInvalid
# If the user's email is already taken, just return nil (failure) # If the user's email is already taken, just return nil (failure)

View file

@ -130,6 +130,14 @@ class Invite < ActiveRecord::Base
i i
end end
def self.redeem_from_email(email)
invite = Invite.find_by(email: Email.downcase(email))
if invite
InviteRedeemer.new(invite).redeem
end
invite
end
def self.base_directory def self.base_directory
File.join(Rails.root, "public", "csv", RailsMultisite::ConnectionManagement.current_db) File.join(Rails.root, "public", "csv", RailsMultisite::ConnectionManagement.current_db)
end end

View file

@ -19,6 +19,10 @@ InviteRedeemer = Struct.new(:invite) do
# extracted from User cause it is very specific to invites # extracted from User cause it is very specific to invites
def self.create_user_from_invite(invite) def self.create_user_from_invite(invite)
user_exists = User.find_by_email(invite.email)
return user if user_exists
username = UserNameSuggester.suggest(invite.email) username = UserNameSuggester.suggest(invite.email)
DiscourseHub.username_operation do DiscourseHub.username_operation do

View file

@ -349,4 +349,24 @@ describe Invite do
result.should be_valid result.should be_valid
end end
end end
describe '.redeem_from_email' do
let(:inviter) { Fabricate(:user) }
let(:invite) { Fabricate(:invite, invited_by: inviter, email: 'test@example.com', user_id: nil) }
let(:user) { Fabricate(:user, email: invite.email) }
it 'redeems the invite from email' do
result = Invite.redeem_from_email(user.email)
invite.reload
invite.should be_redeemed
end
it 'does not redeem the invite if email does not match' do
result = Invite.redeem_from_email('test24@example.com')
invite.reload
invite.should_not be_redeemed
end
end
end end