140 lines
3.4 KiB
Ruby
140 lines
3.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::Ci::Config::Node::Job do
|
|
let(:entry) { described_class.new(config, name: :rspec) }
|
|
|
|
describe 'validations' do
|
|
before { entry.compose! }
|
|
|
|
context 'when entry config value is correct' do
|
|
let(:config) { { script: 'rspec' } }
|
|
|
|
describe '#valid?' do
|
|
it 'is valid' do
|
|
expect(entry).to be_valid
|
|
end
|
|
end
|
|
|
|
context 'when job name is empty' do
|
|
let(:entry) { described_class.new(config, name: ''.to_sym) }
|
|
|
|
it 'reports error' do
|
|
expect(entry.errors)
|
|
.to include "job name can't be blank"
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when entry value is not correct' do
|
|
context 'incorrect config value type' do
|
|
let(:config) { ['incorrect'] }
|
|
|
|
describe '#errors' do
|
|
it 'reports error about a config type' do
|
|
expect(entry.errors)
|
|
.to include 'job config should be a hash'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when config is empty' do
|
|
let(:config) { {} }
|
|
|
|
describe '#valid' do
|
|
it 'is invalid' do
|
|
expect(entry).not_to be_valid
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when unknown keys detected' do
|
|
let(:config) { { unknown: true } }
|
|
|
|
describe '#valid' do
|
|
it 'is not valid' do
|
|
expect(entry).not_to be_valid
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#relevant?' do
|
|
it 'is a relevant entry' do
|
|
expect(entry).to be_relevant
|
|
end
|
|
end
|
|
|
|
describe '#compose!' do
|
|
let(:unspecified) { double('unspecified', 'specified?' => false) }
|
|
|
|
let(:specified) do
|
|
double('specified', 'specified?' => true, value: 'specified')
|
|
end
|
|
|
|
let(:deps) { double('deps', '[]' => unspecified) }
|
|
|
|
context 'when job config overrides global config' do
|
|
before { entry.compose!(deps) }
|
|
|
|
let(:config) do
|
|
{ image: 'some_image', cache: { key: 'test' } }
|
|
end
|
|
|
|
it 'overrides global config' do
|
|
expect(entry[:image].value).to eq 'some_image'
|
|
expect(entry[:cache].value).to eq(key: 'test')
|
|
end
|
|
end
|
|
|
|
context 'when job config does not override global config' do
|
|
before do
|
|
allow(deps).to receive('[]').with(:image).and_return(specified)
|
|
entry.compose!(deps)
|
|
end
|
|
|
|
let(:config) { { script: 'ls', cache: { key: 'test' } } }
|
|
|
|
it 'uses config from global entry' do
|
|
expect(entry[:image].value).to eq 'specified'
|
|
expect(entry[:cache].value).to eq(key: 'test')
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when composed' do
|
|
before { entry.compose! }
|
|
|
|
describe '#value' do
|
|
before { entry.compose! }
|
|
|
|
context 'when entry is correct' do
|
|
let(:config) do
|
|
{ before_script: %w[ls pwd],
|
|
script: 'rspec',
|
|
after_script: %w[cleanup] }
|
|
end
|
|
|
|
it 'returns correct value' do
|
|
expect(entry.value)
|
|
.to eq(name: :rspec,
|
|
before_script: %w[ls pwd],
|
|
script: %w[rspec],
|
|
commands: "ls\npwd\nrspec",
|
|
stage: 'test',
|
|
after_script: %w[cleanup])
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#commands' do
|
|
let(:config) do
|
|
{ before_script: %w[ls pwd], script: 'rspec' }
|
|
end
|
|
|
|
it 'returns a string of commands concatenated with new line character' do
|
|
expect(entry.commands).to eq "ls\npwd\nrspec"
|
|
end
|
|
end
|
|
end
|
|
end
|