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-07-13 15:09:18 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-07-13 15:09:18 +0300
commitce34395e91c28f282eeff3792caee84438ebb8a0 (patch)
treed350d2bf057e6707d11727701312580b8389bfed /spec/services/ci/create_pipeline_service
parent778ea71394b9bc20b614f766fbb90ddd7ef0cfe9 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/ci/create_pipeline_service')
-rw-r--r--spec/services/ci/create_pipeline_service/creation_errors_and_warnings_spec.rb114
1 files changed, 114 insertions, 0 deletions
diff --git a/spec/services/ci/create_pipeline_service/creation_errors_and_warnings_spec.rb b/spec/services/ci/create_pipeline_service/creation_errors_and_warnings_spec.rb
new file mode 100644
index 00000000000..16205529f1c
--- /dev/null
+++ b/spec/services/ci/create_pipeline_service/creation_errors_and_warnings_spec.rb
@@ -0,0 +1,114 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Ci::CreatePipelineService do
+ describe 'creation errors and warnings' do
+ let_it_be(:user) { create(:admin) }
+ let_it_be(:project) { create(:project, :repository, creator: user) }
+
+ let(:ref) { 'refs/heads/master' }
+ let(:source) { :push }
+ let(:service) { described_class.new(project, user, { ref: ref }) }
+ let(:pipeline) { service.execute(source) }
+
+ before do
+ stub_ci_pipeline_yaml_file(config)
+ stub_feature_flags(ci_raise_job_rules_without_workflow_rules_warning: true)
+ end
+
+ context 'when created successfully' do
+ context 'when warnings are raised' do
+ let(:config) do
+ <<~YAML
+ test:
+ script: rspec
+ rules:
+ - if: '$CI_COMMIT_BRANCH'
+ YAML
+ end
+
+ it 'contains only warnings' do
+ expect(pipeline.error_messages.map(&:content)).to be_empty
+
+ expect(pipeline.warning_messages.map(&:content)).to contain_exactly(
+ 'jobs:test uses `rules` without defining `workflow:rules`'
+ )
+ end
+
+ context 'when feature flag is disabled for the particular warning' do
+ before do
+ stub_feature_flags(ci_raise_job_rules_without_workflow_rules_warning: false)
+ end
+
+ it 'does not contain warnings' do
+ expect(pipeline.error_messages.map(&:content)).to be_empty
+
+ expect(pipeline.warning_messages.map(&:content)).to be_empty
+ end
+ end
+ end
+
+ context 'when no warnings are raised' do
+ let(:config) do
+ <<~YAML
+ test:
+ script: rspec
+ YAML
+ end
+
+ it 'contains no warnings' do
+ expect(pipeline.error_messages).to be_empty
+
+ expect(pipeline.warning_messages).to be_empty
+ end
+ end
+ end
+
+ context 'when failed to create the pipeline' do
+ context 'when warnings are raised' do
+ let(:config) do
+ <<~YAML
+ build:
+ stage: build
+ script: echo
+ needs: [test]
+ test:
+ stage: test
+ script: echo
+ rules:
+ - if: '$CI_COMMIT_BRANCH'
+ YAML
+ end
+
+ it 'contains both errors and warnings' do
+ error_message = 'build job: need test is not defined in prior stages'
+ warning_message = 'jobs:test uses `rules` without defining `workflow:rules`'
+
+ expect(pipeline.yaml_errors).to eq(error_message)
+ expect(pipeline.error_messages.map(&:content)).to contain_exactly(error_message)
+ expect(pipeline.errors.full_messages).to contain_exactly(error_message)
+
+ expect(pipeline.warning_messages.map(&:content)).to contain_exactly(warning_message)
+ end
+ end
+
+ context 'when no warnings are raised' do
+ let(:config) do
+ <<~YAML
+ invalid: yaml
+ YAML
+ end
+
+ it 'contains only errors' do
+ error_message = 'root config contains unknown keys: invalid'
+ expect(pipeline.yaml_errors).to eq(error_message)
+ expect(pipeline.error_messages.map(&:content)).to contain_exactly(error_message)
+ expect(pipeline.errors.full_messages).to contain_exactly(error_message)
+
+ expect(pipeline.warning_messages).to be_empty
+ end
+ end
+ end
+ end
+end