From a4cd0684813ea36a3c0198ac1b89212abe8d796e Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Wed, 25 May 2016 14:55:37 -0400 Subject: [PATCH] FEATURE: add caps to trust level 3 requirements for posts read and topics viewed, configurable in settings --- app/models/trust_level3_requirements.rb | 10 ++++++++-- config/locales/server.en.yml | 2 ++ config/site_settings.yml | 6 ++++++ spec/models/trust_level3_requirements_spec.rb | 16 +++++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/models/trust_level3_requirements.rb b/app/models/trust_level3_requirements.rb index 2fb1671d471..2579216f867 100644 --- a/app/models/trust_level3_requirements.rb +++ b/app/models/trust_level3_requirements.rb @@ -95,7 +95,10 @@ class TrustLevel3Requirements end def min_topics_viewed - (TrustLevel3Requirements.num_topics_in_time_period.to_i * (SiteSetting.tl3_requires_topics_viewed.to_f / 100.0)).round + [ + (TrustLevel3Requirements.num_topics_in_time_period.to_i * (SiteSetting.tl3_requires_topics_viewed.to_f / 100.0)).round, + SiteSetting.tl3_requires_topics_viewed_cap + ].min end def posts_read @@ -103,7 +106,10 @@ class TrustLevel3Requirements end def min_posts_read - (TrustLevel3Requirements.num_posts_in_time_period.to_i * (SiteSetting.tl3_requires_posts_read.to_f / 100.0)).round + [ + (TrustLevel3Requirements.num_posts_in_time_period.to_i * (SiteSetting.tl3_requires_posts_read.to_f / 100.0)).round, + SiteSetting.tl3_requires_posts_read_cap + ].min end def topics_viewed_all_time diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 663ea6a9b46..ee9d9ebb1f7 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1068,7 +1068,9 @@ en: tl3_requires_days_visited: "Minimum number of days that a user needs to have visited the site in the last (tl3 time period) days to qualify for promotion to trust level 3. Set higher than tl3 time period to disable promotions to tl3. (0 or higher)" tl3_requires_topics_replied_to: "Minimum number of topics a user needs to have replied to in the last (tl3 time period) days to qualify for promotion to trust level 3. (0 or higher)" tl3_requires_topics_viewed: "The percentage of topics created in the last (tl3 time period) days that a user needs to have viewed to qualify for promotion to trust level 3. (0 to 100)" + tl3_requires_topics_viewed_cap: "The maximum required number of topics viewed in the last (tl3 time period) days." tl3_requires_posts_read: "The percentage of posts created in the last (tl3 time period) days that a user needs to have viewed to qualify for promotion to trust level 3. (0 to 100)" + tl3_requires_posts_read_cap: "The maximum required number of posts read in the last (tl3 time period) days." tl3_requires_topics_viewed_all_time: "The minimum total number of topics a user must have viewed to qualify for trust level 3." tl3_requires_posts_read_all_time: "The minimum total number of posts a user must have read to qualify for trust level 3." tl3_requires_max_flagged: "User must not have had more than x posts flagged by x different users in the last (tl3 time period) days to qualify for promotion to trust level 3, where x is this setting's value. (0 or higher)" diff --git a/config/site_settings.yml b/config/site_settings.yml index 3f993bb21da..f58e42c6a2d 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -708,10 +708,16 @@ trust: default: 25 min: 0 max: 100 + tl3_requires_topics_viewed_cap: + default: 500 + min: 0 tl3_requires_posts_read: default: 25 min: 0 max: 100 + tl3_requires_posts_read_cap: + default: 20000 + min: 0 tl3_requires_topics_viewed_all_time: default: 200 min: 0 diff --git a/spec/models/trust_level3_requirements_spec.rb b/spec/models/trust_level3_requirements_spec.rb index 764aef8ac91..46e3d899929 100644 --- a/spec/models/trust_level3_requirements_spec.rb +++ b/spec/models/trust_level3_requirements_spec.rb @@ -35,12 +35,26 @@ describe TrustLevel3Requirements do expect(tl3_requirements.min_topics_viewed).to eq(23) end + it "min_topics_viewed is capped" do + SiteSetting.tl3_requires_topics_viewed = 75 + described_class.stubs(:num_topics_in_time_period).returns(31) + SiteSetting.tl3_requires_topics_viewed_cap = 20 + expect(tl3_requirements.min_topics_viewed).to eq(20) + end + it "min_posts_read depends on site setting and number of posts created" do SiteSetting.stubs(:tl3_requires_posts_read).returns(66) described_class.stubs(:num_posts_in_time_period).returns(1234) expect(tl3_requirements.min_posts_read).to eq(814) end + it "min_posts_read is capped" do + SiteSetting.tl3_requires_posts_read = 66 + described_class.stubs(:num_posts_in_time_period).returns(1234) + SiteSetting.tl3_requires_posts_read_cap = 600 + expect(tl3_requirements.min_posts_read).to eq(600) + end + it "min_topics_viewed_all_time depends on site setting" do SiteSetting.stubs(:tl3_requires_topics_viewed_all_time).returns(75) expect(tl3_requirements.min_topics_viewed_all_time).to eq(75) @@ -243,7 +257,7 @@ describe TrustLevel3Requirements do end end - describe "requirements" do + context "requirements with defaults" do before do tl3_requirements.stubs(:min_days_visited).returns(50)