diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb index c45744efdf52d820584be7669e4081014fbd5233..bdef2af9ae1d0feb826a820cca45d9dd6fd41155 100644 --- a/lib/gitlab/ci/config/node/entry.rb +++ b/lib/gitlab/ci/config/node/entry.rb @@ -20,14 +20,18 @@ module Gitlab def process! return if leaf? || invalid? - keys.each do |key, entry| - add_node(key, entry) - end + compose! nodes.each(&:process!) nodes.each(&:validate!) end + def compose! + keys.each do |key, entry| + add_node(key, entry) + end + end + def nodes @nodes.values end diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb index ecfd60b2736d230b536e58287021801d2dd3f421..606750648d4768dadfa36e4e49896d32c25a15d5 100644 --- a/spec/lib/gitlab/ci/config/node/global_spec.rb +++ b/spec/lib/gitlab/ci/config/node/global_spec.rb @@ -3,8 +3,6 @@ require 'spec_helper' describe Gitlab::Ci::Config::Node::Global do let(:global) { described_class.new(hash) } - before { global.process! } - describe '#keys' do it 'can contain global config keys' do expect(global.keys).to include :before_script @@ -20,7 +18,18 @@ describe Gitlab::Ci::Config::Node::Global do { before_script: ['ls', 'pwd'] } end + describe '#compose!' do + before { global.compose! } + + it 'instantiates entry nodes' do + expect(global.nodes.first) + .to be_an_instance_of Gitlab::Ci::Config::Node::Script + end + end + describe '#process!' do + before { global.process! } + it 'creates nodes hash' do expect(global.nodes).to be_an Array end @@ -48,13 +57,25 @@ describe Gitlab::Ci::Config::Node::Global do end describe '#before_script' do - it 'returns correct script' do - expect(global.before_script).to eq "ls\npwd" + context 'when processed' do + before { global.process! } + + it 'returns correct script' do + expect(global.before_script).to eq "ls\npwd" + end + end + + context 'when not processed' do + it 'returns nil' do + expect(global.before_script).to be nil + end end end end context 'when hash is not valid' do + before { global.process! } + let(:hash) do { before_script: 'ls' } end