mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 16:33:44 +08:00
DEV: Add categories_and_hot Route (#29948)
This PR adds a route to categories_and_hot and methods in categories_controller.
This commit is contained in:
parent
b4406861ae
commit
f186e3e80b
|
@ -7,6 +7,7 @@ class CategoriesController < ApplicationController
|
||||||
index
|
index
|
||||||
categories_and_latest
|
categories_and_latest
|
||||||
categories_and_top
|
categories_and_top
|
||||||
|
categories_and_hot
|
||||||
show
|
show
|
||||||
redirect
|
redirect
|
||||||
find_by_slug
|
find_by_slug
|
||||||
|
@ -17,7 +18,14 @@ class CategoriesController < ApplicationController
|
||||||
|
|
||||||
before_action :fetch_category, only: %i[show update destroy visible_groups]
|
before_action :fetch_category, only: %i[show update destroy visible_groups]
|
||||||
before_action :initialize_staff_action_logger, only: %i[create update destroy]
|
before_action :initialize_staff_action_logger, only: %i[create update destroy]
|
||||||
skip_before_action :check_xhr, only: %i[index categories_and_latest categories_and_top redirect]
|
skip_before_action :check_xhr,
|
||||||
|
only: %i[
|
||||||
|
index
|
||||||
|
categories_and_latest
|
||||||
|
categories_and_top
|
||||||
|
categories_and_hot
|
||||||
|
redirect
|
||||||
|
]
|
||||||
skip_before_action :verify_authenticity_token, only: %i[search]
|
skip_before_action :verify_authenticity_token, only: %i[search]
|
||||||
|
|
||||||
SYMMETRICAL_CATEGORIES_TO_TOPICS_FACTOR = 1.5
|
SYMMETRICAL_CATEGORIES_TO_TOPICS_FACTOR = 1.5
|
||||||
|
@ -74,6 +82,10 @@ class CategoriesController < ApplicationController
|
||||||
categories_and_topics(:top)
|
categories_and_topics(:top)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def categories_and_hot
|
||||||
|
categories_and_topics(:hot)
|
||||||
|
end
|
||||||
|
|
||||||
def move
|
def move
|
||||||
guardian.ensure_can_create_category!
|
guardian.ensure_can_create_category!
|
||||||
|
|
||||||
|
@ -650,6 +662,9 @@ class CategoriesController < ApplicationController
|
||||||
SiteSetting.top_page_default_timeframe.to_sym,
|
SiteSetting.top_page_default_timeframe.to_sym,
|
||||||
)
|
)
|
||||||
@topic_list.more_topics_url = url_for(top_path)
|
@topic_list.more_topics_url = url_for(top_path)
|
||||||
|
when "categories_and_hot_topics"
|
||||||
|
@topic_list = TopicQuery.new(current_user, topic_options).list_hot
|
||||||
|
@topic_list.more_topics_url = url_for(hot_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
@topic_list
|
@topic_list
|
||||||
|
|
|
@ -1215,6 +1215,7 @@ Discourse::Application.routes.draw do
|
||||||
|
|
||||||
get "categories_and_latest" => "categories#categories_and_latest"
|
get "categories_and_latest" => "categories#categories_and_latest"
|
||||||
get "categories_and_top" => "categories#categories_and_top"
|
get "categories_and_top" => "categories#categories_and_top"
|
||||||
|
get "categories_and_hot" => "categories#categories_and_hot"
|
||||||
|
|
||||||
get "c/:id/show" => "categories#show"
|
get "c/:id/show" => "categories#show"
|
||||||
get "c/:id/visible_groups" => "categories#visible_groups"
|
get "c/:id/visible_groups" => "categories#visible_groups"
|
||||||
|
|
|
@ -1053,6 +1053,17 @@ RSpec.describe CategoriesController do
|
||||||
expect(response.parsed_body["topic_list"]["more_topics_url"]).to start_with("/top")
|
expect(response.parsed_body["topic_list"]["more_topics_url"]).to start_with("/top")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "includes more_topics_url in the response to /categories_and_hot" do
|
||||||
|
SiteSetting.categories_topics = 5
|
||||||
|
|
||||||
|
Fabricate.times(10, :topic, category: category, like_count: 1000, posts_count: 100)
|
||||||
|
TopicHotScore.update_scores
|
||||||
|
|
||||||
|
get "/categories_and_hot.json"
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
expect(response.parsed_body["topic_list"]["more_topics_url"]).to start_with("/hot")
|
||||||
|
end
|
||||||
|
|
||||||
describe "Showing top topics from private categories" do
|
describe "Showing top topics from private categories" do
|
||||||
it "returns the top topic from the private category when the user is a member" do
|
it "returns the top topic from the private category when the user is a member" do
|
||||||
restricted_group = Fabricate(:group)
|
restricted_group = Fabricate(:group)
|
||||||
|
@ -1072,6 +1083,26 @@ RSpec.describe CategoriesController do
|
||||||
expect(parsed_topic).to be_present
|
expect(parsed_topic).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "Showing hot topics from private categories" do
|
||||||
|
it "returns the hot topic from the private category when the user is a member" do
|
||||||
|
restricted_group = Fabricate(:group)
|
||||||
|
private_cat = Fabricate(:private_category, group: restricted_group)
|
||||||
|
private_topic = Fabricate(:topic, category: private_cat, like_count: 1000, posts_count: 100)
|
||||||
|
TopicHotScore.update_scores
|
||||||
|
restricted_group.add(user)
|
||||||
|
sign_in(user)
|
||||||
|
|
||||||
|
get "/categories_and_hot.json"
|
||||||
|
parsed_topic =
|
||||||
|
response
|
||||||
|
.parsed_body
|
||||||
|
.dig("topic_list", "topics")
|
||||||
|
.detect { |t| t.dig("id") == private_topic.id }
|
||||||
|
|
||||||
|
expect(parsed_topic).to be_present
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#visible_groups" do
|
describe "#visible_groups" do
|
||||||
|
|
Loading…
Reference in New Issue
Block a user