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:
Diffstat (limited to 'spec/finders/ci/pipelines_for_merge_request_finder_spec.rb')
-rw-r--r--spec/finders/ci/pipelines_for_merge_request_finder_spec.rb90
1 files changed, 88 insertions, 2 deletions
diff --git a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
index 543c289d366..ca6e0793d55 100644
--- a/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
+++ b/spec/finders/ci/pipelines_for_merge_request_finder_spec.rb
@@ -3,11 +3,97 @@
require 'spec_helper'
RSpec.describe Ci::PipelinesForMergeRequestFinder do
+ describe '#execute' do
+ include ProjectForksHelper
+
+ subject { finder.execute }
+
+ let_it_be(:developer_in_parent) { create(:user) }
+ let_it_be(:developer_in_fork) { create(:user) }
+ let_it_be(:developer_in_both) { create(:user) }
+ let_it_be(:reporter_in_parent_and_developer_in_fork) { create(:user) }
+ let_it_be(:external_user) { create(:user) }
+ let_it_be(:parent_project) { create(:project, :repository, :private) }
+ let_it_be(:forked_project) { fork_project(parent_project, nil, repository: true, target_project: create(:project, :private, :repository)) }
+
+ let(:merge_request) do
+ create(:merge_request, source_project: forked_project, source_branch: 'feature',
+ target_project: parent_project, target_branch: 'master')
+ end
+
+ let!(:pipeline_in_parent) do
+ create(:ci_pipeline, :merged_result_pipeline, merge_request: merge_request, project: parent_project)
+ end
+
+ let!(:pipeline_in_fork) do
+ create(:ci_pipeline, :merged_result_pipeline, merge_request: merge_request, project: forked_project)
+ end
+
+ let(:finder) { described_class.new(merge_request, actor) }
+
+ before_all do
+ parent_project.add_developer(developer_in_parent)
+ parent_project.add_developer(developer_in_both)
+ parent_project.add_reporter(reporter_in_parent_and_developer_in_fork)
+ forked_project.add_developer(developer_in_fork)
+ forked_project.add_developer(developer_in_both)
+ forked_project.add_developer(reporter_in_parent_and_developer_in_fork)
+ end
+
+ context 'when actor has permission to read pipelines in both parent and forked projects' do
+ let(:actor) { developer_in_both }
+
+ it 'returns all pipelines' do
+ is_expected.to eq([pipeline_in_fork, pipeline_in_parent])
+ end
+ end
+
+ context 'when actor has permission to read pipelines in both parent and forked projects' do
+ let(:actor) { reporter_in_parent_and_developer_in_fork }
+
+ it 'returns all pipelines' do
+ is_expected.to eq([pipeline_in_fork, pipeline_in_parent])
+ end
+ end
+
+ context 'when actor has permission to read pipelines in the parent project only' do
+ let(:actor) { developer_in_parent }
+
+ it 'returns pipelines in parent' do
+ is_expected.to eq([pipeline_in_parent])
+ end
+ end
+
+ context 'when actor has permission to read pipelines in the forked project only' do
+ let(:actor) { developer_in_fork }
+
+ it 'returns pipelines in fork' do
+ is_expected.to eq([pipeline_in_fork])
+ end
+ end
+
+ context 'when actor does not have permission to read pipelines' do
+ let(:actor) { external_user }
+
+ it 'returns nothing' do
+ is_expected.to be_empty
+ end
+ end
+
+ context 'when actor is nil' do
+ let(:actor) { nil }
+
+ it 'returns nothing' do
+ is_expected.to be_empty
+ end
+ end
+ end
+
describe '#all' do
let(:merge_request) { create(:merge_request) }
let(:project) { merge_request.source_project }
- subject { described_class.new(merge_request) }
+ subject { described_class.new(merge_request, nil) }
shared_examples 'returning pipelines with proper ordering' do
let!(:all_pipelines) do
@@ -134,7 +220,7 @@ RSpec.describe Ci::PipelinesForMergeRequestFinder do
branch_pipeline_2,
branch_pipeline])
- expect(described_class.new(merge_request_2).all)
+ expect(described_class.new(merge_request_2, nil).all)
.to eq([detached_merge_request_pipeline_2,
branch_pipeline_2,
branch_pipeline])