summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/ci/config/extendable_spec.rb
blob: a23fe560202430cf883214327e257a853e6ced42 (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
require 'fast_spec_helper'

describe Gitlab::Ci::Config::Extendable do
  subject { described_class.new(hash) }

  describe '#each' do
    context 'when there is extendable entry in the hash' do
      let(:test) do
        { extends: 'something', only: %w[master] }
      end

      let(:hash) do
        { something: { script: 'ls' }, test: test }
      end

      it 'yields the test hash' do
        expect { |b| subject.each(&b) }
          .to yield_with_args(:test, :something, test)
      end
    end

    pending 'when not extending using a hash'
  end

  describe '#extend!' do
    context 'when a hash has a single simple extension' do
      let(:hash) do
        {
          something: {
            script: 'deploy',
            only: { variables: %w[$SOMETHING] }
          },
          test: {
            extends: 'something',
            script: 'ls',
            only: { refs: %w[master] }
          }
        }
      end

      it 'extends a hash with reverse merge' do
        expect(subject.extend!).to eq(
          something: {
            script: 'deploy',
            only: { variables: %w[$SOMETHING] }
          },
          test: {
            extends: 'something',
            script: 'ls',
            only: {
              refs: %w[master],
              variables: %w[$SOMETHING]
            }
          }
        )
      end
    end

    pending 'when a hash recursive extensions'

    pending 'when invalid `extends` is specified'
  end
end