diff options
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r-- | spec/models/user_spec.rb | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c41f62e68d2..b16a76211eb 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1172,8 +1172,8 @@ RSpec.describe User do @user.update!(email: 'new_primary@example.com') @user.reload - expect(@user.emails.count).to eq 2 - expect(@user.emails.pluck(:email)).to match_array([@secondary.email, 'primary@example.com']) + expect(@user.emails.count).to eq 3 + expect(@user.emails.pluck(:email)).to match_array([@secondary.email, 'primary@example.com', 'new_primary@example.com']) end context 'when the first email was unconfirmed and the second email gets confirmed' do @@ -1594,6 +1594,66 @@ RSpec.describe User do end end + describe 'saving primary email to the emails table' do + context 'when calling skip_reconfirmation! while updating the primary email' do + let(:user) { create(:user, email: 'primary@example.com') } + + it 'adds the new email to emails' do + user.skip_reconfirmation! + user.update!(email: 'new_primary@example.com') + + expect(user.email).to eq('new_primary@example.com') + expect(user.unconfirmed_email).to be_nil + expect(user).to be_confirmed + expect(user.emails.pluck(:email)).to include('new_primary@example.com') + expect(user.emails.find_by(email: 'new_primary@example.com')).to be_confirmed + end + end + + context 'when the email is changed but not confirmed' do + let(:user) { create(:user, email: 'primary@example.com') } + + it 'does not add the new email to emails yet' do + user.update!(email: 'new_primary@example.com') + + expect(user.unconfirmed_email).to eq('new_primary@example.com') + expect(user.email).to eq('primary@example.com') + expect(user).to be_confirmed + expect(user.emails.pluck(:email)).not_to include('new_primary@example.com') + end + end + + context 'when the user is created as not confirmed' do + let(:user) { create(:user, :unconfirmed, email: 'primary@example.com') } + + it 'does not add the email to emails yet' do + expect(user).not_to be_confirmed + expect(user.emails.pluck(:email)).not_to include('primary@example.com') + end + end + + context 'when the user is created as confirmed' do + let(:user) { create(:user, email: 'primary@example.com', confirmed_at: DateTime.now.utc) } + + it 'adds the email to emails' do + expect(user).to be_confirmed + expect(user.emails.pluck(:email)).to include('primary@example.com') + end + end + + context 'when skip_confirmation! is called' do + let(:user) { build(:user, :unconfirmed, email: 'primary@example.com') } + + it 'adds the email to emails' do + user.skip_confirmation! + user.save! + + expect(user).to be_confirmed + expect(user.emails.pluck(:email)).to include('primary@example.com') + end + end + end + describe '#force_confirm' do let(:expired_confirmation_sent_at) { Date.today - described_class.confirm_within - 7.days } let(:extant_confirmation_sent_at) { Date.today } |