summaryrefslogtreecommitdiff
path: root/spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb')
-rw-r--r--spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb b/spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb
new file mode 100644
index 00000000000..db9b89f090f
--- /dev/null
+++ b/spec/services/ci/create_pipeline_service/pre_post_stages_spec.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+describe Ci::CreatePipelineService do
+ context '.pre/.post stages' do
+ let_it_be(:user) { create(:admin) }
+ let_it_be(:project) { create(:project, :repository, creator: user) }
+
+ let(:source) { :push }
+ let(:service) { described_class.new(project, user, { ref: ref }) }
+ let(:pipeline) { service.execute(source) }
+
+ let(:config) do
+ <<~YAML
+ validate:
+ stage: .pre
+ script: echo Hello World
+
+ build:
+ stage: build
+ rules:
+ - if: $CI_COMMIT_BRANCH == "master"
+ script: echo Hello World
+
+ notify:
+ stage: .post
+ script: echo Hello World
+ YAML
+ end
+
+ before do
+ stub_ci_pipeline_yaml_file(config)
+ end
+
+ context 'when pipeline contains a build except .pre/.post' do
+ let(:ref) { 'refs/heads/master' }
+
+ it 'creates a pipeline' do
+ expect(pipeline).to be_persisted
+ expect(pipeline.stages.map(&:name)).to contain_exactly(
+ *%w(.pre build .post))
+ expect(pipeline.builds.map(&:name)).to contain_exactly(
+ *%w(validate build notify))
+ end
+ end
+
+ context 'when pipeline does not contain any other build except .pre/.post' do
+ let(:ref) { 'refs/heads/feature' }
+
+ it 'does not create a pipeline' do
+ expect(pipeline).not_to be_persisted
+
+ # we can validate a list of stages, as they are assigned
+ # but not persisted
+ expect(pipeline.stages.map(&:name)).to contain_exactly(
+ *%w(.pre .post))
+ end
+ end
+ end
+end