From b68860ee287cb087cabed60b1f13bec097665a53 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 17 May 2016 23:42:15 +0800 Subject: [PATCH] FIX: Do not send email when user of the post has been deleted. (#4228) --- app/jobs/regular/user_email.rb | 9 +++++---- config/locales/server.en.yml | 1 + spec/jobs/user_email_spec.rb | 6 ++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/jobs/regular/user_email.rb b/app/jobs/regular/user_email.rb index 10bdac0477e..ec0a8c651f8 100644 --- a/app/jobs/regular/user_email.rb +++ b/app/jobs/regular/user_email.rb @@ -175,10 +175,11 @@ module Jobs # If this email has a related post, don't send an email if it's been deleted or seen recently. def skip_email_for_post(post, user) if post - return I18n.t('email_log.topic_nil') if post.topic.blank? - return I18n.t('email_log.post_deleted') if post.user_deleted? - return I18n.t('email_log.user_suspended') if (user.suspended? && !post.user.try(:staff?)) - return I18n.t('email_log.already_read') if PostTiming.where(topic_id: post.topic_id, post_number: post.post_number, user_id: user.id).present? + return I18n.t('email_log.topic_nil') if post.topic.blank? + return I18n.t('email_log.post_user_deleted') if post.user.blank? + return I18n.t('email_log.post_deleted') if post.user_deleted? + return I18n.t('email_log.user_suspended') if (user.suspended? && !post.user.try(:staff?)) + return I18n.t('email_log.already_read') if PostTiming.where(topic_id: post.topic_id, post_number: post.post_number, user_id: user.id).present? else false end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 57a68ba5b2e..fc948da1ca6 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -2413,6 +2413,7 @@ en: spam_hosts: "This new user tried to create multiple posts with links to the same domain (%{domain}). See the `newuser_spam_host_threshold` site setting." email_log: + post_user_deleted: "User of the post has been deleted." no_user: "Can't find user with id %{user_id}" anonymous_user: "User is anonymous" suspended_not_pm: "User is suspended, not a message" diff --git a/spec/jobs/user_email_spec.rb b/spec/jobs/user_email_spec.rb index 709254a1ad8..e6e2dfb6c6b 100644 --- a/spec/jobs/user_email_spec.rb +++ b/spec/jobs/user_email_spec.rb @@ -125,6 +125,12 @@ describe Jobs::UserEmail do Jobs::UserEmail.new.execute(type: :private_message, user_id: user.id, post_id: post.id) end + it "doesn't send the email if user of the post has been deleted" do + Email::Sender.any_instance.expects(:send).never + post.update_attributes!(user_id: nil) + Jobs::UserEmail.new.execute(type: :user_replied, user_id: user.id, post_id: post.id) + end + context 'user is suspended' do it "doesn't send email for a pm from a regular user" do Email::Sender.any_instance.expects(:send).never