71 lines
2.3 KiB
Ruby
71 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
|