diff options
Diffstat (limited to 'spec/services/ci/create_pipeline_service_spec.rb')
-rw-r--r-- | spec/services/ci/create_pipeline_service_spec.rb | 92 |
1 files changed, 89 insertions, 3 deletions
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb index b9456d5fcd4..9dc518be996 100644 --- a/spec/services/ci/create_pipeline_service_spec.rb +++ b/spec/services/ci/create_pipeline_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Ci::CreatePipelineService do +RSpec.describe Ci::CreatePipelineService do include ProjectForksHelper let_it_be(:project, reload: true) { create(:project, :repository) } @@ -80,7 +80,7 @@ describe Ci::CreatePipelineService do it 'records pipeline size in a prometheus histogram' do histogram = spy('pipeline size histogram') - allow(Gitlab::Ci::Pipeline::Chain::Metrics) + allow(Gitlab::Ci::Pipeline::Metrics) .to receive(:new).and_return(histogram) execute_service @@ -194,6 +194,7 @@ describe Ci::CreatePipelineService do expect(head_pipeline).to be_persisted expect(head_pipeline.yaml_errors).to be_present + expect(head_pipeline.messages).to be_present expect(merge_request.reload.head_pipeline).to eq head_pipeline end end @@ -511,7 +512,7 @@ describe Ci::CreatePipelineService do it 'pull it from Auto-DevOps' do pipeline = execute_service expect(pipeline).to be_auto_devops_source - expect(pipeline.builds.map(&:name)).to match_array(%w[test code_quality build]) + expect(pipeline.builds.map(&:name)).to match_array(%w[build code_quality eslint-sast test]) end end @@ -1683,6 +1684,12 @@ describe Ci::CreatePipelineService do expect(pipeline).to be_persisted expect(pipeline.builds.pluck(:name)).to contain_exactly("build_a", "test_a") end + + it 'bulk inserts all needs' do + expect(Ci::BuildNeed).to receive(:bulk_insert!).and_call_original + + expect(pipeline).to be_persisted + end end context 'when pipeline on feature is created' do @@ -1695,6 +1702,7 @@ describe Ci::CreatePipelineService do expect(pipeline).to be_persisted expect(pipeline.builds).to be_empty expect(pipeline.yaml_errors).to eq("test_a: needs 'build_a'") + expect(pipeline.messages.pluck(:content)).to contain_exactly("test_a: needs 'build_a'") expect(pipeline.errors[:base]).to contain_exactly("test_a: needs 'build_a'") end end @@ -1706,6 +1714,7 @@ describe Ci::CreatePipelineService do expect(pipeline).not_to be_persisted expect(pipeline.builds).to be_empty expect(pipeline.yaml_errors).to be_nil + expect(pipeline.messages).not_to be_empty expect(pipeline.errors[:base]).to contain_exactly("test_a: needs 'build_a'") end end @@ -2205,6 +2214,83 @@ describe Ci::CreatePipelineService do expect(find_job('job-7').when).to eq('on_failure') end end + + context 'with deploy freeze period `if:` clause' do + # '0 23 * * 5' == "At 23:00 on Friday."", '0 7 * * 1' == "At 07:00 on Monday."" + let!(:freeze_period) { create(:ci_freeze_period, project: project, freeze_start: '0 23 * * 5', freeze_end: '0 7 * * 1') } + + context 'with 2 jobs' do + let(:config) do + <<-EOY + stages: + - test + - deploy + + test-job: + script: + - echo 'running TEST stage' + + deploy-job: + stage: deploy + script: + - echo 'running DEPLOY stage' + rules: + - if: $CI_DEPLOY_FREEZE == null + EOY + end + + context 'when outside freeze period' do + it 'creates two jobs' do + Timecop.freeze(2020, 4, 10, 22, 59) do + expect(pipeline).to be_persisted + expect(build_names).to contain_exactly('test-job', 'deploy-job') + end + end + end + + context 'when inside freeze period' do + it 'creates one job' do + Timecop.freeze(2020, 4, 10, 23, 1) do + expect(pipeline).to be_persisted + expect(build_names).to contain_exactly('test-job') + end + end + end + end + + context 'with 1 job' do + let(:config) do + <<-EOY + stages: + - deploy + + deploy-job: + stage: deploy + script: + - echo 'running DEPLOY stage' + rules: + - if: $CI_DEPLOY_FREEZE == null + EOY + end + + context 'when outside freeze period' do + it 'creates two jobs' do + Timecop.freeze(2020, 4, 10, 22, 59) do + expect(pipeline).to be_persisted + expect(build_names).to contain_exactly('deploy-job') + end + end + end + + context 'when inside freeze period' do + it 'does not create the pipeline' do + Timecop.freeze(2020, 4, 10, 23, 1) do + expect(pipeline).not_to be_persisted + end + end + end + end + end end end |