diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-17 18:10:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-17 18:10:42 +0000 |
commit | 49bb78aac34a111c0fb13aae3a83b078be351fd3 (patch) | |
tree | 510df08e78b39ef88631f8f25bdc371a4661caa9 /spec/lib/banzai/reference_parser | |
parent | 68c476dbd8a2c670aeeebffce8b63b554a3ac7f0 (diff) | |
download | gitlab-ce-49bb78aac34a111c0fb13aae3a83b078be351fd3.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/banzai/reference_parser')
-rw-r--r-- | spec/lib/banzai/reference_parser/merge_request_parser_spec.rb | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb index 32a9f09c3f6..1820141c898 100644 --- a/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb +++ b/spec/lib/banzai/reference_parser/merge_request_parser_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Banzai::ReferenceParser::MergeRequestParser do let(:user) { create(:user) } let(:project) { create(:project, :public) } let(:merge_request) { create(:merge_request, source_project: project) } - subject { described_class.new(Banzai::RenderContext.new(merge_request.target_project, user)) } + subject(:parser) { described_class.new(Banzai::RenderContext.new(merge_request.target_project, user)) } let(:link) { empty_html_link } @@ -65,4 +65,49 @@ RSpec.describe Banzai::ReferenceParser::MergeRequestParser do it_behaves_like 'no N+1 queries' end + + describe '#can_read_reference?' do + subject { parser.can_read_reference?(user, merge_request) } + + it { is_expected.to be_truthy } + + context 'when merge request belongs to the private project' do + let(:project) { create(:project, :private) } + + it 'prevents user from reading merge request references' do + is_expected.to be_falsey + end + + context 'when user has access to the project' do + before do + project.add_developer(user) + end + + it { is_expected.to be_truthy } + end + end + + context 'with memoization' do + context 'when project is the same' do + it 'calls #can? only once' do + expect(parser).to receive(:can?).once + + 2.times { parser.can_read_reference?(user, merge_request) } + end + end + + context 'when merge requests belong to different projects' do + it 'calls #can? for each project' do + expect(parser).to receive(:can?).twice + + another_merge_request = create(:merge_request) + + 2.times do + parser.can_read_reference?(user, merge_request) + parser.can_read_reference?(user, another_merge_request) + end + end + end + end + end end |