mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Recalculate scores only when approving or transitioning to pending. (#13009)
Recalculating a ReviewableFlaggedPost's score after rejecting or ignoring it sets the score as 0, which means that we can't find them after reviewing. They don't surpass the minimum priority threshold and are hidden. Additionally, we only want to use agreed flags when calculating the different priority thresholds.
This commit is contained in:
@@ -16,12 +16,13 @@ describe Jobs::ReviewablePriorities do
|
||||
fab!(:user_0) { Fabricate(:user) }
|
||||
fab!(:user_1) { Fabricate(:user) }
|
||||
|
||||
def create_reviewables(count)
|
||||
(1..count).each { |i| create_with_score(i) }
|
||||
def create_reviewables(count, status: :approved)
|
||||
minimum_threshold = SiteSetting.reviewable_low_priority_threshold
|
||||
(1..count).each { |i| create_with_score(minimum_threshold + i) }
|
||||
end
|
||||
|
||||
def create_with_score(score)
|
||||
Fabricate(:reviewable_flagged_post).tap do |reviewable|
|
||||
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)
|
||||
@@ -45,10 +46,9 @@ describe Jobs::ReviewablePriorities do
|
||||
Jobs::ReviewablePriorities.new.execute({})
|
||||
|
||||
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
|
||||
expect_min_score(:medium, 8.0)
|
||||
expect_min_score('medium', 8.0)
|
||||
expect_min_score(:high, 13.0)
|
||||
expect(Reviewable.score_required_to_hide_post).to eq(8.66)
|
||||
expect_min_score(:medium, 9.0)
|
||||
expect_min_score(:high, 14.0)
|
||||
expect(Reviewable.score_required_to_hide_post).to eq(9.33)
|
||||
end
|
||||
|
||||
it 'ignore negative scores when calculating priorities' do
|
||||
@@ -59,9 +59,22 @@ describe Jobs::ReviewablePriorities do
|
||||
Jobs::ReviewablePriorities.new.execute({})
|
||||
|
||||
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
|
||||
expect_min_score(:medium, 8.0)
|
||||
expect_min_score(:high, 13.0)
|
||||
expect(Reviewable.score_required_to_hide_post).to eq(8.66)
|
||||
expect_min_score(:medium, 9.0)
|
||||
expect_min_score(:high, 14.0)
|
||||
expect(Reviewable.score_required_to_hide_post).to eq(9.33)
|
||||
end
|
||||
|
||||
it 'ignores non-approved reviewables' do
|
||||
create_reviewables(Jobs::ReviewablePriorities.min_reviewables)
|
||||
low_score = 2
|
||||
10.times { create_with_score(low_score, status: :pending) }
|
||||
|
||||
Jobs::ReviewablePriorities.new.execute({})
|
||||
|
||||
expect_min_score(:low, SiteSetting.reviewable_low_priority_threshold)
|
||||
expect_min_score(:medium, 9.0)
|
||||
expect_min_score(:high, 14.0)
|
||||
expect(Reviewable.score_required_to_hide_post).to eq(9.33)
|
||||
end
|
||||
|
||||
def expect_min_score(priority, score)
|
||||
|
||||
@@ -305,6 +305,23 @@ RSpec.describe ReviewableFlaggedPost, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'recalculating the reviewable score' do
|
||||
let(:expected_score) { 8 }
|
||||
let(:reviewable) { Fabricate(:reviewable_flagged_post, score: expected_score) }
|
||||
|
||||
it "doesn't recalculate the score after ignore" do
|
||||
reviewable.perform(moderator, :ignore)
|
||||
|
||||
expect(reviewable.score).to eq(expected_score)
|
||||
end
|
||||
|
||||
it "doesn't recalculate the score after disagree" do
|
||||
reviewable.perform(moderator, :disagree)
|
||||
|
||||
expect(reviewable.score).to eq(expected_score)
|
||||
end
|
||||
end
|
||||
|
||||
def assert_pm_creation_enqueued(user_id, pm_type)
|
||||
expect(Jobs::SendSystemMessage.jobs.length).to eq(1)
|
||||
job = Jobs::SendSystemMessage.jobs[0]
|
||||
|
||||
@@ -35,7 +35,7 @@ RSpec.describe ReviewableScore, type: :model do
|
||||
expect(rs.reload).to be_disagreed
|
||||
expect(rs.reviewed_by).to eq(moderator)
|
||||
expect(rs.reviewed_at).to be_present
|
||||
expect(reviewable.score).to eq(0.0)
|
||||
expect(reviewable.score).to eq(4.0)
|
||||
end
|
||||
|
||||
it "increases the score by the post action type's score bonus" do
|
||||
|
||||
Reference in New Issue
Block a user