diff --git a/app/models/topic.rb b/app/models/topic.rb index 171c7fd066c..7a370a92616 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -918,8 +918,10 @@ class Topic < ActiveRecord::Base sql = <<SQL SELECT 1 FROM topic_allowed_groups tg -JOIN group_archived_messages gm ON gm.topic_id = tg.topic_id AND gm.group_id = tg.group_id - WHERE tg.group_id IN (SELECT g.id FROM group_users g WHERE g.user_id = :user_id) +JOIN group_archived_messages gm + ON gm.topic_id = tg.topic_id AND + gm.group_id = tg.group_id + WHERE tg.group_id IN (SELECT g.group_id FROM group_users g WHERE g.user_id = :user_id) AND tg.topic_id = :topic_id UNION ALL @@ -930,7 +932,6 @@ WHERE tu.user_id = :user_id AND tu.topic_id = :topic_id SQL User.exec_sql(sql, user_id: user.id, topic_id: id).to_a.length > 0 - end TIME_TO_FIRST_RESPONSE_SQL ||= <<-SQL diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index b5d15f36e54..3799738ad16 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -1568,6 +1568,20 @@ describe Topic do expect(Guardian.new(walter).can_see?(group_private_topic)).to be_truthy end end + end + it "Correctly sets #message_archived?" do + topic = Fabricate(:private_message_topic) + user = topic.user + + expect(topic.message_archived?(user)).to eq(false) + + group = Fabricate(:group) + group.add(user) + + TopicAllowedGroup.create!(topic_id: topic.id, group_id: group.id) + GroupArchivedMessage.create!(topic_id: topic.id, group_id: group.id) + + expect(topic.message_archived?(user)).to eq(true) end end