Files
danbooru/test/unit/post_flag_test.rb
2020-03-20 18:03:01 -05:00

100 lines
3.2 KiB
Ruby

require 'test_helper'
class PostFlagTest < ActiveSupport::TestCase
context "In all cases" do
setup do
travel_to(2.weeks.ago) do
@alice = create(:gold_user)
end
as(@alice) do
@post = create(:post, tag_string: "aaa", uploader: @alice)
end
end
context "a basic user" do
should "not be able to flag more than 1 post in 24 hours" do
@bob = create(:user, created_at: 2.weeks.ago)
@post_flag = build(:post_flag, creator: @bob)
@post_flag.expects(:flag_count_for_creator).returns(1)
assert_equal(false, @post_flag.valid?)
assert_equal(["You can flag 1 post a day"], @post_flag.errors.full_messages)
end
end
context "a gold user" do
setup do
@bob = create(:gold_user, created_at: 1.month.ago)
end
should "not be able to flag a post more than twice" do
@post_flag = create(:post_flag, post: @post, creator: @bob)
@post_flag = build(:post_flag, post: @post, creator: @bob)
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 more than 10 posts in 24 hours" do
@post_flag = build(:post_flag, post: @post, creator: @bob)
@post_flag.expects(:flag_count_for_creator).returns(10)
assert_difference(-> { PostFlag.count }, 0) do
@post_flag.save
end
assert_equal(["You can flag 10 posts a day"], @post_flag.errors.full_messages)
end
should "not be able to flag a deleted post" do
as(@alice) do
@post.update(is_deleted: true)
end
@post_flag = build(:post_flag, post: @post, creator: @bob)
@post_flag.save
assert_equal(["Post is deleted"], @post_flag.errors.full_messages)
end
should "not be able to flag a pending post" do
as(@alice) do
@post.update(is_pending: true)
end
@flag = @post.flags.create(reason: "test", creator: @bob)
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)
travel_to(2.weeks.ago) do
@users = FactoryBot.create_list(:user, 2)
end
@flag1 = create(:post_flag, post: @post, reason: "something", creator: @users.first)
as(@mod) do
@post.approve!
end
travel_to(PostFlag::COOLDOWN_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(PostFlag::COOLDOWN_PERIOD.from_now + 1.minute) do
@flag3 = create(:post_flag, post: @post, reason: "something", creator: @users.second)
assert(@flag3.errors.empty?)
end
end
should "initialize its creator" do
@post_flag = create(:post_flag, creator: @alice)
assert_equal(@alice.id, @post_flag.creator_id)
end
end
end
end