diff --git a/lib/gitlab/ci/config/node/jobs.rb b/lib/gitlab/ci/config/node/jobs.rb index 2df2d55aca28b56e6070cea59c3e9d9f72173dd8..915b46652f2a5cde54f44fe93379c8bd35c76125 100644 --- a/lib/gitlab/ci/config/node/jobs.rb +++ b/lib/gitlab/ci/config/node/jobs.rb @@ -11,6 +11,20 @@ module Gitlab validations do validates :config, type: Hash end + + def nodes + @config + end + + private + + def create_node(key, essence) + Node::Job.new(essence).tap do |job| + job.key = key + job.parent = self + job.description = "#{key} job definition." + end + end end end end diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index bad439bc48937e990fa883eef7717647da5133de..49a786191b8dcd02946e486614cb2ec0323e4960 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -1043,11 +1043,11 @@ EOT end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: services should be an array of strings") end - it "returns errors if there are unknown parameters" do + it "returns error if job configuration is invalid" do config = YAML.dump({ extra: "bundle update" }) expect do GitlabCiYamlProcessor.new(config, path) - end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Unknown parameter: extra") + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra config should be a hash") end it "returns errors if there are unknown parameters that are hashes, but doesn't have a script" do diff --git a/spec/lib/gitlab/ci/config/node/jobs_spec.rb b/spec/lib/gitlab/ci/config/node/jobs_spec.rb index 3afa3de06c682ca27567ebcf21df7ed58be9ea95..7f80e11cea37193de5e4b7f2230d73c4b210fb0d 100644 --- a/spec/lib/gitlab/ci/config/node/jobs_spec.rb +++ b/spec/lib/gitlab/ci/config/node/jobs_spec.rb @@ -4,6 +4,8 @@ describe Gitlab::Ci::Config::Node::Jobs do let(:entry) { described_class.new(config) } describe 'validations' do + before { entry.process! } + context 'when entry config value is correct' do let(:config) { { rspec: { script: 'rspec' } } } @@ -33,4 +35,19 @@ describe Gitlab::Ci::Config::Node::Jobs do end end end + + describe '#descendants' do + before { entry.process! } + + let(:config) do + { rspec: { script: 'rspec' }, + spinach: { script: 'spinach' } } + end + + it 'creates two descendant nodes' do + expect(entry.descendants.count).to eq 2 + expect(entry.descendants) + .to all(be_an_instance_of(Gitlab::Ci::Config::Node::Job)) + end + end end