Merge branch 'sh-simplify-system-hook-testing' into 'master'
Simplify system hook testing and guarantee test will fire Closes #37067 See merge request !13858
This commit is contained in:
commit
073811074b
|
@ -2,47 +2,16 @@ module TestHooks
|
||||||
class SystemService < TestHooks::BaseService
|
class SystemService < TestHooks::BaseService
|
||||||
private
|
private
|
||||||
|
|
||||||
def project
|
|
||||||
@project ||= begin
|
|
||||||
project = Project.first
|
|
||||||
|
|
||||||
throw(:validation_error, 'Ensure that at least one project exists.') unless project
|
|
||||||
|
|
||||||
project
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def push_events_data
|
def push_events_data
|
||||||
if project.empty_repo?
|
Gitlab::DataBuilder::Push.sample_data
|
||||||
throw(:validation_error, "Ensure project \"#{project.human_name}\" has commits.")
|
|
||||||
end
|
|
||||||
|
|
||||||
Gitlab::DataBuilder::Push.build_sample(project, current_user)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_push_events_data
|
def tag_push_events_data
|
||||||
if project.repository.tags.empty?
|
Gitlab::DataBuilder::Push.sample_data
|
||||||
throw(:validation_error, "Ensure project \"#{project.human_name}\" has tags.")
|
|
||||||
end
|
|
||||||
|
|
||||||
Gitlab::DataBuilder::Push.build_sample(project, current_user)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def repository_update_events_data
|
def repository_update_events_data
|
||||||
commit = project.commit
|
Gitlab::DataBuilder::Repository.sample_data
|
||||||
ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}#{project.default_branch}"
|
|
||||||
|
|
||||||
unless commit
|
|
||||||
throw(:validation_error, "Ensure project \"#{project.human_name}\" has commits.")
|
|
||||||
end
|
|
||||||
|
|
||||||
change = Gitlab::DataBuilder::Repository.single_change(
|
|
||||||
commit.parent_id || Gitlab::Git::BLANK_SHA,
|
|
||||||
commit.id,
|
|
||||||
ref
|
|
||||||
)
|
|
||||||
|
|
||||||
Gitlab::DataBuilder::Repository.update(project, current_user, [change], [ref])
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,35 @@ module Gitlab
|
||||||
module Push
|
module Push
|
||||||
extend self
|
extend self
|
||||||
|
|
||||||
|
SAMPLE_DATA =
|
||||||
|
{
|
||||||
|
object_kind: "push",
|
||||||
|
event_name: "push",
|
||||||
|
before: "95790bf891e76fee5e1747ab589903a6a1f80f22",
|
||||||
|
after: "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
ref: "refs/heads/master",
|
||||||
|
checkout_sha: "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
message: "Hello World",
|
||||||
|
user_id: 4,
|
||||||
|
user_name: "John Smith",
|
||||||
|
user_email: "john@example.com",
|
||||||
|
user_avatar: "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
|
||||||
|
project_id: 15,
|
||||||
|
commits: [
|
||||||
|
{
|
||||||
|
id: "c5feabde2d8cd023215af4d2ceeb7a64839fc428",
|
||||||
|
message: "Add simple search to projects in public area",
|
||||||
|
timestamp: "2013-05-13T18:18:08+00:00",
|
||||||
|
url: "https://test.example.com/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428",
|
||||||
|
author: {
|
||||||
|
name: "Test User",
|
||||||
|
email: "test@example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
total_commits_count: 1
|
||||||
|
}.freeze
|
||||||
|
|
||||||
# Produce a hash of post-receive data
|
# Produce a hash of post-receive data
|
||||||
#
|
#
|
||||||
# data = {
|
# data = {
|
||||||
|
@ -74,6 +103,10 @@ module Gitlab
|
||||||
build(project, user, commits.last&.id, commits.first&.id, ref, commits)
|
build(project, user, commits.last&.id, commits.first&.id, ref, commits)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sample_data
|
||||||
|
SAMPLE_DATA
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def checkout_sha(repository, newrev, ref)
|
def checkout_sha(repository, newrev, ref)
|
||||||
|
|
|
@ -3,6 +3,23 @@ module Gitlab
|
||||||
module Repository
|
module Repository
|
||||||
extend self
|
extend self
|
||||||
|
|
||||||
|
SAMPLE_DATA = {
|
||||||
|
event_name: 'repository_update',
|
||||||
|
user_id: 10,
|
||||||
|
user_name: 'john.doe',
|
||||||
|
user_email: 'test@example.com',
|
||||||
|
user_avatar: 'http://example.com/avatar/user.png',
|
||||||
|
project_id: 40,
|
||||||
|
changes: [
|
||||||
|
{
|
||||||
|
before: "8205ea8d81ce0c6b90fbe8280d118cc9fdad6130",
|
||||||
|
after: "4045ea7a3df38697b3730a20fb73c8bed8a3e69e",
|
||||||
|
ref: "refs/heads/master"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"refs": ["refs/heads/master"]
|
||||||
|
}.freeze
|
||||||
|
|
||||||
# Produce a hash of post-receive data
|
# Produce a hash of post-receive data
|
||||||
def update(project, user, changes, refs)
|
def update(project, user, changes, refs)
|
||||||
{
|
{
|
||||||
|
@ -30,6 +47,10 @@ module Gitlab
|
||||||
ref: ref
|
ref: ref
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sample_data
|
||||||
|
SAMPLE_DATA
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,6 @@ describe TestHooks::SystemService do
|
||||||
let(:project) { create(:project, :repository) }
|
let(:project) { create(:project, :repository) }
|
||||||
let(:hook) { create(:system_hook) }
|
let(:hook) { create(:system_hook) }
|
||||||
let(:service) { described_class.new(hook, current_user, trigger) }
|
let(:service) { described_class.new(hook, current_user, trigger) }
|
||||||
let(:sample_data) { { data: 'sample' }}
|
|
||||||
let(:success_result) { { status: :success, http_status: 200, message: 'ok' } }
|
let(:success_result) { { status: :success, http_status: 200, message: 'ok' } }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -26,18 +25,11 @@ describe TestHooks::SystemService do
|
||||||
context 'push_events' do
|
context 'push_events' do
|
||||||
let(:trigger) { 'push_events' }
|
let(:trigger) { 'push_events' }
|
||||||
|
|
||||||
it 'returns error message if not enough data' do
|
|
||||||
allow(project).to receive(:empty_repo?).and_return(true)
|
|
||||||
|
|
||||||
expect(hook).not_to receive(:execute)
|
|
||||||
expect(service.execute).to include({ status: :error, message: "Ensure project \"#{project.human_name}\" has commits." })
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'executes hook' do
|
it 'executes hook' do
|
||||||
allow(project).to receive(:empty_repo?).and_return(false)
|
allow(project).to receive(:empty_repo?).and_return(false)
|
||||||
allow(Gitlab::DataBuilder::Push).to receive(:build_sample).and_return(sample_data)
|
expect(Gitlab::DataBuilder::Push).to receive(:sample_data).and_call_original
|
||||||
|
|
||||||
expect(hook).to receive(:execute).with(sample_data, trigger).and_return(success_result)
|
expect(hook).to receive(:execute).with(Gitlab::DataBuilder::Push::SAMPLE_DATA, trigger).and_return(success_result)
|
||||||
expect(service.execute).to include(success_result)
|
expect(service.execute).to include(success_result)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -45,18 +37,11 @@ describe TestHooks::SystemService do
|
||||||
context 'tag_push_events' do
|
context 'tag_push_events' do
|
||||||
let(:trigger) { 'tag_push_events' }
|
let(:trigger) { 'tag_push_events' }
|
||||||
|
|
||||||
it 'returns error message if not enough data' do
|
|
||||||
allow(project.repository).to receive(:tags).and_return([])
|
|
||||||
|
|
||||||
expect(hook).not_to receive(:execute)
|
|
||||||
expect(service.execute).to include({ status: :error, message: "Ensure project \"#{project.human_name}\" has tags." })
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'executes hook' do
|
it 'executes hook' do
|
||||||
allow(project.repository).to receive(:tags).and_return(['tag'])
|
allow(project.repository).to receive(:tags).and_return(['tag'])
|
||||||
allow(Gitlab::DataBuilder::Push).to receive(:build_sample).and_return(sample_data)
|
expect(Gitlab::DataBuilder::Push).to receive(:sample_data).and_call_original
|
||||||
|
|
||||||
expect(hook).to receive(:execute).with(sample_data, trigger).and_return(success_result)
|
expect(hook).to receive(:execute).with(Gitlab::DataBuilder::Push::SAMPLE_DATA, trigger).and_return(success_result)
|
||||||
expect(service.execute).to include(success_result)
|
expect(service.execute).to include(success_result)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -64,17 +49,11 @@ describe TestHooks::SystemService do
|
||||||
context 'repository_update_events' do
|
context 'repository_update_events' do
|
||||||
let(:trigger) { 'repository_update_events' }
|
let(:trigger) { 'repository_update_events' }
|
||||||
|
|
||||||
it 'returns error message if not enough data' do
|
|
||||||
allow(project).to receive(:commit).and_return(nil)
|
|
||||||
expect(hook).not_to receive(:execute)
|
|
||||||
expect(service.execute).to include({ status: :error, message: "Ensure project \"#{project.human_name}\" has commits." })
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'executes hook' do
|
it 'executes hook' do
|
||||||
allow(project).to receive(:empty_repo?).and_return(false)
|
allow(project).to receive(:empty_repo?).and_return(false)
|
||||||
allow(Gitlab::DataBuilder::Repository).to receive(:update).and_return(sample_data)
|
expect(Gitlab::DataBuilder::Repository).to receive(:sample_data).and_call_original
|
||||||
|
|
||||||
expect(hook).to receive(:execute).with(sample_data, trigger).and_return(success_result)
|
expect(hook).to receive(:execute).with(Gitlab::DataBuilder::Repository::SAMPLE_DATA, trigger).and_return(success_result)
|
||||||
expect(service.execute).to include(success_result)
|
expect(service.execute).to include(success_result)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue