From 74b5d063f97c9e4d6e9fe349476dfc9beabfb305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Wed, 20 Jan 2016 17:55:58 +0100 Subject: [PATCH] FIX: enabling suppress_from_homepage should only remove the category from the homepage --- app/controllers/list_controller.rb | 16 ++++++++------- spec/controllers/list_controller_spec.rb | 26 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index cd59e3098..a5aa226c0 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -54,15 +54,17 @@ class ListController < ApplicationController list_opts.merge!(options) if options user = list_target_user - if filter == :latest && params[:category].blank? - list_opts[:no_definitions] = true - end - - if filter.to_s == current_homepage - list_opts.merge!(exclude_category_ids: get_excluded_category_ids(list_opts[:category])) + if params[:category].blank? + if filter == :latest + list_opts[:no_definitions] = true + end + if filter.to_s == current_homepage + list_opts[:exclude_category_ids] = get_excluded_category_ids(list_opts[:category]) + end end list = TopicQuery.new(user, list_opts).public_send("list_#{filter}") + list.more_topics_url = construct_url_with(:next, list_opts) list.prev_topics_url = construct_url_with(:prev, list_opts) if Discourse.anonymous_filters.include?(filter) @@ -165,7 +167,7 @@ class ListController < ApplicationController top_options[:per_page] = SiteSetting.topics_per_period_in_top_page if "top".freeze == current_homepage - top_options.merge!(exclude_category_ids: get_excluded_category_ids(top_options[:category])) + top_options[:exclude_category_ids] = get_excluded_category_ids(top_options[:category]) end user = list_target_user diff --git a/spec/controllers/list_controller_spec.rb b/spec/controllers/list_controller_spec.rb index 59c20da02..e2de6b623 100644 --- a/spec/controllers/list_controller_spec.rb +++ b/spec/controllers/list_controller_spec.rb @@ -248,4 +248,30 @@ describe ListController do end + describe "categories suppression" do + let(:category_one) { Fabricate(:category) } + let(:sub_category) { Fabricate(:category, parent_category: category_one, suppress_from_homepage: true) } + let!(:topic_in_sub_category) { Fabricate(:topic, category: sub_category) } + + let(:category_two) { Fabricate(:category, suppress_from_homepage: true) } + let!(:topic_in_category_two) { Fabricate(:topic, category: category_two) } + + it "suppresses categories from the homepage" do + get SiteSetting.homepage, format: :json + expect(response).to be_success + + topic_titles = JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["title"] } + expect(topic_titles).not_to include(topic_in_sub_category.title, topic_in_category_two.title) + end + + it "does not suppress" do + get SiteSetting.homepage, category: category_one.id, format: :json + expect(response).to be_success + + topic_titles = JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["title"] } + expect(topic_titles).to include(topic_in_sub_category.title) + end + + end + end