diff options
Diffstat (limited to 'spec/lib/gitlab/ci/templates/templates_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/templates/templates_spec.rb | 162 |
1 files changed, 124 insertions, 38 deletions
diff --git a/spec/lib/gitlab/ci/templates/templates_spec.rb b/spec/lib/gitlab/ci/templates/templates_spec.rb index 56443e611e8..2e6df7da232 100644 --- a/spec/lib/gitlab/ci/templates/templates_spec.rb +++ b/spec/lib/gitlab/ci/templates/templates_spec.rb @@ -6,26 +6,105 @@ RSpec.describe 'CI YML Templates' do subject { Gitlab::Ci::YamlProcessor.new(content).execute } let(:all_templates) { Gitlab::Template::GitlabCiYmlTemplate.all.map(&:full_name) } - let(:excluded_templates) do - all_templates.select do |name| + excluded = all_templates.select do |name| Gitlab::Template::GitlabCiYmlTemplate.excluded_patterns.any? { |pattern| pattern.match?(name) } end + excluded + ["Terraform.gitlab-ci.yml"] end - context 'when including available templates in a CI YAML configuration' do - using RSpec::Parameterized::TableSyntax + before do + stub_feature_flags( + redirect_to_latest_template_terraform: false, + redirect_to_latest_template_security_api_fuzzing: false, + redirect_to_latest_template_security_dast: false) + end - where(:template_name) do - all_templates - excluded_templates + shared_examples 'require default stages to be included' do + it 'require default stages to be included' do + expect(subject.stages).to include(*Gitlab::Ci::Config::Entry::Stages.default) end + end + + context 'that support autodevops' do + non_autodevops_templates = [ + 'Security/DAST-API.gitlab-ci.yml', + 'Security/API-Fuzzing.gitlab-ci.yml' + ] + + context 'when including available templates in a CI YAML configuration' do + using RSpec::Parameterized::TableSyntax + + where(:template_name) do + all_templates - excluded_templates - non_autodevops_templates + end + + with_them do + let(:content) do + <<~EOS + include: + - template: #{template_name} + + concrete_build_implemented_by_a_user: + stage: test + script: do something + EOS + end + + it { is_expected.to be_valid } + + include_examples 'require default stages to be included' + end + end + + context 'when including unavailable templates in a CI YAML configuration' do + using RSpec::Parameterized::TableSyntax + + where(:template_name) do + excluded_templates + end + + with_them do + let(:content) do + <<~EOS + include: + - template: #{template_name} + + concrete_build_implemented_by_a_user: + stage: test + script: do something + EOS + end + + it { is_expected.not_to be_valid } + end + end + end + + describe 'that do not support autodevops' do + context 'when DAST API template' do + # The DAST API template purposly excludes a stages + # definition. - with_them do - let(:content) do - if template_name == 'Security/DAST-API.gitlab-ci.yml' - # The DAST-API template purposly excludes a stages - # definition. + let(:template_name) { 'Security/DAST-API.gitlab-ci.yml' } + context 'with default stages' do + let(:content) do + <<~EOS + include: + - template: #{template_name} + + concrete_build_implemented_by_a_user: + stage: test + script: do something + EOS + end + + it { is_expected.not_to be_valid } + end + + context 'with defined stages' do + let(:content) do <<~EOS include: - template: #{template_name} @@ -40,7 +119,22 @@ RSpec.describe 'CI YML Templates' do stage: test script: do something EOS - else + end + + it { is_expected.to be_valid } + + include_examples 'require default stages to be included' + end + end + + context 'when API Fuzzing template' do + # The API Fuzzing template purposly excludes a stages + # definition. + + let(:template_name) { 'Security/API-Fuzzing.gitlab-ci.yml' } + + context 'with default stages' do + let(:content) do <<~EOS include: - template: #{template_name} @@ -50,39 +144,31 @@ RSpec.describe 'CI YML Templates' do script: do something EOS end - end - - it 'is valid' do - expect(subject).to be_valid - end - it 'require default stages to be included' do - expect(subject.stages).to include(*Gitlab::Ci::Config::Entry::Stages.default) + it { is_expected.not_to be_valid } end - end - end - context 'when including unavailable templates in a CI YAML configuration' do - using RSpec::Parameterized::TableSyntax + context 'with defined stages' do + let(:content) do + <<~EOS + include: + - template: #{template_name} - where(:template_name) do - excluded_templates - end + stages: + - build + - test + - deploy + - fuzz - with_them do - let(:content) do - <<~EOS - include: - - template: #{template_name} + concrete_build_implemented_by_a_user: + stage: test + script: do something + EOS + end - concrete_build_implemented_by_a_user: - stage: test - script: do something - EOS - end + it { is_expected.to be_valid } - it 'is not valid' do - expect(subject).not_to be_valid + include_examples 'require default stages to be included' end end end |