1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe ProjectMemberPolicy do 6 let(:project) { create(:project) } 7 let(:maintainer_user) { create(:user) } 8 let(:member) { create(:project_member, project: project, user: member_user) } 9 10 subject { described_class.new(maintainer_user, member) } 11 12 before do 13 create(:project_member, :maintainer, project: project, user: maintainer_user) 14 end 15 16 context 'with regular member' do 17 let(:member_user) { create(:user) } 18 19 it { is_expected.to be_allowed(:read_project) } 20 it { is_expected.to be_allowed(:update_project_member) } 21 it { is_expected.to be_allowed(:destroy_project_member) } 22 23 it { is_expected.not_to be_allowed(:destroy_project_bot_member) } 24 end 25 26 context 'when user is project owner' do 27 let(:member_user) { project.owner } 28 let(:member) { project.members.find_by!(user: member_user) } 29 30 it { is_expected.to be_allowed(:read_project) } 31 it { is_expected.to be_disallowed(:update_project_member) } 32 it { is_expected.to be_disallowed(:destroy_project_member) } 33 end 34 35 context 'with a bot member' do 36 let(:member_user) { create(:user, :project_bot) } 37 38 it { is_expected.to be_allowed(:destroy_project_bot_member) } 39 40 it { is_expected.not_to be_allowed(:update_project_member) } 41 it { is_expected.not_to be_allowed(:destroy_project_member) } 42 end 43end 44