diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-08 03:09:11 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-08 03:09:11 +0300 |
commit | b89bcf56ec86e9b510ff0ae09887408e747e55f2 (patch) | |
tree | d0a9d51f4ecc4144e80f7e03ed947b7c36d7f4d3 /spec/mailers | |
parent | 9bc5f183df648e580c1d6682c2afc4ae96a28fe5 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/mailers')
-rw-r--r-- | spec/mailers/emails/profile_spec.rb | 99 |
1 files changed, 74 insertions, 25 deletions
diff --git a/spec/mailers/emails/profile_spec.rb b/spec/mailers/emails/profile_spec.rb index 764186dc226..8ac1f15d67e 100644 --- a/spec/mailers/emails/profile_spec.rb +++ b/spec/mailers/emails/profile_spec.rb @@ -212,52 +212,101 @@ RSpec.describe Emails::Profile do end end - describe 'notification email for expired ssh key' do - let_it_be(:user) { create(:user) } + describe 'SSH key notification' do + let_it_be_with_reload(:user) { create(:user) } let_it_be(:fingerprints) { ["aa:bb:cc:dd:ee:zz"] } - context 'when valid' do - subject { Notify.ssh_key_expired_email(user, fingerprints) } + shared_examples 'is sent to the user' do + it { is_expected.to deliver_to user.email } + end + + shared_examples 'has the correct subject' do |subject_text| + it { is_expected.to have_subject subject_text } + end + + shared_examples 'has the correct body text' do |body_text| + it { is_expected.to have_body_text body_text } + end + + shared_examples 'includes a link to ssh key page' do + it { is_expected.to have_body_text /#{profile_keys_url}/ } + end + + shared_examples 'includes the email reason' do + it { is_expected.to have_body_text /You're receiving this email because of your account on localhost/ } + end + shared_examples 'valid use case' do it_behaves_like 'an email sent from GitLab' it_behaves_like 'it should not have Gmail Actions links' it_behaves_like 'a user cannot unsubscribe through footer link' + it_behaves_like 'is sent to the user' + it_behaves_like 'includes a link to ssh key page' + it_behaves_like 'includes the email reason' + end - it 'is sent to the user' do - is_expected.to deliver_to user.email + shared_examples 'does not send email' do + it do + expect { subject }.not_to change { ActionMailer::Base.deliveries.count } end + end - it 'has the correct subject' do - is_expected.to have_subject /Your SSH key has expired/ + shared_context 'block user' do + before do + user.block! end + end - it 'mentions the ssh keu has expired' do - is_expected.to have_body_text /Your SSH keys with the following fingerprints has expired/ - end + context 'notification email for expired ssh key' do + context 'when valid' do + subject { Notify.ssh_key_expired_email(user, fingerprints) } - it 'includes a link to ssh key page' do - is_expected.to have_body_text /#{profile_keys_url}/ + include_examples 'valid use case' + + it_behaves_like 'has the correct subject', /Your SSH key has expired/ + it_behaves_like 'has the correct body text', /Your SSH keys with the following fingerprints has expired/ end - it 'includes the email reason' do - is_expected.to have_body_text /You're receiving this email because of your account on localhost/ + context 'when invalid' do + context 'when user does not exist' do + subject { Notify.ssh_key_expired_email(nil, fingerprints) } + + it_behaves_like 'does not send email' + end + + context 'when user is not active' do + subject { Notify.ssh_key_expired_email(user, fingerprints) } + + include_context 'block user' + + it_behaves_like 'does not send email' + end end end - context 'when invalid' do - context 'when user does not exist' do - it do - expect { Notify.ssh_key_expired_email(nil) }.not_to change { ActionMailer::Base.deliveries.count } - end + context 'notification email for expiring ssh key' do + context 'when valid' do + subject { Notify.ssh_key_expiring_soon_email(user, fingerprints) } + + include_examples 'valid use case' + + it_behaves_like 'has the correct subject', /Your SSH key is expiring soon/ + it_behaves_like 'has the correct body text', /Your SSH keys with the following fingerprints are scheduled to expire soon/ end - context 'when user is not active' do - before do - user.block! + context 'when invalid' do + context 'when user does not exist' do + subject { Notify.ssh_key_expiring_soon_email(nil, fingerprints) } + + it_behaves_like 'does not send email' end - it do - expect { Notify.ssh_key_expired_email(user) }.not_to change { ActionMailer::Base.deliveries.count } + context 'when user is not active' do + subject { Notify.ssh_key_expiring_soon_email(user, fingerprints) } + + include_context 'block user' + + it_behaves_like 'does not send email' end end end |