mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 10:20:58 -06:00
FIX: Correct highest post number for read topic tracking state. (#14273)
This commit is contained in:
parent
e3793e6d7c
commit
5de64b3630
@ -61,7 +61,7 @@ class TopicTrackingState
|
|||||||
group_ids = topic.category && topic.category.secure_group_ids
|
group_ids = topic.category && topic.category.secure_group_ids
|
||||||
|
|
||||||
MessageBus.publish("/new", message.as_json, group_ids: group_ids)
|
MessageBus.publish("/new", message.as_json, group_ids: group_ids)
|
||||||
publish_read(topic.id, 1, topic.user_id)
|
publish_read(topic.id, 1, topic.user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.publish_latest(topic, staff_only = false)
|
def self.publish_latest(topic, staff_only = false)
|
||||||
@ -226,8 +226,13 @@ class TopicTrackingState
|
|||||||
MessageBus.publish("/destroy", message.as_json, group_ids: group_ids)
|
MessageBus.publish("/destroy", message.as_json, group_ids: group_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.publish_read(topic_id, last_read_post_number, user_id, notification_level = nil)
|
def self.publish_read(topic_id, last_read_post_number, user, notification_level = nil)
|
||||||
highest_post_number = DB.query_single("SELECT highest_post_number FROM topics WHERE id = ?", topic_id).first
|
user_id = user.id
|
||||||
|
|
||||||
|
highest_post_number = DB.query_single(
|
||||||
|
"SELECT #{user.staff? ? "highest_staff_post_number" : "highest_post_number"} FROM topics WHERE id = ?",
|
||||||
|
topic_id
|
||||||
|
).first
|
||||||
|
|
||||||
message = {
|
message = {
|
||||||
topic_id: topic_id,
|
topic_id: topic_id,
|
||||||
|
@ -327,7 +327,12 @@ class TopicUser < ActiveRecord::Base
|
|||||||
|
|
||||||
if before_last_read < post_number
|
if before_last_read < post_number
|
||||||
# The user read at least one new post
|
# The user read at least one new post
|
||||||
TopicTrackingState.publish_read(topic_id, post_number, user.id, after)
|
TopicTrackingState.publish_read(
|
||||||
|
topic_id,
|
||||||
|
post_number,
|
||||||
|
user,
|
||||||
|
after
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
if new_posts_read > 0
|
if new_posts_read > 0
|
||||||
@ -345,7 +350,13 @@ class TopicUser < ActiveRecord::Base
|
|||||||
if (user.user_option.auto_track_topics_after_msecs || SiteSetting.default_other_auto_track_topics_after_msecs) == 0
|
if (user.user_option.auto_track_topics_after_msecs || SiteSetting.default_other_auto_track_topics_after_msecs) == 0
|
||||||
args[:new_status] = notification_levels[:tracking]
|
args[:new_status] = notification_levels[:tracking]
|
||||||
end
|
end
|
||||||
TopicTrackingState.publish_read(topic_id, post_number, user.id, args[:new_status])
|
|
||||||
|
TopicTrackingState.publish_read(
|
||||||
|
topic_id,
|
||||||
|
post_number,
|
||||||
|
user,
|
||||||
|
args[:new_status]
|
||||||
|
)
|
||||||
|
|
||||||
user.update_posts_read!(new_posts_read, mobile: opts[:mobile])
|
user.update_posts_read!(new_posts_read, mobile: opts[:mobile])
|
||||||
|
|
||||||
|
@ -40,6 +40,43 @@ describe TopicTrackingState do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.publish_read' do
|
||||||
|
it 'correctly publish read' do
|
||||||
|
message = MessageBus.track_publish(described_class.unread_channel_key(post.user.id)) do
|
||||||
|
TopicTrackingState.publish_read(post.topic_id, 1, post.user)
|
||||||
|
end.first
|
||||||
|
|
||||||
|
data = message.data
|
||||||
|
|
||||||
|
expect(message.user_ids).to contain_exactly(post.user_id)
|
||||||
|
expect(message.group_ids).to eq(nil)
|
||||||
|
expect(data["topic_id"]).to eq(post.topic_id)
|
||||||
|
expect(data["message_type"]).to eq(described_class::READ_MESSAGE_TYPE)
|
||||||
|
expect(data["payload"]["last_read_post_number"]).to eq(1)
|
||||||
|
expect(data["payload"]["highest_post_number"]).to eq(1)
|
||||||
|
expect(data["payload"]["notification_level"]).to eq(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'correctly publish read for staff' do
|
||||||
|
create_post(
|
||||||
|
raw: "this is a test post",
|
||||||
|
topic: post.topic,
|
||||||
|
post_type: Post.types[:whisper],
|
||||||
|
user: Fabricate(:admin)
|
||||||
|
)
|
||||||
|
|
||||||
|
post.user.grant_admin!
|
||||||
|
|
||||||
|
message = MessageBus.track_publish(described_class.unread_channel_key(post.user.id)) do
|
||||||
|
TopicTrackingState.publish_read(post.topic_id, 1, post.user)
|
||||||
|
end.first
|
||||||
|
|
||||||
|
data = message.data
|
||||||
|
|
||||||
|
expect(data["payload"]["highest_post_number"]).to eq(2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#publish_unread' do
|
describe '#publish_unread' do
|
||||||
it "can correctly publish unread" do
|
it "can correctly publish unread" do
|
||||||
message = MessageBus.track_publish(described_class.unread_channel_key(post.user.id)) do
|
message = MessageBus.track_publish(described_class.unread_channel_key(post.user.id)) do
|
||||||
|
Loading…
Reference in New Issue
Block a user