diff options
Diffstat (limited to 'spec/lib/gitlab/ci/config/external')
-rw-r--r-- | spec/lib/gitlab/ci/config/external/file/remote_spec.rb | 39 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/config/external/mapper_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/config/external/processor_spec.rb | 30 |
3 files changed, 71 insertions, 2 deletions
diff --git a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb index 45dfea636f3..c22afb32756 100644 --- a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb +++ b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb @@ -219,4 +219,43 @@ RSpec.describe Gitlab::Ci::Config::External::File::Remote do ) } end + + describe '#to_hash' do + subject(:to_hash) { remote_file.to_hash } + + before do + stub_full_request(location).to_return(body: remote_file_content) + end + + context 'with a valid remote file' do + it 'returns the content as a hash' do + expect(to_hash).to eql( + before_script: ["apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs", + "ruby -v", + "which ruby", + "bundle install --jobs $(nproc) \"${FLAGS[@]}\""] + ) + end + end + + context 'when it has `include` with rules:exists' do + let(:remote_file_content) do + <<~HEREDOC + include: + - local: another-file.yml + rules: + - exists: [Dockerfile] + HEREDOC + end + + it 'returns the content as a hash' do + expect(to_hash).to eql( + include: [ + { local: 'another-file.yml', + rules: [{ exists: ['Dockerfile'] }] } + ] + ) + end + end + end end diff --git a/spec/lib/gitlab/ci/config/external/mapper_spec.rb b/spec/lib/gitlab/ci/config/external/mapper_spec.rb index e74fdc2071b..9eaba12f388 100644 --- a/spec/lib/gitlab/ci/config/external/mapper_spec.rb +++ b/spec/lib/gitlab/ci/config/external/mapper_spec.rb @@ -210,7 +210,7 @@ RSpec.describe Gitlab::Ci::Config::External::Mapper do { 'local' => local_file }, { 'local' => local_file } ], - image: 'image:1.0' } + image: 'image:1.0' } end it 'does not raise an exception' do @@ -427,7 +427,7 @@ RSpec.describe Gitlab::Ci::Config::External::Mapper do { 'local' => 'hello/secret-file1.yml' }, { 'local' => 'hello/secret-file2.yml' } ], - image: 'ruby:2.7' } + image: 'ruby:2.7' } end it 'has expanset with two' do diff --git a/spec/lib/gitlab/ci/config/external/processor_spec.rb b/spec/lib/gitlab/ci/config/external/processor_spec.rb index 841a46e197d..b1dff6f9723 100644 --- a/spec/lib/gitlab/ci/config/external/processor_spec.rb +++ b/spec/lib/gitlab/ci/config/external/processor_spec.rb @@ -94,6 +94,36 @@ RSpec.describe Gitlab::Ci::Config::External::Processor do end end + context 'when the remote file has `include` with rules:exists' do + let(:remote_file) { 'https://gitlab.com/gitlab-org/gitlab-foss/blob/1234/.gitlab-ci-1.yml' } + let(:values) { { include: remote_file, image: 'image:1.0' } } + let(:external_file_content) do + <<-HEREDOC + include: + - local: another-file.yml + rules: + - exists: [Dockerfile] + + rspec: + script: + - bundle exec rspec + HEREDOC + end + + before do + stub_full_request(remote_file).to_return(body: external_file_content) + end + + it 'evaluates the rule as false' do + output = processor.perform + expect(output.keys).to match_array([:image, :rspec]) + end + + it "removes the 'include' keyword" do + expect(processor.perform[:include]).to be_nil + end + end + context 'with a valid local external file is defined' do let(:values) { { include: '/lib/gitlab/ci/templates/template.yml', image: 'image:1.0' } } let(:local_file_content) do |