2013-02-05 14:16:51 -05:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe EmailToken do
|
2013-02-25 11:42:20 -05:00
|
|
|
|
2014-12-31 09:55:03 -05:00
|
|
|
it { is_expected.to validate_presence_of :user_id }
|
|
|
|
it { is_expected.to validate_presence_of :email }
|
|
|
|
it { is_expected.to belong_to :user }
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
|
|
|
|
context '#create' do
|
2013-07-11 18:47:06 -04:00
|
|
|
let(:user) { Fabricate(:user, active: false) }
|
2013-02-05 14:16:51 -05:00
|
|
|
let!(:original_token) { user.email_tokens.first }
|
|
|
|
let!(:email_token) { user.email_tokens.create(email: 'bubblegum@adevnturetime.ooo') }
|
|
|
|
|
|
|
|
it 'should create the email token' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token).to be_present
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2014-07-14 10:16:24 -04:00
|
|
|
it 'should downcase the email' do
|
|
|
|
token = user.email_tokens.create(email: "UpperCaseSoWoW@GMail.com")
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(token.email).to eq "uppercasesowow@gmail.com"
|
2014-07-14 10:16:24 -04:00
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
it 'is valid' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token).to be_valid
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'has a token' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token.token).to be_present
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'is not confirmed' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token).to_not be_confirmed
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'is not expired' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token).to_not be_expired
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'marks the older token as expired' do
|
|
|
|
original_token.reload
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(original_token).to be_expired
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context '#confirm' do
|
|
|
|
|
2013-07-11 18:47:06 -04:00
|
|
|
let(:user) { Fabricate(:user, active: false) }
|
2013-02-05 14:16:51 -05:00
|
|
|
let(:email_token) { user.email_tokens.first }
|
|
|
|
|
|
|
|
it 'returns nil with a nil token' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(nil)).to be_blank
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns nil with a made up token' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(EmailToken.generate_token)).to be_blank
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns nil unless the token is the right length' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm('a')).to be_blank
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns nil when a token is expired' do
|
|
|
|
email_token.update_column(:expired, true)
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
2013-02-25 11:42:20 -05:00
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
it 'returns nil when a token is older than a specific time' do
|
2014-07-01 19:08:25 -04:00
|
|
|
SiteSetting.email_token_valid_hours = 10
|
|
|
|
email_token.update_column(:created_at, 11.hours.ago)
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
2013-02-25 11:42:20 -05:00
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
context 'taken email address' do
|
|
|
|
|
|
|
|
before do
|
|
|
|
@other_user = Fabricate(:coding_horror)
|
|
|
|
email_token.update_attribute :email, @other_user.email
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns nil when the email has been taken since the token has been generated' do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'welcome message' do
|
|
|
|
it 'sends a welcome message when the user is activated' do
|
|
|
|
user = EmailToken.confirm(email_token.token)
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(user.send_welcome_message).to eq true
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
context "when using the code a second time" do
|
|
|
|
|
|
|
|
it "doesn't send the welcome message" do
|
2014-07-01 19:08:25 -04:00
|
|
|
SiteSetting.email_token_grace_period_hours = 1
|
|
|
|
EmailToken.confirm(email_token.token)
|
2013-02-05 14:16:51 -05:00
|
|
|
user = EmailToken.confirm(email_token.token)
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(user.send_welcome_message).to eq false
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'success' do
|
|
|
|
|
|
|
|
let!(:confirmed_user) { EmailToken.confirm(email_token.token) }
|
|
|
|
|
|
|
|
it "returns the correct user" do
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(confirmed_user).to eq user
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'marks the user as active' do
|
|
|
|
confirmed_user.reload
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(confirmed_user).to be_active
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'marks the token as confirmed' do
|
|
|
|
email_token.reload
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(email_token).to be_confirmed
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2014-03-04 14:03:04 -05:00
|
|
|
it "can be confirmed again" do
|
|
|
|
EmailToken.stubs(:confirm_valid_after).returns(1.hour.ago)
|
|
|
|
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(email_token.token)).to eq user
|
2014-03-04 14:03:04 -05:00
|
|
|
|
|
|
|
# Unless `confirm_valid_after` has passed
|
|
|
|
EmailToken.stubs(:confirm_valid_after).returns(1.hour.from_now)
|
2014-12-31 09:55:03 -05:00
|
|
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
2014-03-04 14:03:04 -05:00
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
2014-12-31 09:55:03 -05:00
|
|
|
|