137 lines
5.3 KiB
Ruby
137 lines
5.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Ci::CreatePipelineService, :yaml_processor_feature_flag_corectness do
|
||
|
let_it_be(:project) { create(:project, :repository) }
|
||
|
let_it_be(:user) { project.first_owner }
|
||
|
|
||
|
let(:service) { described_class.new(project, user, { ref: 'master' }) }
|
||
|
let(:pipeline) { service.execute(:push).payload }
|
||
|
|
||
|
before do
|
||
|
stub_ci_pipeline_yaml_file(config)
|
||
|
end
|
||
|
|
||
|
context 'when using variables' do
|
||
|
context 'when variables have expand: true/false' do
|
||
|
let(:config) do
|
||
|
<<-YAML
|
||
|
variables:
|
||
|
VAR7:
|
||
|
value: "value 7 $CI_PIPELINE_ID"
|
||
|
expand: false
|
||
|
VAR8:
|
||
|
value: "value 8 $CI_PIPELINE_ID"
|
||
|
expand: false
|
||
|
|
||
|
rspec:
|
||
|
script: rspec
|
||
|
variables:
|
||
|
VAR1: "JOBID-$CI_JOB_ID"
|
||
|
VAR2: "PIPELINEID-$CI_PIPELINE_ID and $VAR1"
|
||
|
VAR3:
|
||
|
value: "PIPELINEID-$CI_PIPELINE_ID and $VAR1"
|
||
|
expand: false
|
||
|
VAR4:
|
||
|
value: "JOBID-$CI_JOB_ID"
|
||
|
expand: false
|
||
|
VAR5: "PIPELINEID-$CI_PIPELINE_ID and $VAR4"
|
||
|
VAR6:
|
||
|
value: "PIPELINEID-$CI_PIPELINE_ID and $VAR4"
|
||
|
expand: false
|
||
|
VAR7: "overridden value 7 $CI_PIPELINE_ID"
|
||
|
YAML
|
||
|
end
|
||
|
|
||
|
let(:rspec) { find_job('rspec') }
|
||
|
|
||
|
it 'creates the pipeline with a job that has variable expanded according to "expand"' do
|
||
|
expect(pipeline).to be_created_successfully
|
||
|
|
||
|
expect(Ci::BuildRunnerPresenter.new(rspec).runner_variables).to include(
|
||
|
{ key: 'VAR1', value: "JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR2', value: "PIPELINEID-#{pipeline.id} and JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR3', value: "PIPELINEID-$CI_PIPELINE_ID and $VAR1", public: true, masked: false, raw: true },
|
||
|
{ key: 'VAR4', value: "JOBID-$CI_JOB_ID", public: true, masked: false, raw: true },
|
||
|
{ key: 'VAR5', value: "PIPELINEID-#{pipeline.id} and $VAR4", public: true, masked: false },
|
||
|
{ key: 'VAR6', value: "PIPELINEID-$CI_PIPELINE_ID and $VAR4", public: true, masked: false, raw: true },
|
||
|
{ key: 'VAR7', value: "overridden value 7 #{pipeline.id}", public: true, masked: false },
|
||
|
{ key: 'VAR8', value: "value 8 $CI_PIPELINE_ID", public: true, masked: false, raw: true }
|
||
|
)
|
||
|
end
|
||
|
|
||
|
context 'when the FF ci_raw_variables_in_yaml_config is disabled' do
|
||
|
before do
|
||
|
stub_feature_flags(ci_raw_variables_in_yaml_config: false)
|
||
|
end
|
||
|
|
||
|
it 'creates the pipeline with a job that has all variables expanded' do
|
||
|
expect(pipeline).to be_created_successfully
|
||
|
|
||
|
expect(Ci::BuildRunnerPresenter.new(rspec).runner_variables).to include(
|
||
|
{ key: 'VAR1', value: "JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR2', value: "PIPELINEID-#{pipeline.id} and JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR3', value: "PIPELINEID-#{pipeline.id} and JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR4', value: "JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR5', value: "PIPELINEID-#{pipeline.id} and JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR6', value: "PIPELINEID-#{pipeline.id} and JOBID-#{rspec.id}", public: true, masked: false },
|
||
|
{ key: 'VAR7', value: "overridden value 7 #{pipeline.id}", public: true, masked: false },
|
||
|
{ key: 'VAR8', value: "value 8 #{pipeline.id}", public: true, masked: false }
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when trigger variables have expand: true/false' do
|
||
|
let(:config) do
|
||
|
<<-YAML
|
||
|
child:
|
||
|
variables:
|
||
|
VAR1: "PROJECTID-$CI_PROJECT_ID"
|
||
|
VAR2: "PIPELINEID-$CI_PIPELINE_ID and $VAR1"
|
||
|
VAR3:
|
||
|
value: "PIPELINEID-$CI_PIPELINE_ID and $VAR1"
|
||
|
expand: false
|
||
|
trigger:
|
||
|
include: child.yml
|
||
|
YAML
|
||
|
end
|
||
|
|
||
|
let(:child) { find_job('child') }
|
||
|
|
||
|
it 'creates the pipeline with a trigger job that has downstream_variables expanded according to "expand"' do
|
||
|
expect(pipeline).to be_created_successfully
|
||
|
|
||
|
expect(child.downstream_variables).to include(
|
||
|
{ key: 'VAR1', value: "PROJECTID-#{project.id}" },
|
||
|
{ key: 'VAR2', value: "PIPELINEID-#{pipeline.id} and PROJECTID-$CI_PROJECT_ID" },
|
||
|
{ key: 'VAR3', value: "PIPELINEID-$CI_PIPELINE_ID and $VAR1", raw: true }
|
||
|
)
|
||
|
end
|
||
|
|
||
|
context 'when the FF ci_raw_variables_in_yaml_config is disabled' do
|
||
|
before do
|
||
|
stub_feature_flags(ci_raw_variables_in_yaml_config: false)
|
||
|
end
|
||
|
|
||
|
it 'creates the pipeline with a job that has all variables expanded' do
|
||
|
expect(pipeline).to be_created_successfully
|
||
|
|
||
|
expect(child.downstream_variables).to include(
|
||
|
{ key: 'VAR1', value: "PROJECTID-#{project.id}" },
|
||
|
{ key: 'VAR2', value: "PIPELINEID-#{pipeline.id} and PROJECTID-$CI_PROJECT_ID" },
|
||
|
{ key: 'VAR3', value: "PIPELINEID-#{pipeline.id} and PROJECTID-$CI_PROJECT_ID" }
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def find_job(name)
|
||
|
pipeline.processables.find { |job| job.name == name }
|
||
|
end
|
||
|
end
|