Skip to content

Commit

Permalink
FIX: Can't dismiss unread posts in topics of a sub-subcategory (#22870)
Browse files Browse the repository at this point in the history
This is a similar fix to 32d4810

Why this change?

Prior to this change, there is a bug in `TopicsController#bulk`
where it does not dismiss new unred posts in sub-subcategories when the
`category_id` and `include_subcategories=true` params are present. This
is because the controller did not account for sub-subcategories when
fetching the category ids of the new topics that should be dismissed.

This commit fixes the problem by relying on the `Category.subcategory_ids` class
method which accounts for sub-subcategories.
  • Loading branch information
tgxworld committed Jul 31, 2023
1 parent c4d0bbc commit fff578f
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
17 changes: 9 additions & 8 deletions app/controllers/topics_controller.rb
Expand Up @@ -1396,17 +1396,18 @@ def bulk_unread_topic_ids
topic_query.joined_topic_user,
whisperer: guardian.is_whisperer?,
).listable_topics

topics = TopicQuery.tracked_filter(topics, current_user.id) if params[:tracked].to_s == "true"

if params[:category_id]
if params[:include_subcategories]
topics = topics.where(<<~SQL, category_id: params[:category_id])
category_id in (select id FROM categories WHERE parent_category_id = :category_id) OR
category_id = :category_id
SQL
else
topics = topics.where("category_id = ?", params[:category_id])
end
category_ids =
if params[:include_subcategories]
Category.subcategory_ids(params[:category_id].to_i)
else
params[:category_id]
end

topics = topics.where(category_id: category_ids)
end

if params[:tag_name].present?
Expand Down
27 changes: 26 additions & 1 deletion spec/requests/topics_controller_spec.rb
Expand Up @@ -3516,7 +3516,7 @@ def extract_post_stream
expect(response.status).to eq(400)
end

it "can mark sub-categories unread" do
it "can dismiss sub-categories posts as read" do
sub = Fabricate(:category, parent_category_id: category.id)

topic.update!(category_id: sub.id)
Expand All @@ -3538,6 +3538,31 @@ def extract_post_stream
expect(TopicUser.get(post1.topic, post1.user).last_read_post_number).to eq(2)
end

it "can dismiss sub-subcategories posts as read" do
SiteSetting.max_category_nesting = 3

sub_category = Fabricate(:category, parent_category_id: category.id)
sub_subcategory = Fabricate(:category, parent_category_id: sub_category.id)

topic.update!(category_id: sub_subcategory.id)

post_1 = create_post(user: user, topic_id: topic.id)
post_2 = create_post(topic_id: topic.id)

put "/topics/bulk.json",
params: {
category_id: category.id,
include_subcategories: true,
filter: "unread",
operation: {
type: "dismiss_posts",
},
}

expect(response.status).to eq(200)
expect(TopicUser.get(post_1.topic, post_1.user).last_read_post_number).to eq(2)
end

it "can mark tag topics unread" do
TopicTag.create!(topic_id: topic.id, tag_id: tag.id)

Expand Down

0 comments on commit fff578f

Please sign in to comment.