diff options
Diffstat (limited to 'spec/models/concerns/participable_spec.rb')
-rw-r--r-- | spec/models/concerns/participable_spec.rb | 71 |
1 files changed, 69 insertions, 2 deletions
diff --git a/spec/models/concerns/participable_spec.rb b/spec/models/concerns/participable_spec.rb index 3376e337dc9..903c7ae16b6 100644 --- a/spec/models/concerns/participable_spec.rb +++ b/spec/models/concerns/participable_spec.rb @@ -39,11 +39,12 @@ RSpec.describe Participable do expect(participants).to include(user3) end - it 'caches the raw list of participants' do + it 'caches the list of filtered participants' do instance = model.new user1 = build(:user) - expect(instance).to receive(:raw_participants).once + expect(instance).to receive(:all_participants_hash).once.and_return({}) + expect(instance).to receive(:filter_by_ability).once instance.participants(user1) instance.participants(user1) @@ -91,5 +92,71 @@ RSpec.describe Participable do expect(ext_arg).to be_an_instance_of(Gitlab::ReferenceExtractor) end end + + context 'participable is a personal snippet' do + let(:model) { PersonalSnippet } + let(:instance) { model.new(author: user1) } + + let(:user1) { build(:user) } + let(:user2) { build(:user) } + let(:user3) { build(:user) } + + before do + allow(model).to receive(:participant_attrs).and_return([:foo, :bar]) + end + + it 'returns the list of participants' do + expect(instance).to receive(:foo).and_return(user1) + expect(instance).to receive(:bar).and_return(user2) + + participants = instance.participants(user1) + expect(participants).to contain_exactly(user1) + end + end + end + + describe '#participant?' do + let(:instance) { model.new } + + let(:user1) { build(:user) } + let(:user2) { build(:user) } + let(:user3) { build(:user) } + let(:project) { build(:project, :public) } + + before do + allow(model).to receive(:participant_attrs).and_return([:foo, :bar]) + end + + it 'returns whether the user is a participant' do + allow(instance).to receive(:foo).and_return(user2) + allow(instance).to receive(:bar).and_return(user3) + allow(instance).to receive(:project).and_return(project) + + expect(instance.participant?(user1)).to be false + expect(instance.participant?(user2)).to be true + expect(instance.participant?(user3)).to be true + end + + it 'caches the list of raw participants' do + expect(instance).to receive(:raw_participants).once.and_return([]) + expect(instance).to receive(:project).twice.and_return(project) + + instance.participant?(user1) + instance.participant?(user1) + end + + context 'participable is a personal snippet' do + let(:model) { PersonalSnippet } + let(:instance) { model.new(author: user1) } + + it 'returns whether the user is a participant' do + allow(instance).to receive(:foo).and_return(user1) + allow(instance).to receive(:bar).and_return(user2) + + expect(instance.participant?(user1)).to be true + expect(instance.participant?(user2)).to be false + expect(instance.participant?(user3)).to be false + end + end end end |