summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/ci/config/node/global_spec.rb
blob: b1972172435a29f0950d665f63138860438a2b7b (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
require 'spec_helper'

describe Gitlab::Ci::Config::Node::Global do
  let(:global) { described_class.new(hash) }

  describe '#allowed_nodes' do
    it 'can contain global config keys' do
      expect(global.allowed_nodes).to include :before_script
    end

    it 'returns a hash' do
      expect(global.allowed_nodes).to be_a Hash
    end
  end

  context 'when hash is valid' do
    let(:hash) do
      { before_script: ['ls', 'pwd'] }
    end

    describe '#process!' do
      before { global.process! }

      it 'creates nodes hash' do
        expect(global.nodes).to be_an Array
      end

      it 'creates node object for each entry' do
        expect(global.nodes.count).to eq 1
      end

      it 'creates node object using valid class' do
        expect(global.nodes.first)
          .to be_an_instance_of Gitlab::Ci::Config::Node::Script
      end

      it 'sets correct description for nodes' do
        expect(global.nodes.first.description)
          .to eq 'Script that will be executed before each job.'
      end
    end

    describe '#leaf?' do
      it 'is not leaf' do
        expect(global).not_to be_leaf
      end
    end

    describe '#before_script' do
      context 'when processed' do
        before { global.process! }

        it 'returns correct script' do
          expect(global.before_script).to eq "ls\npwd"
        end
      end

      context 'when not processed' do
        it 'returns nil' do
          expect(global.before_script).to be nil
        end
      end
    end
  end

  context 'when hash is not valid' do
    before { global.process! }

    let(:hash) do
      { before_script: 'ls' }
    end

    describe '#valid?' do
      it 'is not valid' do
        expect(global).not_to be_valid
      end
    end

    describe '#errors' do
      it 'reports errors from child nodes' do
        expect(global.errors)
          .to include 'before_script should be an array of strings'
      end
    end

    describe '#before_script' do
      it 'raises error' do
        expect { global.before_script }.to raise_error(
          Gitlab::Ci::Config::Node::Entry::InvalidError
        )
      end
    end
  end

  context 'when value is not a hash' do
    let(:hash) { [] }

    describe '#valid?' do
      it 'is not valid' do
        expect(global).not_to be_valid
      end
    end
  end
end