69 lines
2.4 KiB
Ruby
69 lines
2.4 KiB
Ruby
require 'spec_helper'
|
|
require 'fileutils'
|
|
|
|
describe Gitlab::Git::Hook, lib: true do
|
|
describe "#trigger" do
|
|
let(:project) { create(:project, :repository) }
|
|
let(:user) { create(:user) }
|
|
|
|
def create_hook(name)
|
|
FileUtils.mkdir_p(File.join(project.repository.path, 'hooks'))
|
|
File.open(File.join(project.repository.path, 'hooks', name), 'w', 0755) do |f|
|
|
f.write('exit 0')
|
|
end
|
|
end
|
|
|
|
def create_failing_hook(name)
|
|
FileUtils.mkdir_p(File.join(project.repository.path, 'hooks'))
|
|
File.open(File.join(project.repository.path, 'hooks', name), 'w', 0755) do |f|
|
|
f.write(<<-HOOK)
|
|
echo 'regular message from the hook'
|
|
echo 'error message from the hook' 1>&2
|
|
exit 1
|
|
HOOK
|
|
end
|
|
end
|
|
|
|
['pre-receive', 'post-receive', 'update'].each do |hook_name|
|
|
context "when triggering a #{hook_name} hook" do
|
|
context "when the hook is successful" do
|
|
it "returns success with no errors" do
|
|
create_hook(hook_name)
|
|
hook = Gitlab::Git::Hook.new(hook_name, project.repository.path)
|
|
blank = Gitlab::Git::BLANK_SHA
|
|
ref = Gitlab::Git::BRANCH_REF_PREFIX + 'new_branch'
|
|
|
|
status, errors = hook.trigger(Gitlab::GlId.gl_id(user), blank, blank, ref)
|
|
expect(status).to be true
|
|
expect(errors).to be_blank
|
|
end
|
|
end
|
|
|
|
context "when the hook is unsuccessful" do
|
|
it "returns failure with errors" do
|
|
create_failing_hook(hook_name)
|
|
hook = Gitlab::Git::Hook.new(hook_name, project.repository.path)
|
|
blank = Gitlab::Git::BLANK_SHA
|
|
ref = Gitlab::Git::BRANCH_REF_PREFIX + 'new_branch'
|
|
|
|
status, errors = hook.trigger(Gitlab::GlId.gl_id(user), blank, blank, ref)
|
|
expect(status).to be false
|
|
expect(errors).to eq("error message from the hook\n")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when the hook doesn't exist" do
|
|
it "returns success with no errors" do
|
|
hook = Gitlab::Git::Hook.new('unknown_hook', project.repository.path)
|
|
blank = Gitlab::Git::BLANK_SHA
|
|
ref = Gitlab::Git::BRANCH_REF_PREFIX + 'new_branch'
|
|
|
|
status, errors = hook.trigger(Gitlab::GlId.gl_id(user), blank, blank, ref)
|
|
expect(status).to be true
|
|
expect(errors).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|