2017-09-20 18:34:30 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Gitlab::GitalyClient::OperationService do
|
|
|
|
let(:project) { create(:project) }
|
|
|
|
let(:repository) { project.repository.raw }
|
|
|
|
let(:client) { described_class.new(repository) }
|
2017-09-30 14:09:36 -04:00
|
|
|
let(:user) { create(:user) }
|
2017-10-23 16:31:05 -04:00
|
|
|
let(:gitaly_user) { Gitlab::Git::User.from_gitlab(user).to_gitaly }
|
2017-09-20 18:34:30 -04:00
|
|
|
|
|
|
|
describe '#user_create_branch' do
|
|
|
|
let(:branch_name) { 'new' }
|
|
|
|
let(:start_point) { 'master' }
|
|
|
|
let(:request) do
|
|
|
|
Gitaly::UserCreateBranchRequest.new(
|
|
|
|
repository: repository.gitaly_repository,
|
|
|
|
branch_name: branch_name,
|
|
|
|
start_point: start_point,
|
|
|
|
user: gitaly_user
|
|
|
|
)
|
|
|
|
end
|
|
|
|
let(:gitaly_commit) { build(:gitaly_commit) }
|
|
|
|
let(:commit_id) { gitaly_commit.id }
|
|
|
|
let(:gitaly_branch) do
|
|
|
|
Gitaly::Branch.new(name: branch_name, target_commit: gitaly_commit)
|
|
|
|
end
|
|
|
|
let(:response) { Gitaly::UserCreateBranchResponse.new(branch: gitaly_branch) }
|
|
|
|
let(:commit) { Gitlab::Git::Commit.new(repository, gitaly_commit) }
|
|
|
|
|
|
|
|
subject { client.user_create_branch(branch_name, user, start_point) }
|
|
|
|
|
|
|
|
it 'sends a user_create_branch message and returns a Gitlab::git::Branch' do
|
|
|
|
expect_any_instance_of(Gitaly::OperationService::Stub)
|
|
|
|
.to receive(:user_create_branch).with(request, kind_of(Hash))
|
|
|
|
.and_return(response)
|
|
|
|
|
|
|
|
expect(subject.name).to eq(branch_name)
|
|
|
|
expect(subject.dereferenced_target).to eq(commit)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when pre_receive_error is present" do
|
|
|
|
let(:response) do
|
|
|
|
Gitaly::UserCreateBranchResponse.new(pre_receive_error: "something failed")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "throws a PreReceive exception" do
|
|
|
|
expect_any_instance_of(Gitaly::OperationService::Stub)
|
|
|
|
.to receive(:user_create_branch).with(request, kind_of(Hash))
|
|
|
|
.and_return(response)
|
|
|
|
|
|
|
|
expect { subject }.to raise_error(
|
|
|
|
Gitlab::Git::HooksService::PreReceiveError, "something failed")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-09-30 14:09:36 -04:00
|
|
|
|
|
|
|
describe '#user_delete_branch' do
|
|
|
|
let(:branch_name) { 'my-branch' }
|
|
|
|
let(:request) do
|
|
|
|
Gitaly::UserDeleteBranchRequest.new(
|
|
|
|
repository: repository.gitaly_repository,
|
|
|
|
branch_name: branch_name,
|
|
|
|
user: gitaly_user
|
|
|
|
)
|
|
|
|
end
|
|
|
|
let(:response) { Gitaly::UserDeleteBranchResponse.new }
|
|
|
|
|
|
|
|
subject { client.user_delete_branch(branch_name, user) }
|
|
|
|
|
|
|
|
it 'sends a user_delete_branch message' do
|
|
|
|
expect_any_instance_of(Gitaly::OperationService::Stub)
|
|
|
|
.to receive(:user_delete_branch).with(request, kind_of(Hash))
|
|
|
|
.and_return(response)
|
|
|
|
|
|
|
|
subject
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when pre_receive_error is present" do
|
|
|
|
let(:response) do
|
|
|
|
Gitaly::UserDeleteBranchResponse.new(pre_receive_error: "something failed")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "throws a PreReceive exception" do
|
|
|
|
expect_any_instance_of(Gitaly::OperationService::Stub)
|
|
|
|
.to receive(:user_delete_branch).with(request, kind_of(Hash))
|
|
|
|
.and_return(response)
|
|
|
|
|
|
|
|
expect { subject }.to raise_error(
|
|
|
|
Gitlab::Git::HooksService::PreReceiveError, "something failed")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-10-25 18:00:19 -04:00
|
|
|
|
|
|
|
describe '#user_ff_branch' do
|
|
|
|
let(:target_branch) { 'my-branch' }
|
|
|
|
let(:source_sha) { 'cfe32cf61b73a0d5e9f13e774abde7ff789b1660' }
|
|
|
|
let(:request) do
|
|
|
|
Gitaly::UserFFBranchRequest.new(
|
|
|
|
repository: repository.gitaly_repository,
|
|
|
|
branch: target_branch,
|
|
|
|
commit_id: source_sha,
|
|
|
|
user: gitaly_user
|
|
|
|
)
|
|
|
|
end
|
|
|
|
let(:branch_update) do
|
|
|
|
Gitaly::OperationBranchUpdate.new(
|
|
|
|
commit_id: source_sha,
|
|
|
|
repo_created: false,
|
|
|
|
branch_created: false
|
|
|
|
)
|
|
|
|
end
|
|
|
|
let(:response) { Gitaly::UserFFBranchResponse.new(branch_update: branch_update) }
|
|
|
|
|
|
|
|
subject { client.user_ff_branch(user, source_sha, target_branch) }
|
|
|
|
|
|
|
|
it 'sends a user_ff_branch message and returns a BranchUpdate object' do
|
|
|
|
expect_any_instance_of(Gitaly::OperationService::Stub)
|
|
|
|
.to receive(:user_ff_branch).with(request, kind_of(Hash))
|
|
|
|
.and_return(response)
|
|
|
|
|
|
|
|
expect(subject).to be_a(Gitlab::Git::OperationService::BranchUpdate)
|
|
|
|
expect(subject.newrev).to eq(source_sha)
|
|
|
|
expect(subject.repo_created).to be(false)
|
|
|
|
expect(subject.branch_created).to be(false)
|
|
|
|
end
|
|
|
|
end
|
2017-09-20 18:34:30 -04:00
|
|
|
end
|