Merge pull request #4033 from tgxworld/fix_job_exception

FIX: Topic and Post may be `nil`.
This commit is contained in:
Régis Hanol 2016-02-24 10:08:31 +01:00
commit 6e090c5bd1
2 changed files with 8 additions and 2 deletions

View file

@ -50,7 +50,7 @@ module Jobs
NOTIFICATIONS_SENT_BY_MAILING_LIST ||= Set.new %w{posted replied mentioned group_mentioned quoted} NOTIFICATIONS_SENT_BY_MAILING_LIST ||= Set.new %w{posted replied mentioned group_mentioned quoted}
def message_for_email(user, post, type, notification, def message_for_email(user, post, type, notification,
notification_type=nil, notification_data_hash=nil, notification_type=nil, notification_data_hash=nil,
email_token=nil, to_address=nil) email_token=nil, to_address=nil)
@ -86,7 +86,7 @@ module Jobs
end end
if user.user_option.mailing_list_mode? && if user.user_option.mailing_list_mode? &&
!post.topic.private_message? && (!post.try(:topic).try(:private_message?)) &&
NOTIFICATIONS_SENT_BY_MAILING_LIST.include?(email_args[:notification_type]) NOTIFICATIONS_SENT_BY_MAILING_LIST.include?(email_args[:notification_type])
# no need to log a reason when the mail was already sent via the mailing list job # no need to log a reason when the mail was already sent via the mailing list job
return [nil, nil] return [nil, nil]

View file

@ -200,6 +200,12 @@ describe Jobs::UserEmail do
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_id: notification.id, post_id: post.id) Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_id: notification.id, post_id: post.id)
# other times, we only pass the type of notification # other times, we only pass the type of notification
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id) Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id)
# When post is nil
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted")
# When post does not have a topic
post = Fabricate(:post)
post.topic.destroy
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post)
end end
it "doesn't send the email if the post has been user deleted" do it "doesn't send the email if the post has been user deleted" do