summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/models/issuable_hook_data_shared_examples.rb
blob: 13ffc1b7f87b5b5f832cf9bf9d6ff7b2fe7f4616 (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
# frozen_string_literal: true

# This shared example requires a `builder` and `user` variable
RSpec.shared_examples 'issuable hook data' do |kind|
  let(:data) { builder.build(user: user) }

  include_examples 'project hook data' do
    let(:project) { builder.issuable.project }
  end

  include_examples 'deprecated repository hook data'

  context "with a #{kind}" do
    it 'contains issuable data' do
      expect(data[:object_kind]).to eq(kind)
      expect(data[:user]).to eq(user.hook_attrs)
      expect(data[:project]).to eq(builder.issuable.project.hook_attrs)
      expect(data[:object_attributes]).to eq(builder.issuable.hook_attrs)
      expect(data[:changes]).to eq({})
      expect(data[:repository]).to eq(builder.issuable.project.hook_attrs.slice(:name, :url, :description, :homepage))
    end

    it 'does not contain certain keys' do
      expect(data).not_to have_key(:assignees)
      expect(data).not_to have_key(:assignee)
    end

    describe 'changes are given' do
      let(:changes) do
        {
          cached_markdown_version: %w[foo bar],
          description: ['A description', 'A cool description'],
          description_html: %w[foo bar],
          in_progress_merge_commit_sha: %w[foo bar],
          lock_version: %w[foo bar],
          merge_jid: %w[foo bar],
          title: ['A title', 'Hello World'],
          title_html: %w[foo bar]
        }
      end

      let(:data) { builder.build(user: user, changes: changes) }

      it 'populates the :changes hash' do
        expect(data[:changes]).to match(hash_including({
          title: { previous: 'A title', current: 'Hello World' },
          description: { previous: 'A description', current: 'A cool description' }
        }))
      end

      it 'does not contain certain keys' do
        expect(data[:changes]).not_to have_key('cached_markdown_version')
        expect(data[:changes]).not_to have_key('description_html')
        expect(data[:changes]).not_to have_key('lock_version')
        expect(data[:changes]).not_to have_key('title_html')
        expect(data[:changes]).not_to have_key('in_progress_merge_commit_sha')
        expect(data[:changes]).not_to have_key('merge_jid')
      end
    end
  end
end