Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-05 00:07:54 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-05 00:07:54 +0300
commit2fd92f2dc784ade9cb4e1c33dd60cbfad7b86818 (patch)
tree7779f36689db97a46e0268a4aec1d49f283eb0c8 /spec/presenters
parent42ca24aa5bbab7a2d43bc866d9bee9876941cea2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/presenters')
-rw-r--r--spec/presenters/ci/pipeline_presenter_spec.rb87
1 files changed, 84 insertions, 3 deletions
diff --git a/spec/presenters/ci/pipeline_presenter_spec.rb b/spec/presenters/ci/pipeline_presenter_spec.rb
index 700d1f5cbb6..c9c4f567549 100644
--- a/spec/presenters/ci/pipeline_presenter_spec.rb
+++ b/spec/presenters/ci/pipeline_presenter_spec.rb
@@ -6,6 +6,7 @@ describe Ci::PipelinePresenter do
include Gitlab::Routing
let(:user) { create(:user) }
+ let(:current_user) { user }
let(:project) { create(:project) }
let(:pipeline) { create(:ci_pipeline, project: project) }
@@ -15,7 +16,7 @@ describe Ci::PipelinePresenter do
before do
project.add_developer(user)
- allow(presenter).to receive(:current_user) { user }
+ allow(presenter).to receive(:current_user) { current_user }
end
it 'inherits from Gitlab::View::Presenter::Delegated' do
@@ -224,10 +225,90 @@ describe Ci::PipelinePresenter do
describe '#all_related_merge_requests' do
it 'memoizes the returned relation' do
query_count = ActiveRecord::QueryRecorder.new do
- 2.times { presenter.send(:all_related_merge_requests).count }
+ 3.times { presenter.send(:all_related_merge_requests).count }
end.count
- expect(query_count).to eq(1)
+ expect(query_count).to eq(2)
+ end
+
+ context 'permissions' do
+ let!(:merge_request) do
+ create(:merge_request, project: project, source_project: project)
+ end
+
+ subject(:all_related_merge_requests) do
+ presenter.send(:all_related_merge_requests)
+ end
+
+ shared_examples 'private merge requests' do
+ context 'when not logged in' do
+ let(:current_user) {}
+
+ it { is_expected.to be_empty }
+ end
+
+ context 'when logged in as a non_member' do
+ let(:current_user) { create(:user) }
+
+ it { is_expected.to be_empty }
+ end
+
+ context 'when logged in as a guest' do
+ let(:current_user) { create(:user) }
+
+ before do
+ project.add_guest(current_user)
+ end
+
+ it { is_expected.to be_empty }
+ end
+
+ context 'when logged in as a developer' do
+ it { is_expected.to contain_exactly(merge_request) }
+ end
+
+ context 'when logged in as a maintainer' do
+ let(:current_user) { create(:user) }
+
+ before do
+ project.add_maintainer(current_user)
+ end
+
+ it { is_expected.to contain_exactly(merge_request) }
+ end
+ end
+
+ context 'with a private project' do
+ it_behaves_like 'private merge requests'
+ end
+
+ context 'with a public project with private merge requests' do
+ before do
+ project.update!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
+
+ project
+ .project_feature
+ .update!(merge_requests_access_level: ProjectFeature::PRIVATE)
+ end
+
+ it_behaves_like 'private merge requests'
+ end
+
+ context 'with a public project with public merge requests' do
+ before do
+ project.update!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
+
+ project
+ .project_feature
+ .update!(merge_requests_access_level: ProjectFeature::ENABLED)
+ end
+
+ context 'when not logged in' do
+ let(:current_user) {}
+
+ it { is_expected.to contain_exactly(merge_request) }
+ end
+ end
end
end