discourse/spec/jobs/reviewable_priorities_spec.rb

92 lines
3.1 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::ReviewablePriorities do
fab!(:user_0) { Fabricate(:user) }
fab!(:user_1) { Fabricate(:user) }
def create_with_score(score, status: :approved)
Fabricate(:reviewable_flagged_post, status: Reviewable.statuses[status]).tap do |reviewable|
reviewable.add_score(user_0, PostActionType.types[:off_topic])
reviewable.add_score(user_1, PostActionType.types[:off_topic])
reviewable.update!(score: score)
end
end
it "needs returns 0s with no existing reviewables" do
Jobs::ReviewablePriorities.new.execute({})
expect_min_score(:low, 0.0)
expect_min_score(:medium, 0.0)
expect_min_score(:high, 0.0)
expect(Reviewable.score_required_to_hide_post).to eq(8.33)
end
context "with reviewables" do
# Generate all reviewables first because they take a lot of time
fab!(:reviewables) do
(1..Jobs::ReviewablePriorities.min_reviewables).map do |i|
create_with_score(SiteSetting.reviewable_low_priority_threshold + i)
end
end
# This reviewable will be ignored in most tests
fab!(:other_reviewable) { create_with_score(0) }
it "needs a minimum amount of reviewables before it calculates anything" do
reviewables[0].destroy!
other_reviewable.destroy!
Jobs::ReviewablePriorities.new.execute({})
expect_min_score(:low, 0.0)
expect_min_score(:medium, 0.0)
expect_min_score(:high, 0.0)
expect(Reviewable.score_required_to_hide_post).to eq(8.33)
end
context "when there are enough reviewables" do
let(:medium_threshold) { 8.0 }
let(:high_threshold) { 13.0 }
let(:score_to_hide_post) { 8.66 }
it "will set priorities based on the maximum score" do
other_reviewable.destroy!
Jobs::ReviewablePriorities.new.execute({})
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
expect_min_score(:medium, medium_threshold)
expect_min_score(:high, high_threshold)
expect(Reviewable.score_required_to_hide_post).to eq(score_to_hide_post)
end
it "ignore negative scores when calculating priorities" do
negative_score = -9
other_reviewable.update!(score: negative_score)
Jobs::ReviewablePriorities.new.execute({})
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
expect_min_score(:medium, medium_threshold)
expect_min_score(:high, high_threshold)
expect(Reviewable.score_required_to_hide_post).to eq(score_to_hide_post)
end
it "ignores non-approved reviewables" do
low_score = 2
other_reviewable.update!(score: low_score, status: Reviewable.statuses[:pending])
Jobs::ReviewablePriorities.new.execute({})
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
expect_min_score(:medium, medium_threshold)
expect_min_score(:high, high_threshold)
expect(Reviewable.score_required_to_hide_post).to eq(score_to_hide_post)
end
end
end
def expect_min_score(priority, score)
expect(Reviewable.min_score_for_priority(priority)).to eq(score)
end
end