mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 11:44:49 +08:00
FIX: Respect default category sort order when navigating within app (#23270)
When navigating around, we make ajax requests with a parameter like `?filter=latest`. This results in the TopicQuery being set up with `filter: "latest"` as a string. The logic introduced in fd9a5bc0
checks for equality with `:latest` and `:unseen` symbols, which didn't work correctly in this situation
This commit makes the logic detect both strings and symbols, and adds a spec for the behaviour.
This commit is contained in:
parent
34f502f68d
commit
92bc61b4be
|
@ -749,7 +749,7 @@ class TopicQuery
|
|||
# category default sort order
|
||||
sort_order, sort_ascending =
|
||||
Category.where(id: category_id).pick(:sort_order, :sort_ascending)
|
||||
if sort_order && (filter.blank? || %i[latest unseen].include?(filter))
|
||||
if sort_order && (filter.blank? || %w[latest unseen].include?(filter.to_s))
|
||||
options[:order] = sort_order
|
||||
options[:ascending] = !!sort_ascending ? "true" : "false"
|
||||
else
|
||||
|
|
|
@ -998,6 +998,13 @@ RSpec.describe TopicQuery do
|
|||
expect(topic_ids - [topic_category.id]).to eq([topic_in_cat1.id, topic_in_cat2.id])
|
||||
end
|
||||
|
||||
it "uses the category's default sort order when filter is passed as a string" do
|
||||
category.update!(sort_order: "created", sort_ascending: true)
|
||||
topic_ids =
|
||||
TopicQuery.new(user, category: category.id, filter: "latest").list_latest.topics.map(&:id)
|
||||
expect(topic_ids - [topic_category.id]).to eq([topic_in_cat1.id, topic_in_cat2.id])
|
||||
end
|
||||
|
||||
it "should apply default sort order to latest and unseen filters only" do
|
||||
category.update!(sort_order: "created", sort_ascending: true)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user