debian-mirror-gitlab/qa/spec/resource/project_web_hook_spec.rb
2023-05-27 22:25:52 +05:30

70 lines
2.3 KiB
Ruby

# 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