UX: order categories based on latest activity for all page styles ()

follow up on 32db3ac2
This commit is contained in:
Maja Komel 2019-03-19 09:35:32 +01:00 committed by Régis Hanol
parent 0d9bc0aaa6
commit 714a0d87df
2 changed files with 8 additions and 26 deletions

@ -77,13 +77,8 @@ class CategoryList
if SiteSetting.fixed_category_positions
@categories = @categories.order(:position, :id)
elsif !SiteSetting.fixed_category_positions && SiteSetting.desktop_category_page_style == "categories_and_latest_topics"
@categories = @categories.includes(:latest_post).order("posts.created_at DESC NULLS LAST").order('categories.id ASC')
else
@categories = @categories.order('COALESCE(categories.posts_week, 0) DESC')
.order('COALESCE(categories.posts_month, 0) DESC')
.order('COALESCE(categories.posts_year, 0) DESC')
.order('id ASC')
@categories = @categories.includes(:latest_post).order("posts.created_at DESC NULLS LAST").order('categories.id ASC')
end
@categories = @categories.to_a

@ -147,35 +147,22 @@ describe CategoryList do
context 'fixed_category_positions is disabled' do
before do
SiteSetting.fixed_category_positions = false
SiteSetting.desktop_category_page_style = "categories_and_top_topics"
end
it "returns categories in order of activity" do
cat1 = Fabricate(:category, position: 0, posts_week: 1, posts_month: 1, posts_year: 1)
cat2 = Fabricate(:category, position: 1, posts_week: 2, posts_month: 1, posts_year: 1)
expect(category_ids).to eq([cat2.id, cat1.id])
post1 = Fabricate(:post, created_at: 1.hour.ago)
post2 = Fabricate(:post, created_at: 1.day.ago)
post3 = Fabricate(:post, created_at: 1.week.ago)
cat1 = Fabricate(:category, position: 0, latest_post_id: post2.id)
cat2 = Fabricate(:category, position: 1, latest_post_id: post3.id)
cat3 = Fabricate(:category, position: 1, latest_post_id: post1.id)
expect(category_ids).to eq([cat3.id, cat1.id, cat2.id])
end
it "returns categories in order of id when there's no activity" do
cat1, cat2 = Fabricate(:category, position: 1), Fabricate(:category, position: 0)
expect(category_ids).to eq([cat1.id, cat2.id])
end
context "when using categories_and_latest_topics layout" do
before do
SiteSetting.desktop_category_page_style = "categories_and_latest_topics"
end
it "returns categories in order of latest activity" do
post1 = Fabricate(:post, created_at: 1.hour.ago)
post2 = Fabricate(:post, created_at: 1.day.ago)
post3 = Fabricate(:post, created_at: 1.week.ago)
cat1 = Fabricate(:category, position: 0, latest_post_id: post2.id)
cat2 = Fabricate(:category, position: 1, latest_post_id: post3.id)
cat3 = Fabricate(:category, position: 1, latest_post_id: post1.id)
expect(category_ids).to eq([cat3.id, cat1.id, cat2.id])
end
end
end
end