Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-24 12:08:32 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-24 12:08:32 +0300
commit9b984f55eef568b6a15c3a125e0cf66f35678e5a (patch)
treeee7e1eb42f27400dd74bb44bb595263af2d72fc1 /spec/services/notification_service_spec.rb
parent83a9f472b8b523619519a1834176165c9f1532f7 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/notification_service_spec.rb')
-rw-r--r--spec/services/notification_service_spec.rb146
1 files changed, 78 insertions, 68 deletions
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index 80b8d36aa07..1f1ccff2ba8 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -10,10 +10,12 @@ describe NotificationService, :mailer do
let(:notification) { described_class.new }
let(:assignee) { create(:user) }
- around do |example|
- perform_enqueued_jobs do
- example.run
- end
+ around(:example, :deliver_mails_inline) do |example|
+ # This is a temporary `around` hook until all the examples check the
+ # background jobs queue instead of the delivered emails array.
+ # `perform_enqueued_jobs` makes the ActiveJob jobs (e.g. mailer jobs) run inline
+ # compared to `Sidekiq::Testing.inline!` which makes the Sidekiq jobs run inline.
+ perform_enqueued_jobs { example.run }
end
shared_examples 'altered milestone notification on issue' do
@@ -187,26 +189,41 @@ describe NotificationService, :mailer do
describe 'Keys' do
describe '#new_key' do
let(:key_options) { {} }
- let!(:key) { create(:personal_key, key_options) }
+ let!(:key) { build_stubbed(:personal_key, key_options) }
+
+ subject { notification.new_key(key) }
- it { expect(notification.new_key(key)).to be_truthy }
+ it "sends email to key owner" do
+ expect { subject }.to have_enqueued_email(key.id, mail: "new_ssh_key_email")
+ end
- describe 'never emails the ghost user' do
+ describe "never emails the ghost user" do
let(:key_options) { { user: User.ghost } }
- it { should_not_email_anyone }
+ it "does not send email to key owner" do
+ expect { subject }.not_to have_enqueued_email(key.id, mail: "new_ssh_key_email")
+ end
end
end
end
describe 'GpgKeys' do
describe '#new_gpg_key' do
- let!(:key) { create(:gpg_key) }
+ let(:key_options) { {} }
+ let(:key) { create(:gpg_key, key_options) }
+
+ subject { notification.new_gpg_key(key) }
+
+ it "sends email to key owner" do
+ expect { subject }.to have_enqueued_email(key.id, mail: "new_gpg_key_email")
+ end
- it { expect(notification.new_gpg_key(key)).to be_truthy }
+ describe "never emails the ghost user" do
+ let(:key_options) { { user: User.ghost } }
- it 'sends email to key owner' do
- expect { notification.new_gpg_key(key) }.to change { ActionMailer::Base.deliveries.size }.by(1)
+ it "does not send email to key owner" do
+ expect { subject }.not_to have_enqueued_email(key.id, mail: "new_gpg_key_email")
+ end
end
end
end
@@ -215,10 +232,10 @@ describe NotificationService, :mailer do
describe '#access_token_about_to_expire' do
let_it_be(:user) { create(:user) }
- it 'sends email to the token owner' do
- expect(notification.access_token_about_to_expire(user)).to be_truthy
+ subject { notification.access_token_about_to_expire(user) }
- should_email user
+ it 'sends email to the token owner' do
+ expect { subject }.to have_enqueued_email(user, mail: "access_token_about_to_expire_email")
end
end
end
@@ -231,6 +248,8 @@ describe NotificationService, :mailer do
let(:author) { create(:user) }
let(:note) { create(:note_on_issue, author: author, noteable: issue, project_id: issue.project_id, note: '@mention referenced, @unsubscribed_mentioned and @outsider also') }
+ subject { notification.new_note(note) }
+
before do
build_team(project)
project.add_maintainer(issue.author)
@@ -260,32 +279,23 @@ describe NotificationService, :mailer do
reset_delivered_emails!
end
- it do
- expect(SentNotification).to receive(:record).with(issue, any_args).exactly(10).times
-
- notification.new_note(note)
-
- should_email(@u_watcher)
- should_email(note.noteable.author)
- should_email(note.noteable.assignees.first)
- should_email(@u_custom_global)
- should_email(@u_mentioned)
- should_email(@subscriber)
- should_email(@watcher_and_subscriber)
- should_email(@subscribed_participant)
- should_email(@u_custom_off)
- should_email(@unsubscribed_mentioned)
- should_not_email(@u_guest_custom)
- should_not_email(@u_guest_watcher)
- should_not_email(note.author)
- should_not_email(@u_participating)
- should_not_email(@u_disabled)
- should_not_email(@unsubscriber)
- should_not_email(@u_outsider_mentioned)
- should_not_email(@u_lazy_participant)
+ it 'sends emails to recipients' do
+ subject
+
+ expect_delivery_jobs_count(10)
+ expect_enqueud_email(@u_watcher.id, note.id, nil, mail: "note_issue_email")
+ expect_enqueud_email(note.noteable.author.id, note.id, nil, mail: "note_issue_email")
+ expect_enqueud_email(note.noteable.assignees.first.id, note.id, nil, mail: "note_issue_email")
+ expect_enqueud_email(@u_custom_global.id, note.id, nil, mail: "note_issue_email")
+ expect_enqueud_email(@u_mentioned.id, note.id, "mentioned", mail: "note_issue_email")
+ expect_enqueud_email(@subscriber.id, note.id, "subscribed", mail: "note_issue_email")
+ expect_enqueud_email(@watcher_and_subscriber.id, note.id, "subscribed", mail: "note_issue_email")
+ expect_enqueud_email(@subscribed_participant.id, note.id, "subscribed", mail: "note_issue_email")
+ expect_enqueud_email(@u_custom_off.id, note.id, nil, mail: "note_issue_email")
+ expect_enqueud_email(@unsubscribed_mentioned.id, note.id, "mentioned", mail: "note_issue_email")
end
- it "emails the note author if they've opted into notifications about their activity" do
+ it "emails the note author if they've opted into notifications about their activity", :deliver_mails_inline do
note.author.notified_of_own_activity = true
notification.new_note(note)
@@ -294,7 +304,7 @@ describe NotificationService, :mailer do
expect(find_email_for(note.author)).to have_header('X-GitLab-NotificationReason', 'own_activity')
end
- it_behaves_like 'project emails are disabled' do
+ it_behaves_like 'project emails are disabled', check_delivery_jobs_queue: true do
let(:notification_target) { note }
let(:notification_trigger) { notification.new_note(note) }
end
@@ -302,21 +312,21 @@ describe NotificationService, :mailer do
it 'filters out "mentioned in" notes' do
mentioned_note = SystemNoteService.cross_reference(mentioned_issue, issue, issue.author)
+ reset_delivered_emails!
- expect(Notify).not_to receive(:note_issue_email)
notification.new_note(mentioned_note)
+
+ expect_no_delivery_jobs
end
context 'participating' do
context 'by note' do
before do
- reset_delivered_emails!
note.author = @u_lazy_participant
note.save
- notification.new_note(note)
end
- it { should_not_email(@u_lazy_participant) }
+ it { expect { subject }.not_to have_enqueued_email(@u_lazy_participant.id, note.id, mail: "note_issue_email") }
end
end
end
@@ -335,7 +345,7 @@ describe NotificationService, :mailer do
end
shared_examples 'new note notifications' do
- it do
+ it 'sends notifications', :deliver_mails_inline do
notification.new_note(note)
should_email(note.noteable.author)
@@ -359,7 +369,7 @@ describe NotificationService, :mailer do
it_behaves_like 'new note notifications'
- it_behaves_like 'project emails are disabled' do
+ it_behaves_like 'project emails are disabled', check_delivery_jobs_queue: true do
let(:notification_target) { note }
let(:notification_trigger) { notification.new_note(note) }
end
@@ -378,13 +388,13 @@ describe NotificationService, :mailer do
notification.new_note(note)
- should_email(user)
+ expect_enqueud_email(user.id, note.id, nil, mail: "note_issue_email")
end
end
end
end
- context 'confidential issue note' do
+ context 'confidential issue note', :deliver_mails_inline do
let(:project) { create(:project, :public) }
let(:author) { create(:user) }
let(:assignee) { create(:user) }
@@ -441,7 +451,7 @@ describe NotificationService, :mailer do
end
end
- context 'issue note mention' do
+ context 'issue note mention', :deliver_mails_inline do
let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project, assignees: [assignee]) }
let(:mentioned_issue) { create(:issue, assignees: issue.assignees) }
@@ -507,7 +517,7 @@ describe NotificationService, :mailer do
end
end
- context 'project snippet note' do
+ context 'project snippet note', :deliver_mails_inline do
let!(:project) { create(:project, :public) }
let(:snippet) { create(:project_snippet, project: project, author: create(:user)) }
let(:author) { create(:user) }
@@ -551,7 +561,7 @@ describe NotificationService, :mailer do
end
end
- context 'personal snippet note' do
+ context 'personal snippet note', :deliver_mails_inline do
let(:snippet) { create(:personal_snippet, :public, author: @u_snippet_author) }
let(:note) { create(:note_on_personal_snippet, noteable: snippet, note: '@mentioned note', author: @u_note_author) }
@@ -600,7 +610,7 @@ describe NotificationService, :mailer do
end
end
- context 'commit note' do
+ context 'commit note', :deliver_mails_inline do
let(:project) { create(:project, :public, :repository) }
let(:note) { create(:note_on_commit, project: project) }
@@ -659,7 +669,7 @@ describe NotificationService, :mailer do
end
end
- context "merge request diff note" do
+ context "merge request diff note", :deliver_mails_inline do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:merge_request) { create(:merge_request, source_project: project, assignees: [user], author: create(:user)) }
@@ -691,11 +701,11 @@ describe NotificationService, :mailer do
end
end
- describe '#send_new_release_notifications' do
+ describe '#send_new_release_notifications', :deliver_mails_inline, :sidekiq_inline do
context 'when recipients for a new release exist' do
let(:release) { create(:release) }
- it 'calls new_release_email for each relevant recipient', :sidekiq_might_not_need_inline do
+ it 'calls new_release_email for each relevant recipient' do
user_1 = create(:user)
user_2 = create(:user)
user_3 = create(:user)
@@ -712,7 +722,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Participating project notification settings have priority over group and global settings if available' do
+ describe 'Participating project notification settings have priority over group and global settings if available', :deliver_mails_inline do
let!(:group) { create(:group) }
let!(:maintainer) { group.add_owner(create(:user, username: 'maintainer')).user }
let!(:user1) { group.add_developer(create(:user, username: 'user_with_project_and_custom_setting')).user }
@@ -770,7 +780,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Issues' do
+ describe 'Issues', :deliver_mails_inline do
let(:group) { create(:group) }
let(:project) { create(:project, :public, namespace: group) }
let(:another_project) { create(:project, :public, namespace: group) }
@@ -1423,7 +1433,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Merge Requests' do
+ describe 'Merge Requests', :deliver_mails_inline do
let(:group) { create(:group) }
let(:project) { create(:project, :public, :repository, namespace: group) }
let(:another_project) { create(:project, :public, namespace: group) }
@@ -1898,7 +1908,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Projects' do
+ describe 'Projects', :deliver_mails_inline do
let(:project) { create(:project) }
before do
@@ -1989,7 +1999,7 @@ describe NotificationService, :mailer do
end
end
- describe 'GroupMember' do
+ describe 'GroupMember', :deliver_mails_inline do
let(:added_user) { create(:user) }
describe '#new_access_request' do
@@ -2075,7 +2085,7 @@ describe NotificationService, :mailer do
end
end
- describe 'ProjectMember' do
+ describe 'ProjectMember', :deliver_mails_inline do
let(:project) { create(:project) }
let(:added_user) { create(:user) }
@@ -2236,7 +2246,7 @@ describe NotificationService, :mailer do
end
end
- context 'guest user in private project' do
+ context 'guest user in private project', :deliver_mails_inline do
let(:private_project) { create(:project, :private) }
let(:guest) { create(:user) }
let(:developer) { create(:user) }
@@ -2291,7 +2301,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Pipelines' do
+ describe 'Pipelines', :deliver_mails_inline do
describe '#pipeline_finished' do
let(:project) { create(:project, :public, :repository) }
let(:u_member) { create(:user) }
@@ -2507,7 +2517,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Pages domains' do
+ describe 'Pages domains', :deliver_mails_inline do
let_it_be(:project, reload: true) { create(:project) }
let_it_be(:domain, reload: true) { create(:pages_domain, project: project) }
let_it_be(:u_blocked) { create(:user, :blocked) }
@@ -2560,7 +2570,7 @@ describe NotificationService, :mailer do
end
end
- context 'Auto DevOps notifications' do
+ context 'Auto DevOps notifications', :deliver_mails_inline do
describe '#autodevops_disabled' do
let(:owner) { create(:user) }
let(:namespace) { create(:namespace, owner: owner) }
@@ -2584,7 +2594,7 @@ describe NotificationService, :mailer do
end
end
- describe 'Repository cleanup' do
+ describe 'Repository cleanup', :deliver_mails_inline do
let(:user) { create(:user) }
let(:project) { create(:project) }
@@ -2615,7 +2625,7 @@ describe NotificationService, :mailer do
end
end
- context 'Remote mirror notifications' do
+ context 'Remote mirror notifications', :deliver_mails_inline do
describe '#remote_mirror_update_failed' do
let(:project) { create(:project) }
let(:remote_mirror) { create(:remote_mirror, project: project) }
@@ -2653,7 +2663,7 @@ describe NotificationService, :mailer do
end
end
- context 'with external authorization service' do
+ context 'with external authorization service', :deliver_mails_inline do
let(:issue) { create(:issue) }
let(:project) { issue.project }
let(:note) { create(:note, noteable: issue, project: project) }