discourse/spec/jobs/truncate_user_flag_stats_spec.rb
Ted Johansson 294febf3c4
DEV: Convert min_trust_to_flag_posts setting to groups ()
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.
2023-12-13 17:18:42 +08:00

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