diff options
Diffstat (limited to 'spec/lib/gitlab/ci/config/node/global_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/config/node/global_spec.rb | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb deleted file mode 100644 index 12232ff7e2f..00000000000 --- a/spec/lib/gitlab/ci/config/node/global_spec.rb +++ /dev/null @@ -1,299 +0,0 @@ -require 'spec_helper' - -describe Gitlab::Ci::Config::Node::Global do - let(:global) { described_class.new(hash) } - - describe '.nodes' do - it 'can contain global config keys' do - expect(described_class.nodes).to include :before_script - end - - it 'returns a hash' do - expect(described_class.nodes).to be_a Hash - end - end - - context 'when hash is valid' do - context 'when some entries defined' do - let(:hash) do - { before_script: ['ls', 'pwd'], - image: 'ruby:2.2', - services: ['postgres:9.1', 'mysql:5.5'], - variables: { VAR: 'value' }, - after_script: ['make clean'], - stages: ['build', 'pages'], - cache: { key: 'k', untracked: true, paths: ['public/'] }, - rspec: { script: %w[rspec ls] }, - spinach: { before_script: [], variables: {}, script: 'spinach' } } - end - - describe '#compose!' do - before { global.compose! } - - it 'creates nodes hash' do - expect(global.descendants).to be_an Array - end - - it 'creates node object for each entry' do - expect(global.descendants.count).to eq 8 - end - - it 'creates node object using valid class' do - expect(global.descendants.first) - .to be_an_instance_of Gitlab::Ci::Config::Node::Script - expect(global.descendants.second) - .to be_an_instance_of Gitlab::Ci::Config::Node::Image - end - - it 'sets correct description for nodes' do - expect(global.descendants.first.description) - .to eq 'Script that will be executed before each job.' - expect(global.descendants.second.description) - .to eq 'Docker image that will be used to execute jobs.' - end - - describe '#leaf?' do - it 'is not leaf' do - expect(global).not_to be_leaf - end - end - end - - context 'when not composed' do - describe '#before_script' do - it 'returns nil' do - expect(global.before_script).to be nil - end - end - - describe '#leaf?' do - it 'is leaf' do - expect(global).to be_leaf - end - end - end - - 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'] - end - end - - describe '#image' do - it 'returns valid image' do - expect(global.image).to eq 'ruby:2.2' - end - end - - describe '#services' do - it 'returns array of services' do - expect(global.services).to eq ['postgres:9.1', 'mysql:5.5'] - end - end - - describe '#after_script' do - it 'returns after script' do - expect(global.after_script).to eq ['make clean'] - end - end - - describe '#variables' do - it 'returns variables' do - expect(global.variables).to eq(VAR: 'value') - end - end - - describe '#stages' do - context 'when stages key defined' do - it 'returns array of stages' do - expect(global.stages).to eq %w[build pages] - end - end - - context 'when deprecated types key defined' do - let(:hash) do - { types: ['test', 'deploy'], - rspec: { script: 'rspec' } } - end - - it 'returns array of types as stages' do - expect(global.stages).to eq %w[test deploy] - end - end - end - - describe '#cache' do - it 'returns cache configuration' do - expect(global.cache) - .to eq(key: 'k', untracked: true, paths: ['public/']) - end - end - - describe '#jobs' do - it 'returns jobs configuration' do - expect(global.jobs).to eq( - rspec: { name: :rspec, - script: %w[rspec ls], - before_script: ['ls', 'pwd'], - commands: "ls\npwd\nrspec\nls", - 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, - before_script: [], - script: %w[spinach], - commands: 'spinach', - 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 - end - end - - context 'when most of entires not defined' do - before { global.compose! } - - let(:hash) do - { cache: { key: 'a' }, rspec: { script: %w[ls] } } - end - - describe '#nodes' do - it 'instantizes all nodes' do - expect(global.descendants.count).to eq 8 - end - - it 'contains unspecified nodes' do - expect(global.descendants.first) - .to be_an_instance_of Gitlab::Ci::Config::Node::Unspecified - end - end - - describe '#variables' do - it 'returns default value for variables' do - expect(global.variables).to eq({}) - end - end - - describe '#stages' do - it 'returns an array of default stages' do - expect(global.stages).to eq %w[build test deploy] - end - end - - describe '#cache' do - it 'returns correct cache definition' do - expect(global.cache).to eq(key: 'a') - end - end - end - - ## - # When nodes are specified but not defined, we assume that - # configuration is valid, and we asume that entry is simply undefined, - # despite the fact, that key is present. See issue #18775 for more - # details. - # - context 'when entires specified but not defined' do - before { global.compose! } - - let(:hash) do - { variables: nil, rspec: { script: 'rspec' } } - end - - describe '#variables' do - it 'undefined entry returns a default value' do - expect(global.variables).to eq({}) - end - end - end - end - - context 'when hash is not valid' do - before { global.compose! } - - let(:hash) do - { before_script: 'ls' } - end - - describe '#valid?' do - it 'is not valid' do - expect(global).not_to be_valid - end - end - - describe '#errors' do - it 'reports errors from child nodes' do - expect(global.errors) - .to include 'before_script config should be an array of strings' - end - end - - describe '#before_script' do - it 'returns nil' do - expect(global.before_script).to be_nil - end - end - end - - context 'when value is not a hash' do - let(:hash) { [] } - - describe '#valid?' do - it 'is not valid' do - expect(global).not_to be_valid - end - end - - describe '#errors' do - it 'returns error about invalid type' do - expect(global.errors.first).to match /should be a hash/ - end - end - end - - describe '#specified?' do - it 'is concrete entry that is defined' do - expect(global.specified?).to be true - end - end - - describe '#[]' do - before { global.compose! } - - let(:hash) do - { cache: { key: 'a' }, rspec: { script: 'ls' } } - end - - context 'when node exists' do - it 'returns correct entry' do - expect(global[:cache]) - .to be_an_instance_of Gitlab::Ci::Config::Node::Cache - expect(global[:jobs][:rspec][:script].value).to eq ['ls'] - end - end - - context 'when node does not exist' do - it 'always return unspecified node' do - expect(global[:some][:unknown][:node]) - .not_to be_specified - end - end - end -end |