diff options
author | Paul B <paul@bonaud.fr> | 2019-01-02 10:57:31 +0100 |
---|---|---|
committer | Paul B <paul@bonaud.fr> | 2019-02-19 17:10:51 +0100 |
commit | d3aa9feffd725f8fd7e1826c56c0e26d6708ac38 (patch) | |
tree | 48b1baf4b6a8b3f24d1aba1ac0f40eb3d6e0f9a4 /spec | |
parent | 30791a36c57140f56cb5d2f14a7f79ff36c1afa9 (diff) | |
download | gitlab-ce-d3aa9feffd725f8fd7e1826c56c0e26d6708ac38.tar.gz |
tests(yaml_processor): complete test scenarios on 'include' keyword
Diffstat (limited to 'spec')
-rw-r--r-- | spec/lib/gitlab/ci/config/entry/global_spec.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/yaml_processor_spec.rb | 80 |
2 files changed, 78 insertions, 8 deletions
diff --git a/spec/lib/gitlab/ci/config/entry/global_spec.rb b/spec/lib/gitlab/ci/config/entry/global_spec.rb index 7651f594a4c..e23efff18d5 100644 --- a/spec/lib/gitlab/ci/config/entry/global_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/global_spec.rb @@ -13,7 +13,7 @@ describe Gitlab::Ci::Config::Entry::Global do expect(described_class.nodes.keys) .to match_array(%i[before_script image services after_script variables stages - types cache]) + types cache include]) end end end @@ -42,7 +42,7 @@ describe Gitlab::Ci::Config::Entry::Global do end it 'creates node object for each entry' do - expect(global.descendants.count).to eq 8 + expect(global.descendants.count).to eq 9 end it 'creates node object using valid class' do @@ -189,7 +189,7 @@ describe Gitlab::Ci::Config::Entry::Global do describe '#nodes' do it 'instantizes all nodes' do - expect(global.descendants.count).to eq 8 + expect(global.descendants.count).to eq 9 end it 'contains unspecified nodes' do diff --git a/spec/lib/gitlab/ci/yaml_processor_spec.rb b/spec/lib/gitlab/ci/yaml_processor_spec.rb index 8d9ae2ff22a..29638ef47c5 100644 --- a/spec/lib/gitlab/ci/yaml_processor_spec.rb +++ b/spec/lib/gitlab/ci/yaml_processor_spec.rb @@ -603,11 +603,81 @@ module Gitlab end describe "Include" do - it "does not return any error with a valid configuration" do - config = YAML.dump({ include: "/local.gitlab-ci.yml" }) - expect do - Gitlab::Ci::YamlProcessor.new(config) - end.not_to raise_error(Gitlab::Ci::YamlProcessor::ValidationError) + let(:opts) { {} } + + let(:config) do + { + include: include_content, + rspec: { script: "test" } + } + end + + subject { Gitlab::Ci::YamlProcessor.new(YAML.dump(config), opts) } + + context "when validating a ci config file with no project context" do + context "when an array is provided" do + let(:include_content) { ["/local.gitlab-ci.yml"] } + + it "does not return any error" do + expect { subject }.not_to raise_error + end + end + + context "when an array of wrong keyed object is provided" do + let(:include_content) { [{ yolo: "/local.gitlab-ci.yml" }] } + + it "returns a validation error" do + expect { subject }.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError) + end + end + + context "when an array of mixed typed objects is provided" do + let(:include_content) do + [ + 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml', + '/templates/.after-script-template.yml', + { template: 'Auto-DevOps.gitlab-ci.yml' } + ] + end + + it "does not return any error" do + expect { subject }.not_to raise_error + end + end + + context "when the include type is incorrect" do + let(:include_content) { { name: "/local.gitlab-ci.yml" } } + + it "returns an invalid configuration error" do + expect { subject }.to raise_error(Gitlab::Ci::YamlProcessor::ValidationError) + end + end + end + + context "when validating a ci config file within a project" do + let(:include_content) { "/local.gitlab-ci.yml" } + let(:project) { create(:project, :repository) } + let(:opts) { { project: project, sha: project.commit.sha } } + + context "when the included internal file is present" do + before do + expect(project.repository).to receive(:blob_data_at) + .and_return(YAML.dump({ job1: { script: 'hello' } })) + end + + it "does not return an error" do + expect { subject }.not_to raise_error + end + end + + context "when the included internal file is not present" do + it "returns an error with missing file details" do + expect { subject }.to raise_error( + Gitlab::Ci::YamlProcessor::ValidationError, + "Local file `#{include_content}` does not exist!" + ) + end + end end end |