diff --git a/lib/score_calculator.rb b/lib/score_calculator.rb index 5cba290cb5e..44a831f73c7 100644 --- a/lib/score_calculator.rb +++ b/lib/score_calculator.rb @@ -3,7 +3,7 @@ module ScoreCalculator def self.hot_score(resource) return 0 unless resource.created_at - period = [max_period, resource_age(resource)].min + period = [1, [max_period, resource_age(resource)].min].max votes_total = resource.votes_for.where("created_at >= ?", period.days.ago).count votes_up = resource.get_upvotes.where("created_at >= ?", period.days.ago).count diff --git a/spec/lib/score_calculator_spec.rb b/spec/lib/score_calculator_spec.rb new file mode 100644 index 00000000000..ef528082fbb --- /dev/null +++ b/spec/lib/score_calculator_spec.rb @@ -0,0 +1,29 @@ +require "rails_helper" + +describe ScoreCalculator do + describe ".hot_score" do + let(:resource) { create(:debate) } + + before do + resource.vote_by(voter: create(:user), vote: "yes") + end + + it "ignores small time leaps", :with_frozen_time do + resource.created_at = Time.current + 0.01 + + expect(ScoreCalculator.hot_score(resource)).to eq 1 + end + + it "ignores setting with negative value " do + Setting["hot_score_period_in_days"] = -1 + + expect(ScoreCalculator.hot_score(resource)).to eq 1 + end + + it "ignores setting with zero value" do + Setting["hot_score_period_in_days"] = 0 + + expect(ScoreCalculator.hot_score(resource)).to eq 1 + end + end +end