summaryrefslogtreecommitdiff
path: root/qa/spec/resource/project_web_hook_spec.rb
blob: bca95124c060356c9932288b7c25b23e462397d4 (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
# frozen_string_literal: true

module QA
  RSpec.describe Resource::ProjectWebHook do
    let(:smocker_api) { instance_double(Vendor::Smocker::SmockerApi) }
    let(:smocker_docker) { class_double(Service::DockerRun::Smocker) }
    let(:history_entries) do
      [
        {
          request: {
            body: {
              object_kind: 'tag_push'
            }
          }
        },
        {
          request: {
            body: {
              object_kind: 'merge_request'
            }
          }
        }
      ]
    end

    let(:history_response) { Struct.new(:body).new(history_entries.to_json) }

    it 'configures the project hook events' do
      setup_mocks

      described_class.setup(pipeline: true, wiki_page: true) do |webhook, _|
        expect(webhook.pipeline_events).to be(true)
        expect(webhook.wiki_page_events).to be(true)
        expect(webhook.push_events).to be(false)
      end
    end

    it 'adds an #event method to the smocker object that returns webhook events' do
      setup_mocks

      # rubocop:disable RSpec/AnyInstanceOf
      expect_any_instance_of(Vendor::Smocker::SmockerApi).to receive(:get_session_id)
                                                               .and_return('123')
      expect_any_instance_of(Vendor::Smocker::SmockerApi).to receive(:get)
                                                               .with(/history/)
                                                               .and_return(history_response)
      # rubocop:enable RSpec/AnyInstanceOf

      described_class.setup do |_, smocker|
        expect(smocker.events('123')).to include(
          a_hash_including(object_kind: 'merge_request'),
          a_hash_including(object_kind: 'tag_push')
        )
      end
    end

    def setup_mocks
      # rubocop:disable RSpec/AnyInstanceOf
      expect_any_instance_of(Vendor::Smocker::SmockerApi).to receive(:reset)
      expect_any_instance_of(Vendor::Smocker::SmockerApi).to receive(:register)
      # rubocop:enable RSpec/AnyInstanceOf

      expect(Service::DockerRun::Smocker).to receive(:init)
                                               .and_yield(Vendor::Smocker::SmockerApi.new(host: 'smocker.net'))
      allow(subject).to receive(:project)
      allow(described_class).to receive(:fabricate_via_api!)
                                  .and_yield(subject)
    end
  end
end