# frozen_string_literal: true RSpec.describe FlagGuardian do fab!(:user) fab!(:admin) fab!(:moderator) after(:each) { Flag.reset_flag_settings! } describe "#can_create_flag?" do it "returns true for admin and when custom flags limit is not reached" do SiteSetting.custom_flags_limit = 1 expect(Guardian.new(admin).can_create_flag?).to eq(true) expect(Guardian.new(user).can_create_flag?).to eq(false) flag = Fabricate(:flag) expect(Guardian.new(admin).can_create_flag?).to eq(false) expect(Guardian.new(user).can_create_flag?).to eq(false) flag.destroy! end end describe "#can_edit_flag?" do it "returns true for admin and false for moderator and regular user" do flag = Fabricate(:flag) expect(Guardian.new(admin).can_edit_flag?(flag)).to eq(true) expect(Guardian.new(moderator).can_edit_flag?(flag)).to eq(false) expect(Guardian.new(user).can_edit_flag?(flag)).to eq(false) flag.destroy! end it "returns false when flag is system" do expect(Guardian.new(admin).can_edit_flag?(Flag.system.first)).to eq(false) end it "returns false when flag was already used with post action" do flag = Fabricate(:flag) Fabricate(:post_action, post_action_type_id: flag.id) expect(Guardian.new(admin).can_edit_flag?(flag)).to eq(false) flag.destroy! end it "returns false when flag was already used with reviewable" do flag = Fabricate(:flag) Fabricate(:reviewable_score, reviewable_score_type: flag.id) expect(Guardian.new(admin).can_edit_flag?(flag)).to eq(false) flag.destroy! end end describe "#can_toggle_flag?" do it "returns true for admin and false for regular user" do expect(Guardian.new(admin).can_toggle_flag?).to eq(true) expect(Guardian.new(user).can_toggle_flag?).to eq(false) end end describe "#can_reorder_flag?" do it "returns true for admin and false for regular user and notify_user" do expect(Guardian.new(admin).can_reorder_flag?(Flag.system.last)).to eq(true) expect( Guardian.new(admin).can_reorder_flag?(Flag.system.find_by(name_key: "notify_user")), ).to eq(false) expect(Guardian.new(user).can_reorder_flag?(Flag.system.last)).to eq(false) end end end