FIX: User archive messages should only publish to the user.

This commit is contained in:
Guo Xiang Tan 2018-03-07 11:28:29 +08:00
parent 82619c2445
commit bef35f7be5
3 changed files with 22 additions and 23 deletions

View File

@ -246,7 +246,7 @@ SQL
sql sql
end end
def self.publish_private_message(topic, archived: false, post: nil, group_archived: false) def self.publish_private_message(topic, user_id: user_id, user_archive: false, post: nil, group_archived: false)
return unless topic.private_message? return unless topic.private_message?
channels = {} channels = {}
@ -256,8 +256,10 @@ SQL
channels["/private-messages/sent"] = [post.user_id] channels["/private-messages/sent"] = [post.user_id]
end end
if archived if user_archive
channels["/private-messages/archive"] = allowed_user_ids user_ids = [user_id]
channels["/private-messages/archive"] = user_ids
channels["/private-messages/inbox"] = user_ids
else else
topic.allowed_groups.each do |group| topic.allowed_groups.each do |group|
channel = "/private-messages/group/#{group.name.downcase}" channel = "/private-messages/group/#{group.name.downcase}"
@ -274,13 +276,11 @@ SQL
topic_id: topic.id topic_id: topic.id
} }
admin_ids = User.admins.human_users.pluck(:id)
channels.each do |channel, user_ids| channels.each do |channel, user_ids|
MessageBus.publish( MessageBus.publish(
channel, channel,
message.as_json, message.as_json,
user_ids: user_ids | admin_ids user_ids: user_ids
) )
end end
end end

View File

@ -14,7 +14,7 @@ class UserArchivedMessage < ActiveRecord::Base
UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all
trigger(:move_to_inbox, user_id, topic_id) trigger(:move_to_inbox, user_id, topic_id)
MessageBus.publish("/topic/#{topic_id}", { type: "move_to_inbox" }, user_ids: [user_id]) MessageBus.publish("/topic/#{topic_id}", { type: "move_to_inbox" }, user_ids: [user_id])
publish_topic_tracking_state(topic, false) publish_topic_tracking_state(topic, user_id)
end end
def self.archive!(user_id, topic) def self.archive!(user_id, topic)
@ -23,7 +23,7 @@ class UserArchivedMessage < ActiveRecord::Base
UserArchivedMessage.create!(user_id: user_id, topic_id: topic_id) UserArchivedMessage.create!(user_id: user_id, topic_id: topic_id)
trigger(:archive_message, user_id, topic_id) trigger(:archive_message, user_id, topic_id)
MessageBus.publish("/topic/#{topic_id}", { type: "archived" }, user_ids: [user_id]) MessageBus.publish("/topic/#{topic_id}", { type: "archived" }, user_ids: [user_id])
publish_topic_tracking_state(topic, true) publish_topic_tracking_state(topic, user_id)
end end
def self.trigger(event, user_id, topic_id) def self.trigger(event, user_id, topic_id)
@ -36,9 +36,9 @@ class UserArchivedMessage < ActiveRecord::Base
private private
def self.publish_topic_tracking_state(topic, archived) def self.publish_topic_tracking_state(topic, user_id)
TopicTrackingState.publish_private_message( TopicTrackingState.publish_private_message(
topic, archived: archived topic, user_id: user_id, user_archive: true
) )
end end
end end

View File

@ -87,7 +87,7 @@ describe TopicTrackingState do
expect(message.channel).to eq('/private-messages/inbox') expect(message.channel).to eq('/private-messages/inbox')
expect(message.data["topic_id"]).to eq(private_message_topic.id) expect(message.data["topic_id"]).to eq(private_message_topic.id)
expect(message.user_ids).to eq(allowed_users.map(&:id) << admin.id) expect(message.user_ids).to eq(allowed_users.map(&:id))
end end
end end
@ -114,7 +114,7 @@ describe TopicTrackingState do
end end
expect(message.data["topic_id"]).to eq(private_message_topic.id) expect(message.data["topic_id"]).to eq(private_message_topic.id)
expect(message.user_ids).to eq(group.users.map(&:id) << admin.id) expect(message.user_ids).to eq(group.users.map(&:id))
end end
end end
end end
@ -148,7 +148,7 @@ describe TopicTrackingState do
end end
expect(message.data["topic_id"]).to eq(private_message_topic.id) expect(message.data["topic_id"]).to eq(private_message_topic.id)
expect(message.user_ids).to eq(user_ids << admin.id) expect(message.user_ids).to eq(user_ids)
end end
end end
end end
@ -158,20 +158,19 @@ describe TopicTrackingState do
messages = MessageBus.track_publish do messages = MessageBus.track_publish do
TopicTrackingState.publish_private_message( TopicTrackingState.publish_private_message(
private_message_topic, private_message_topic,
archived: true user_id: private_message_post.user_id,
user_archive: true
) )
end end
expect(messages.count).to eq(1) ["/private-messages/archive", "/private-messages/inbox"].each do |channel|
message = messages.find do |message|
message.channel = channel
end
message = messages.first expect(message.data["topic_id"]).to eq(private_message_topic.id)
expect(message.user_ids).to eq([private_message_post.user_id])
expect(message.channel).to eq('/private-messages/archive') end
expect(message.data["topic_id"]).to eq(private_message_topic.id)
expect(message.user_ids).to eq(
private_message_topic.allowed_users.map(&:id) << admin.id
)
end end
end end