Files
danbooru/test/unit/post_flag_test.rb
2022-10-21 20:52:31 +02:00

119 lines
4.2 KiB
Ruby

require 'test_helper'
class PostFlagTest < ActiveSupport::TestCase
context "PostFlag: " do
context "an approver" do
should "be able to flag an unlimited number of posts" do
@user = create(:approver)
assert_nothing_raised do
create_list(:post_flag, 6, creator: @user, status: :pending)
end
end
end
context "a user with unlimited flags" do
should "be able to flag an unlimited number of posts" do
@user = create(:user)
create_list(:post_flag, 30, status: :succeeded, creator: @user)
assert_equal(true, @user.has_unlimited_flags?)
assert_equal(false, @user.is_flag_limited?)
assert_nothing_raised do
create_list(:post_flag, 6, creator: @user, status: :pending)
end
end
end
context "a basic user" do
should "be able to flag up to 5 posts at once" do
@user = create(:user)
@flags = create_list(:post_flag, 5, creator: @user, status: :pending)
@flag = build(:post_flag, creator: @user, status: :pending)
assert_equal(false, @flag.valid?)
assert_equal(["have reached your flag limit"], @flag.errors[:creator])
end
should "have early rejected flags count against their flag limit" do
@user = create(:user)
create(:post_flag, creator: @user, status: :pending)
assert_equal(1, @user.post_flags.active.count)
create(:post_flag, creator: @user, status: :rejected)
assert_equal(2, @user.post_flags.active.count)
create(:post_flag, creator: @user, status: :succeeded)
assert_equal(2, @user.post_flags.active.count)
create(:post_flag, creator: @user, status: :rejected, created_at: 4.days.ago)
assert_equal(2, @user.post_flags.active.count)
end
end
context "a user" do
should "not be able to flag a post more than once" do
@user = create(:user)
@post = create(:post)
@post_flag = create(:post_flag, post: @post, creator: @user)
@post_flag = build(:post_flag, post: @post, creator: @user)
assert_equal(false, @post_flag.valid?)
assert_equal(["have already flagged this post"], @post_flag.errors[:creator_id])
end
should "not be able to flag a deleted post" do
@post = create(:post, is_deleted: true)
@post_flag = build(:post_flag, post: @post)
assert_equal(false, @post_flag.valid?)
assert_equal(["Post is deleted and cannot be flagged"], @post_flag.errors.full_messages)
end
should "not be able to flag a pending post" do
@post = create(:post, is_pending: true)
@flag = build(:post_flag, post: @post)
assert_equal(false, @flag.valid?)
assert_equal(["Post is pending and cannot be flagged"], @flag.errors.full_messages)
end
should "not be able to flag a post in the cooldown period" do
@mod = create(:moderator_user)
@users = create_list(:user, 2)
@post = create(:post)
@flag1 = create(:post_flag, post: @post, creator: @users.first)
create(:post_approval, post: @post, user: @mod)
travel_to(Danbooru.config.moderation_period.from_now - 1.minute) do
@flag2 = build(:post_flag, post: @post, reason: "something", creator: @users.second)
assert_equal(false, @flag2.valid?)
assert_match(/cannot be flagged more than once/, @flag2.errors[:post].join)
end
travel_to(Danbooru.config.moderation_period.from_now + 1.minute) do
@flag3 = create(:post_flag, post: @post, reason: "something", creator: @users.second)
assert(@flag3.errors.empty?)
end
end
should "be able to flag a post in the cooldown period if they're a mod" do
@post = create(:post)
@flag1 = create(:post_flag, post: @post)
create(:post_approval, post: @post)
assert_equal(false, @post.reload.is_pending?)
travel_to(Danbooru.config.moderation_period.from_now - 1.minute) do
@flag2 = create(:post_flag, post: @post, reason: "something", creator: create(:approver))
assert_equal(true, @flag2.valid?)
assert_equal(true, @post.reload.is_flagged?)
end
end
end
end
end