cartodb/spec/models/carto/invitation_spec.rb
2020-06-15 10:58:47 +08:00

103 lines
3.5 KiB
Ruby

require_relative '../../spec_helper'
require_relative '../../factories/organizations_contexts'
require_relative '../../../app/models/carto/invitation'
require_relative '../../../app/controllers/carto/api/user_creations_controller'
require_relative '../../../lib/resque/user_jobs'
describe Carto::Invitation do
include_context 'organization with users helper'
describe 'creation' do
it 'fails for existing users' do
invitation = Carto::Invitation.create_new(@carto_org_user_owner, [@carto_org_user_1.email], 'hi', false)
invitation.valid?.should == false
end
it 'fails for non-owner users' do
expect do
Carto::Invitation.create_new(@carto_org_user_1, ['no@carto.com'], 'hi', false)
end.to raise_error CartoDB::InvalidUser
end
it 'fails for wrong emails' do
invitation = Carto::Invitation.create_new(@carto_org_user_owner, ['no', 'neither@'], 'hi', false)
invitation.valid?.should == false
invitation.errors[:users_emails].count.should == 2
end
it 'sends invitations' do
::Resque.expects(:enqueue).with(Resque::OrganizationJobs::Mail::Invitation, instance_of(String)).once
emails = ['w_1@carto.com', 'w_2@carto.com']
invitation = Carto::Invitation.create_new(@carto_org_user_owner, emails, 'hi', false)
invitation.inviter_user_id.should == @carto_org_user_owner.id
invitation.organization_id.should == @carto_org_user_owner.organization_id
end
end
describe 'token' do
before(:each) do
@invitation = Carto::Invitation.create_new(@carto_org_user_owner, [], 'Welcome!', false)
@invitation_2 = Carto::Invitation.create_new(@carto_org_user_owner, [], 'Welcome!', false)
end
it 'returns the same token for the same email' do
email = 'myemail@carto.com'
t1 = @invitation.token(email)
t2 = @invitation.token(email)
t1.should == t2
end
it 'returns different tokens for different emails' do
t1 = @invitation.token('email1@carto.com')
t2 = @invitation.token('email2@carto.com')
t1.should_not == t2
end
it 'returns different tokens using the same email with different invitations' do
email = 'myemail@carto.com'
t1 = @invitation.token(email)
t2 = @invitation_2.token(email)
t1.should_not == t2
end
it 'has a length > 10' do
@invitation.token('email1@carto.com').length.should > 10
end
end
describe '#use' do
before(:each) do
@valid_email = 'email1@carto.com'
@valid_email_2 = 'email2@carto.com'
@invitation = Carto::Invitation.create_new(
@carto_org_user_owner,
[@valid_email, @valid_email_2],
'Welcome!',
false
)
@token = @invitation.token(@valid_email)
@token_2 = @invitation.token(@valid_email_2)
end
it 'return true for valid emails + token' do
@invitation.use(@valid_email, @token).should == true
end
it 'return false for non valid emails' do
@invitation.use('fake@carto.com', @token).should == false
end
it 'return false for non valid tokens' do
@invitation.use(@valid_email, 'fake_token').should == false
end
it 'triggers an AlreadyUsedInvitationError if a user uses it twice' do
@invitation.use(@valid_email, @token)
@invitation.use(@valid_email_2, @token_2)
@invitation.reload
expect { @invitation.use(@valid_email, @token) }.to raise_error AlreadyUsedInvitationError
expect { @invitation.use(@valid_email_2, @token_2) }.to raise_error AlreadyUsedInvitationError
end
end
end