1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe IssuablePolicy, models: true do 6 let(:user) { create(:user) } 7 let(:project) { create(:project, :public) } 8 let(:issue) { create(:issue, project: project) } 9 let(:policies) { described_class.new(user, issue) } 10 11 describe '#rules' do 12 context 'when user is author of issuable' do 13 let(:merge_request) { create(:merge_request, source_project: project, author: user) } 14 let(:policies) { described_class.new(user, merge_request) } 15 16 it 'allows resolving notes' do 17 expect(policies).to be_allowed(:resolve_note) 18 end 19 20 context 'when user is able to read project' do 21 it 'enables user to read and update issuables' do 22 expect(policies).to be_allowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request, :reopen_merge_request) 23 end 24 end 25 26 context 'when project is private' do 27 let(:project) { create(:project, :private) } 28 29 context 'when user belongs to the projects team' do 30 it 'enables user to read and update issuables' do 31 project.add_maintainer(user) 32 33 expect(policies).to be_allowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request, :reopen_merge_request) 34 end 35 end 36 37 it 'disallows user from reading and updating issuables from that project' do 38 expect(policies).to be_disallowed(:read_issue, :update_issue, :reopen_issue, :read_merge_request, :update_merge_request, :reopen_merge_request) 39 end 40 end 41 end 42 43 context 'when discussion is locked for the issuable' do 44 let(:issue) { create(:issue, project: project, discussion_locked: true) } 45 46 context 'when the user is not a project member' do 47 it 'can not create a note nor award emojis' do 48 expect(policies).to be_disallowed(:create_note, :award_emoji) 49 end 50 51 it 'does not allow resolving note' do 52 expect(policies).to be_disallowed(:resolve_note) 53 end 54 end 55 56 context 'when the user is a project member' do 57 before do 58 project.add_developer(user) 59 end 60 61 it 'can create a note and award emojis' do 62 expect(policies).to be_allowed(:create_note, :award_emoji) 63 end 64 65 it 'allows resolving notes' do 66 expect(policies).to be_allowed(:resolve_note) 67 end 68 end 69 end 70 end 71end 72