mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 02:20:41 +08:00
294febf3c4
We're changing the implementation of trust levels to use groups. Part of this is to have site settings that reference trust levels use groups instead. It converts the min_trust_to_flag_posts site setting to flag_post_allowed_groups. Note: In the original setting, "posts" is plural. I have changed this to "post" singular in the new setting to match others.
81 lines
2.6 KiB
Ruby
81 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Jobs::TruncateUserFlagStats do
|
|
fab!(:user) { Fabricate(:user, refresh_auto_groups: true) }
|
|
fab!(:other_user) { Fabricate(:user, refresh_auto_groups: true) }
|
|
|
|
before do
|
|
# We might make this a site setting eventually
|
|
Jobs::TruncateUserFlagStats.stubs(:truncate_to).returns(2)
|
|
end
|
|
|
|
def perform(*users)
|
|
described_class.new.execute(user_ids: users.map(&:id))
|
|
users.each { |u| u.reload }
|
|
end
|
|
|
|
it "raises an error without user ids" do
|
|
expect { described_class.new.execute({}) }.to raise_error(Discourse::InvalidParameters)
|
|
end
|
|
|
|
it "does nothing if the user doesn't have enough flags" do
|
|
user.user_stat.update_columns(flags_agreed: 1)
|
|
perform(user)
|
|
|
|
expect(user.user_stat.flags_agreed).to eq(1)
|
|
expect(user.user_stat.flags_disagreed).to eq(0)
|
|
expect(user.user_stat.flags_ignored).to eq(0)
|
|
end
|
|
|
|
it "removes the statuses of old flags (integration test)" do
|
|
p0 = Fabricate(:post)
|
|
p1 = Fabricate(:post)
|
|
p2 = Fabricate(:post, user: user)
|
|
p3 = Fabricate(:post)
|
|
|
|
freeze_time 10.minutes.ago
|
|
r0 = PostActionCreator.spam(user, p0).reviewable
|
|
freeze_time 1.minute.from_now
|
|
r1 = PostActionCreator.spam(user, p1).reviewable
|
|
freeze_time 1.minute.from_now
|
|
r2 = PostActionCreator.spam(user, p2).reviewable
|
|
freeze_time 1.minute.from_now
|
|
r3 = PostActionCreator.spam(user, p3).reviewable
|
|
|
|
freeze_time 1.minute.from_now
|
|
PostActionCreator.spam(other_user, p3).reviewable
|
|
freeze_time 1.minute.from_now
|
|
PostActionCreator.spam(other_user, p2).reviewable
|
|
freeze_time 1.minute.from_now
|
|
PostActionCreator.spam(other_user, p1).reviewable
|
|
|
|
unfreeze_time
|
|
|
|
r0.perform(Discourse.system_user, :agree_and_keep)
|
|
r1.perform(Discourse.system_user, :disagree)
|
|
r2.perform(Discourse.system_user, :ignore_and_do_nothing)
|
|
r3.perform(Discourse.system_user, :agree_and_keep)
|
|
|
|
user.user_stat.reload
|
|
other_user.user_stat.reload
|
|
|
|
expect(user.user_stat.flags_agreed).to eq(2)
|
|
expect(user.user_stat.flags_disagreed).to eq(1)
|
|
expect(user.user_stat.flags_ignored).to eq(0)
|
|
|
|
expect(other_user.user_stat.flags_agreed).to eq(1)
|
|
expect(other_user.user_stat.flags_disagreed).to eq(1)
|
|
expect(other_user.user_stat.flags_ignored).to eq(1)
|
|
|
|
perform(user, other_user)
|
|
|
|
expect(user.user_stat.flags_agreed).to eq(1)
|
|
expect(user.user_stat.flags_disagreed).to eq(1)
|
|
expect(user.user_stat.flags_ignored).to eq(0)
|
|
|
|
expect(other_user.user_stat.flags_agreed).to eq(0)
|
|
expect(other_user.user_stat.flags_disagreed).to eq(1)
|
|
expect(other_user.user_stat.flags_ignored).to eq(1)
|
|
end
|
|
end
|