1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe CommitPolicy do 6 describe '#rules' do 7 let(:user) { create(:user) } 8 let(:commit) { project.repository.head_commit } 9 let(:policy) { described_class.new(user, commit) } 10 11 shared_examples 'can read commit and create a note' do 12 it 'can read commit' do 13 expect(policy).to be_allowed(:read_commit) 14 end 15 16 it 'can create a note' do 17 expect(policy).to be_allowed(:create_note) 18 end 19 end 20 21 shared_examples 'cannot read commit nor create a note' do 22 it 'can not read commit' do 23 expect(policy).to be_disallowed(:read_commit) 24 end 25 26 it 'can not create a note' do 27 expect(policy).to be_disallowed(:create_note) 28 end 29 end 30 31 context 'when project is public' do 32 let(:project) { create(:project, :public, :repository) } 33 34 it_behaves_like 'can read commit and create a note' 35 36 context 'when repository access level is private' do 37 let(:project) { create(:project, :public, :repository, :repository_private) } 38 39 it_behaves_like 'cannot read commit nor create a note' 40 41 context 'when the user is a project member' do 42 before do 43 project.add_developer(user) 44 end 45 46 it_behaves_like 'can read commit and create a note' 47 end 48 end 49 end 50 51 context 'when project is private' do 52 let(:project) { create(:project, :private, :repository) } 53 54 it_behaves_like 'cannot read commit nor create a note' 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 read commit and create a note' do 62 expect(policy).to be_allowed(:read_commit) 63 end 64 end 65 66 context 'when the user is a guest' do 67 before do 68 project.add_guest(user) 69 end 70 71 it_behaves_like 'cannot read commit nor create a note' 72 73 it 'cannot download code' do 74 expect(policy).to be_disallowed(:download_code) 75 end 76 end 77 end 78 end 79end 80