summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/template/gitlab_ci_yml_template_spec.rb
blob: 226fdb9c94873aae2146405c66579e9ba5d4a0c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::Template::GitlabCiYmlTemplate do
  subject { described_class }

  describe '.all' do
    it 'combines the globals and rest' do
      all = subject.all.map(&:name)

      expect(all).to include('Elixir')
      expect(all).to include('Docker')
      expect(all).to include('Ruby')
    end

    it 'does not include Browser-Performance template in FOSS' do
      all = subject.all.map(&:name)

      expect(all).not_to include('Browser-Performance') unless Gitlab.ee?
    end
  end

  describe '.find' do
    let_it_be(:project) { create(:project) }
    let_it_be(:other_project) { create(:project) }

    described_class::TEMPLATES_WITH_LATEST_VERSION.keys.each do |key|
      it "finds the latest template for #{key}" do
        result = described_class.find(key, project)
        expect(result.full_name).to eq("#{key}.latest.gitlab-ci.yml")
        expect(result.content).to be_present
      end

      context 'when `redirect_to_latest_template` feature flag is disabled' do
        before do
          stub_feature_flags("redirect_to_latest_template_#{key.underscore.tr('/', '_')}".to_sym => false)
        end

        it "finds the stable template for #{key}" do
          result = described_class.find(key, project)
          expect(result.full_name).to eq("#{key}.gitlab-ci.yml")
          expect(result.content).to be_present
        end
      end

      context 'when `redirect_to_latest_template` feature flag is enabled on the project' do
        before do
          stub_feature_flags("redirect_to_latest_template_#{key.underscore.tr('/', '_')}".to_sym => project)
        end

        it "finds the latest template for #{key}" do
          result = described_class.find(key, project)
          expect(result.full_name).to eq("#{key}.latest.gitlab-ci.yml")
          expect(result.content).to be_present
        end
      end

      context 'when `redirect_to_latest_template` feature flag is enabled on the other project' do
        before do
          stub_feature_flags("redirect_to_latest_template_#{key.underscore.tr('/', '_')}".to_sym => other_project)
        end

        it "finds the stable template for #{key}" do
          result = described_class.find(key, project)
          expect(result.full_name).to eq("#{key}.gitlab-ci.yml")
          expect(result.content).to be_present
        end
      end
    end
  end

  describe '#content' do
    it 'loads the full file' do
      gitignore = subject.new(Rails.root.join('lib/gitlab/ci/templates/Ruby.gitlab-ci.yml'))

      expect(gitignore.name).to eq 'Ruby'
      expect(gitignore.content).to start_with('#')
    end
  end

  it_behaves_like 'file template shared examples', 'Ruby', '.gitlab-ci.yml'
end