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
This commit is contained in:
Blake Erickson 2020-03-31 20:12:51 -06:00
parent 45296a8fe9
commit 6b20d52338
2 changed files with 14 additions and 6 deletions

View File

@ -90,6 +90,7 @@ class NotificationEmailer
user = notification.user user = notification.user
return unless user.active? || user.staged? return unless user.active? || user.staged?
return if SiteSetting.must_approve_users? && !user.approved? && !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) return unless EMAILABLE_POST_TYPES.include?(post_type)

View File

@ -36,17 +36,24 @@ describe NotificationEmailer do
NotificationEmailer.process_notification(notification) NotificationEmailer.process_notification(notification)
end 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 notification.user.staged = 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)) Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type))
end
NotificationEmailer.process_notification(notification) NotificationEmailer.process_notification(notification)
end end
it "enqueues a job if the user is staged even if site requires user approval" do it "enqueues a job if the user is staged even if site requires user approval for non-linked and non-quoted typed" do
SiteSetting.must_approve_users = true
notification.user.staged = true notification.user.staged = true
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)) Jobs.expects(:enqueue_in).with(delay, :user_email, NotificationEmailer::EmailUser.notification_params(notification, type))
end
NotificationEmailer.process_notification(notification) NotificationEmailer.process_notification(notification)
end end
end end