summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-08-29 12:44:14 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-08-29 13:10:20 +0200
commit62f704c5ad421a538257917d75f68b3c698b9be0 (patch)
tree687cffa8bca1f5b62fce1e7cf50e99a6acdfc166 /spec
parent30f58cf3924610564ca95b0ac17b69d272e74f5f (diff)
downloadgitlab-ce-62f704c5ad421a538257917d75f68b3c698b9be0.tar.gz
Make it possible to inherit global ci config nodes
Diffstat (limited to 'spec')
-rw-r--r--spec/lib/gitlab/ci/config/node/global_spec.rb30
-rw-r--r--spec/lib/gitlab/ci/config/node/job_spec.rb43
2 files changed, 65 insertions, 8 deletions
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb
index 4ff2320f1bf..951f5f956d8 100644
--- a/spec/lib/gitlab/ci/config/node/global_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/global_spec.rb
@@ -14,7 +14,7 @@ describe Gitlab::Ci::Config::Node::Global do
end
context 'when hash is valid' do
- context 'when all entries defined' do
+ context 'when some entries defined' do
let(:hash) do
{ before_script: ['ls', 'pwd'],
image: 'ruby:2.2',
@@ -24,7 +24,7 @@ describe Gitlab::Ci::Config::Node::Global do
stages: ['build', 'pages'],
cache: { key: 'k', untracked: true, paths: ['public/'] },
rspec: { script: %w[rspec ls] },
- spinach: { script: 'spinach' } }
+ spinach: { before_script: [], variables: {}, script: 'spinach' } }
end
describe '#compose!' do
@@ -76,6 +76,12 @@ describe Gitlab::Ci::Config::Node::Global do
context 'when composed' do
before { global.compose! }
+ describe '#errors' do
+ it 'has no errors' do
+ expect(global.errors).to be_empty
+ end
+ end
+
describe '#before_script' do
it 'returns correct script' do
expect(global.before_script).to eq ['ls', 'pwd']
@@ -135,12 +141,24 @@ describe Gitlab::Ci::Config::Node::Global do
describe '#jobs' do
it 'returns jobs configuration' do
expect(global.jobs).to eq(
- rspec: { name: :rspec,
- script: %w[rspec ls],
- stage: 'test' },
+ rspec: { script: %w[rspec ls],
+ name: :rspec,
+ before_script: ['ls', 'pwd'],
+ image: 'ruby:2.2',
+ services: ['postgres:9.1', 'mysql:5.5'],
+ stage: 'test',
+ cache: { key: 'k', untracked: true, paths: ['public/'] },
+ variables: { VAR: 'value' },
+ after_script: ['make clean'] },
spinach: { name: :spinach,
script: %w[spinach],
- stage: 'test' }
+ before_script: [],
+ image: 'ruby:2.2',
+ services: ['postgres:9.1', 'mysql:5.5'],
+ stage: 'test',
+ cache: { key: 'k', untracked: true, paths: ['public/'] },
+ variables: {},
+ after_script: ['make clean'] },
)
end
end
diff --git a/spec/lib/gitlab/ci/config/node/job_spec.rb b/spec/lib/gitlab/ci/config/node/job_spec.rb
index 74aa616720e..f34a3786a0d 100644
--- a/spec/lib/gitlab/ci/config/node/job_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/job_spec.rb
@@ -3,9 +3,9 @@ require 'spec_helper'
describe Gitlab::Ci::Config::Node::Job do
let(:entry) { described_class.new(config, name: :rspec) }
- before { entry.compose! }
-
describe 'validations' do
+ before { entry.compose! }
+
context 'when entry config value is correct' do
let(:config) { { script: 'rspec' } }
@@ -60,6 +60,8 @@ describe Gitlab::Ci::Config::Node::Job do
end
describe '#value' do
+ before { entry.compose! }
+
context 'when entry is correct' do
let(:config) do
{ before_script: %w[ls pwd],
@@ -83,4 +85,41 @@ describe Gitlab::Ci::Config::Node::Job 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) { spy('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
end