FIX: Reply notifications should not appear as edited (#9965)

This commit is contained in:
Bianca Nenciu 2020-06-08 16:23:33 +03:00 committed by GitHub
parent cb13152a43
commit 052c91770f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 3 deletions

View File

@ -101,7 +101,7 @@ class PostAlerter
if post.topic.private_message?
notify_pm_users(post, reply_to_user, notified)
elsif notify_about_reply?(post)
notify_post_users(post, notified)
notify_post_users(post, notified, new_record: new_record)
end
end
@ -566,7 +566,7 @@ class PostAlerter
end
end
def notify_post_users(post, notified, include_category_watchers: true, include_tag_watchers: true)
def notify_post_users(post, notified, include_category_watchers: true, include_tag_watchers: true, new_record: false)
return unless post.topic
warn_if_not_sidekiq
@ -627,7 +627,7 @@ class PostAlerter
already_seen_user_ids = Set.new TopicUser.where(topic_id: post.topic.id).where("highest_seen_post_number >= ?", post.post_number).pluck(:user_id)
each_user_in_batches(notify) do |user|
notification_type = already_seen_user_ids.include?(user.id) ? Notification.types[:edited] : Notification.types[:posted]
notification_type = !new_record && already_seen_user_ids.include?(user.id) ? Notification.types[:edited] : Notification.types[:posted]
opts = {}
opts[:display_username] = post.last_editor.username if notification_type == Notification.types[:edited]
create_notification(user, notification_type, post, opts)

View File

@ -1130,6 +1130,7 @@ describe PostAlerter do
fab!(:post) { Fabricate(:post, topic: topic) }
fab!(:last_editor) { Fabricate(:user) }
fab!(:tag) { Fabricate(:tag) }
fab!(:category) { Fabricate(:category) }
it 'creates single edit notification when post is modified' do
TopicUser.create!(user_id: user.id, topic_id: topic.id, notification_level: TopicUser.notification_levels[:watching], highest_seen_post_number: post.post_number)
@ -1142,5 +1143,26 @@ describe PostAlerter do
PostAlerter.new.notify_post_users(post, [])
expect(Notification.count).to eq(1)
end
it 'creates posted notification when Sidekiq is slow' do
CategoryUser.set_notification_level_for_category(user, CategoryUser.notification_levels[:watching], category.id)
post = PostCreator.create!(
Fabricate(:user),
title: "one of my first topics",
raw: "one of my first posts",
category: category.id
)
TopicUser.change(user, post.topic_id, highest_seen_post_number: post.post_number)
# Manually run job after the user read the topic to simulate a slow
# Sidekiq.
job_args = Jobs::PostAlert.jobs[0]['args'][0]
expect { Jobs::PostAlert.new.execute(job_args.with_indifferent_access) }
.to change { Notification.count }.by(1)
expect(Notification.last.notification_type).to eq(Notification.types[:posted])
end
end
end