discourse/spec/system/viewing_category_spec.rb
Alan Guo Xiang Tan e3977f84a3
FIX: Incorrect topic tracking state count when a new category is created (#20506)
What is the problem?

We have a hidden site setting `show_category_definitions_in_topic_lists`
which is set to false by default. What this means is that category
definition topics are not shown in the topic list by default. Only the
category definition topic for the category being viewed will be shown.
However, we have a bug where we would show that a category has new
topics when a new child category along with its category definition
topic is created even though the topic list does not list the child
category's category definition topic.

What is the fix here?

This commit fixes the problem by shipping down an additional
`is_category_topic` attribute in `TopicTrackingStateItemSerializer` when
the `show_category_definitions_in_topic_lists` site setting has been set
to false. With the new attribute, we can then exclude counting child
categories' category definition topics when counting new and unread
counts for a category.
2023-03-06 10:13:10 +08:00

56 lines
1.7 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "Viewing a category", type: :system, js: true do
fab!(:category) { Fabricate(:category) }
fab!(:user) { Fabricate(:user) }
let(:category_page) { PageObjects::Pages::Category.new }
let(:topic_list) { PageObjects::Components::TopicList.new }
describe "when a new child category is created with a new category topic" do
fab!(:child_category) { Fabricate(:category, parent_category: category) }
fab!(:child_category_topic) do
Fabricate(:topic, category: child_category).tap do |topic|
child_category.update!(topic: topic)
end
end
it "should show a new count on the parent and child category when 'show_category_definitions_in_topic_lists' is true" do
SiteSetting.show_category_definitions_in_topic_lists = true
sign_in(user)
category_page.visit(category)
category_page.click_new
expect(topic_list).to have_topics(count: 1)
expect(topic_list).to have_topic(child_category_topic)
category_page.visit(child_category)
category_page.click_new
expect(topic_list).to have_topics(count: 1)
expect(topic_list).to have_topic(child_category_topic)
end
it "should only show a new count on the child category when 'show_category_definitions_in_topic_lists' site setting is false" do
SiteSetting.show_category_definitions_in_topic_lists = false
sign_in(user)
category_page.visit(category)
expect(category_page).to have_no_new_topics
category_page.visit(child_category)
expect(category_page).to have_new_topics
category_page.click_new
expect(topic_list).to have_topics(count: 1)
expect(topic_list).to have_topic(child_category_topic)
end
end
end