From 6b20d5233868478baca32dc2f6048f2ceba7cb49 Mon Sep 17 00:00:00 2001 From: Blake Erickson Date: Tue, 31 Mar 2020 20:12:51 -0600 Subject: [PATCH] FIX: Staged users getting user_linked and user_quoted emails This fix ensures that if a staged user is linked to or quoted they won't be emailed about it. A staged user could email into a category, and another user could quote them inside of a completely different category and we don't want a staged user to receive an email for this. Bug report: https://meta.discourse.org/t/-/145202/9 --- app/services/notification_emailer.rb | 1 + spec/services/notification_emailer_spec.rb | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/services/notification_emailer.rb b/app/services/notification_emailer.rb index 40e044105d6..db51246e3db 100644 --- a/app/services/notification_emailer.rb +++ b/app/services/notification_emailer.rb @@ -90,6 +90,7 @@ class NotificationEmailer user = notification.user return unless user.active? || user.staged? return if SiteSetting.must_approve_users? && !user.approved? && !user.staged? + return if user.staged? && (type == :user_linked || type == :user_quoted) return unless EMAILABLE_POST_TYPES.include?(post_type) diff --git a/spec/services/notification_emailer_spec.rb b/spec/services/notification_emailer_spec.rb index e28e17201d9..9ca6d409575 100644 --- a/spec/services/notification_emailer_spec.rb +++ b/spec/services/notification_emailer_spec.rb @@ -36,17 +36,24 @@ describe NotificationEmailer do NotificationEmailer.process_notification(notification) end - it "enqueues a job if the user is staged" do + it "enqueues a job if the user is staged for non-linked and non-quoted types" do notification.user.staged = true - Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type)) + if type == :user_linked || type == :user_quoted + Jobs.expects(:enqueue_in).with(delay, :user_email, has_entry(type: type)).never + else + Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type)) + end NotificationEmailer.process_notification(notification) end - it "enqueues a job if the user is staged even if site requires user approval" do - SiteSetting.must_approve_users = true - + it "enqueues a job if the user is staged even if site requires user approval for non-linked and non-quoted typed" do notification.user.staged = true - Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type)) + SiteSetting.must_approve_users = true + if type == :user_linked || type == :user_quoted + Jobs.expects(:enqueue_in).with(delay, :user_email, has_entry(type: type)).never + else + Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type)) + end NotificationEmailer.process_notification(notification) end end