FIX: Only hide shared draft topics from `latest` (#6737)

Previously we were hiding them from all topic lists, which can result in
topics being "stuck" in an unread state with no easy way to clear them.
This commit is contained in:
David Taylor 2018-12-07 12:44:23 +00:00 committed by GitHub
parent 41e184280d
commit 6c71395bf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -453,6 +453,7 @@ class TopicQuery
result = remove_muted_topics(result, @user) unless options && options[:state] == "muted".freeze
result = remove_muted_categories(result, @user, exclude: options[:category])
result = remove_muted_tags(result, @user, options)
result = apply_shared_drafts(result, get_category_id(options[:category]), options)
# plugins can remove topics here:
self.class.results_filter_callbacks.each do |filter_callback|
@ -694,7 +695,6 @@ class TopicQuery
result = apply_ordering(result, options)
result = result.listable_topics.includes(:category)
result = apply_shared_drafts(result, category_id, options)
if options[:exclude_category_ids] && options[:exclude_category_ids].is_a?(Array) && options[:exclude_category_ids].size > 0
result = result.where("categories.id NOT IN (?)", options[:exclude_category_ids].map(&:to_i)).references(:categories)

View File

@ -1026,5 +1026,20 @@ describe TopicQuery do
expect(list.topics).not_to include(topic)
end
end
context "unread" do
let!(:partially_read) do
topic = Fabricate(:topic, category: shared_drafts_category)
Fabricate(:post, user: creator, topic: topic).topic
TopicUser.update_last_read(admin, topic.id, 0, 0, 0)
TopicUser.change(admin.id, topic.id, notification_level: TopicUser.notification_levels[:tracking])
topic
end
it 'does not remove topics from unread' do
expect(TopicQuery.new(admin).list_latest.topics).not_to include(partially_read) # Check we set up the topic/category correctly
expect(TopicQuery.new(admin).list_unread.topics).to include(partially_read)
end
end
end
end