mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 13:53: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
|
||||
categories_and_latest
|
||||
categories_and_top
|
||||
categories_and_hot
|
||||
show
|
||||
redirect
|
||||
find_by_slug
|
||||
|
@ -17,7 +18,14 @@ class CategoriesController < ApplicationController
|
|||
|
||||
before_action :fetch_category, only: %i[show update destroy visible_groups]
|
||||
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]
|
||||
|
||||
SYMMETRICAL_CATEGORIES_TO_TOPICS_FACTOR = 1.5
|
||||
|
@ -74,6 +82,10 @@ class CategoriesController < ApplicationController
|
|||
categories_and_topics(:top)
|
||||
end
|
||||
|
||||
def categories_and_hot
|
||||
categories_and_topics(:hot)
|
||||
end
|
||||
|
||||
def move
|
||||
guardian.ensure_can_create_category!
|
||||
|
||||
|
@ -650,6 +662,9 @@ class CategoriesController < ApplicationController
|
|||
SiteSetting.top_page_default_timeframe.to_sym,
|
||||
)
|
||||
@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
|
||||
|
||||
@topic_list
|
||||
|
|
|
@ -1215,6 +1215,7 @@ Discourse::Application.routes.draw do
|
|||
|
||||
get "categories_and_latest" => "categories#categories_and_latest"
|
||||
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/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")
|
||||
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
|
||||
it "returns the top topic from the private category when the user is a member" do
|
||||
restricted_group = Fabricate(:group)
|
||||
|
@ -1072,6 +1083,26 @@ RSpec.describe CategoriesController do
|
|||
expect(parsed_topic).to be_present
|
||||
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
|
||||
|
||||
describe "#visible_groups" do
|
||||
|
|
Loading…
Reference in New Issue
Block a user