Commit d2f46c30 authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Add feature tests for CI/CD `extends` keyword

parent 9a4117ab
...@@ -107,5 +107,21 @@ describe Gitlab::Ci::Config do ...@@ -107,5 +107,21 @@ describe Gitlab::Ci::Config do
end end
end end
end end
context 'when invalid extended hash has been provided' do
let(:yml) do
<<-EOS
test:
extends: test
script: rspec
EOS
end
it 'raises an error' do
expect { config }.to raise_error(
described_class::ConfigError, /Circular dependency detected/
)
end
end
end end
end end
...@@ -562,6 +562,58 @@ module Gitlab ...@@ -562,6 +562,58 @@ module Gitlab
end end
end end
   
context 'when using `extends`' do
let(:config_processor) { Gitlab::Ci::YamlProcessor.new(config) }
subject { config_processor.builds.first }
context 'when using simple `extends`' do
let(:config) do
<<~YAML
.template:
script: test
rspec:
extends: .template
image: ruby:alpine
YAML
end
it 'correctly extends rspec job' do
expect(config_processor.builds).to be_one
expect(subject.dig(:commands)).to eq 'test'
expect(subject.dig(:options, :image, :name)).to eq 'ruby:alpine'
end
end
context 'when using recursive `extends`' do
let(:config) do
<<~YAML
rspec:
extends: .test
script: rspec
when: always
.template:
before_script:
- bundle install
.test:
extends: .template
script: test
image: image:test
YAML
end
it 'correctly extends rspec job' do
expect(config_processor.builds).to be_one
expect(subject.dig(:commands)).to eq "bundle install\nrspec"
expect(subject.dig(:options, :image, :name)).to eq 'image:test'
expect(subject.dig(:when)).to eq 'always'
end
end
end
describe "When" do describe "When" do
%w(on_success on_failure always).each do |when_state| %w(on_success on_failure always).each do |when_state|
it "returns #{when_state} when defined" do it "returns #{when_state} when defined" do
...@@ -1309,6 +1361,14 @@ module Gitlab ...@@ -1309,6 +1361,14 @@ module Gitlab
.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError, .to raise_error(Gitlab::Ci::YamlProcessor::ValidationError,
'jobs:rspec:only variables invalid expression syntax') 'jobs:rspec:only variables invalid expression syntax')
end end
it 'returns errors if extended hash configuration is invalid' do
config = YAML.dump({ rspec: { extends: 'something', script: 'test' } })
expect { Gitlab::Ci::YamlProcessor.new(config) }
.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError,
'Unknown extends key in extended `rspec`!')
end
end end
   
describe "Validate configuration templates" do describe "Validate configuration templates" do
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment