diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index dcc74ecfc31..fbe1b782d55 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -97,11 +97,10 @@ class SiteSetting < ActiveRecord::Base ].flatten.to_set end - def self.min_redirected_to_top_period - TopTopic.sorted_periods.each do |p| - period = p[0] - return period if TopTopic.topics_per_period(period) >= SiteSetting.topics_per_period_in_top_page - end + def self.min_redirected_to_top_period(duration) + period = ListController.best_period_for(duration) + return period if TopTopic.topics_per_period(period) >= SiteSetting.topics_per_period_in_top_page + # not enough topics nil end diff --git a/app/models/user_option.rb b/app/models/user_option.rb index 1071026c183..99be107d215 100644 --- a/app/models/user_option.rb +++ b/app/models/user_option.rb @@ -90,7 +90,7 @@ class UserOption < ActiveRecord::Base # top must be in the top_menu return unless SiteSetting.top_menu =~ /(^|\|)top(\||$)/i # not enough topics - return unless period = SiteSetting.min_redirected_to_top_period + return unless period = SiteSetting.min_redirected_to_top_period(1.days.ago) if !user.seen_before? || (user.trust_level == 0 && !redirected_to_top_yet?) update_last_redirected_to_top! diff --git a/spec/models/site_setting_spec.rb b/spec/models/site_setting_spec.rb index c2f358c2c93..78589dc4ade 100644 --- a/spec/models/site_setting_spec.rb +++ b/spec/models/site_setting_spec.rb @@ -69,6 +69,40 @@ describe SiteSetting do end end + describe "min_redirected_to_top_period" do + + context "has_enough_top_topics" do + + before do + SiteSetting.topics_per_period_in_top_page = 2 + SiteSetting.top_page_default_timeframe = 'daily' + TopTopic.stubs(:topics_per_period).with(:daily).returns(3) + TopTopic.refresh! + end + + it "should_return_a_time_period" do + expect(SiteSetting.min_redirected_to_top_period(1.days.ago)).to eq(:daily) + end + + end + + context "does_not_have_enough_top_topics" do + + before do + SiteSetting.topics_per_period_in_top_page = 20 + SiteSetting.top_page_default_timeframe = 'daily' + TopTopic.stubs(:topics_per_period).with(:daily).returns(1) + TopTopic.refresh! + end + + it "should_return_a_time_period" do + expect(SiteSetting.min_redirected_to_top_period(1.days.ago)).to eq(nil) + end + + end + + end + describe "scheme" do before do SiteSetting.force_https = true