require 'test_helper' class BanTest < ActiveSupport::TestCase context "A ban" do context "created by an admin" do setup do @banner = FactoryBot.create(:admin_user) CurrentUser.user = @banner CurrentUser.ip_addr = "127.0.0.1" end teardown do @banner = nil CurrentUser.user = nil CurrentUser.ip_addr = nil end should "set the is_banned flag on the user" do user = FactoryBot.create(:user) ban = FactoryBot.build(:ban, :user => user, :banner => @banner) ban.save user.reload assert(user.is_banned?) end should "be valid" do user = FactoryBot.create(:user) ban = FactoryBot.create(:ban, :user => user, :banner => @banner) assert(ban.errors.empty?) end end should "initialize the expiration date" do user = FactoryBot.create(:user) admin = FactoryBot.create(:admin_user) CurrentUser.scoped(admin) do ban = FactoryBot.create(:ban, :user => user, :banner => admin) assert_not_nil(ban.expires_at) end end should "update the user's feedback" do user = FactoryBot.create(:user) admin = FactoryBot.create(:admin_user) assert(user.feedback.empty?) CurrentUser.scoped(admin) do FactoryBot.create(:ban, :user => user, :banner => admin) end assert(!user.feedback.empty?) assert_equal("negative", user.feedback.last.category) end end context "Searching for a ban" do should "find a given ban" do CurrentUser.user = FactoryBot.create(:admin_user) CurrentUser.ip_addr = "127.0.0.1" user = FactoryBot.create(:user) ban = FactoryBot.create(:ban, user: user) params = { user_name: user.name, banner_name: ban.banner.name, reason: ban.reason, expired: false, order: :id_desc } bans = Ban.search(params) assert_equal(1, bans.length) assert_equal(ban.id, bans.first.id) end context "by user id" do setup do @admin = FactoryBot.create(:admin_user) CurrentUser.user = @admin CurrentUser.ip_addr = "127.0.0.1" @user = FactoryBot.create(:user) end teardown do CurrentUser.user = nil CurrentUser.ip_addr = nil end end end end