Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/gitaly_client/operation_service_spec.rb')
-rw-r--r--spec/lib/gitlab/gitaly_client/operation_service_spec.rb163
1 files changed, 141 insertions, 22 deletions
diff --git a/spec/lib/gitlab/gitaly_client/operation_service_spec.rb b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
index f0115aa6b2b..0c04863f466 100644
--- a/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
@@ -386,6 +386,73 @@ RSpec.describe Gitlab::GitalyClient::OperationService do
it_behaves_like 'cherry pick and revert errors'
end
+ describe '#rebase' do
+ let(:response) { Gitaly::UserRebaseConfirmableResponse.new }
+
+ subject do
+ client.rebase(
+ user,
+ '',
+ branch: 'master',
+ branch_sha: 'b83d6e391c22777fca1ed3012fce84f633d7fed0',
+ remote_repository: repository,
+ remote_branch: 'master'
+ )
+ end
+
+ shared_examples '#rebase with an error' do
+ it 'raises a GitError exception' do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_rebase_confirmable)
+ .and_raise(raised_error)
+
+ expect { subject }.to raise_error(expected_error)
+ end
+ end
+
+ context 'when AccessError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserRebaseConfirmableError.new(
+ access_check: Gitaly::AccessCheckError.new(
+ error_message: 'something went wrong'
+ )))
+ end
+
+ let(:expected_error) { Gitlab::Git::PreReceiveError }
+
+ it_behaves_like '#rebase with an error'
+ end
+
+ context 'when RebaseConflictError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserSquashError.new(
+ rebase_conflict: Gitaly::MergeConflictError.new(
+ conflicting_files: ['conflicting-file']
+ )))
+ end
+
+ let(:expected_error) { Gitlab::Git::Repository::GitError }
+
+ it_behaves_like '#rebase with an error'
+ end
+
+ context 'when non-detailed gRPC error is raised' do
+ let(:raised_error) do
+ GRPC::Internal.new('non-detailed error')
+ end
+
+ let(:expected_error) { GRPC::Internal }
+
+ it_behaves_like '#rebase with an error'
+ end
+ end
+
describe '#user_squash' do
let(:start_sha) { 'b83d6e391c22777fca1ed3012fce84f633d7fed0' }
let(:end_sha) { '54cec5282aa9f21856362fe321c800c236a61615' }
@@ -437,41 +504,93 @@ RSpec.describe Gitlab::GitalyClient::OperationService do
end
end
- describe '#user_commit_files' do
- subject do
- client.user_commit_files(
- gitaly_user, 'my-branch', 'Commit files message', [], 'janedoe@example.com', 'Jane Doe',
- 'master', repository)
+ shared_examples '#user_squash with an error' do
+ it 'raises a GitError exception' do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_squash).with(request, kind_of(Hash))
+ .and_raise(raised_error)
+
+ expect { subject }.to raise_error(expected_error)
end
+ end
- before do
- expect_any_instance_of(Gitaly::OperationService::Stub)
- .to receive(:user_commit_files).with(kind_of(Enumerator), kind_of(Hash))
- .and_return(response)
+ context 'when ResolveRevisionError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INVALID_ARGUMENT,
+ 'something failed',
+ Gitaly::UserSquashError.new(
+ resolve_revision: Gitaly::ResolveRevisionError.new(
+ revision: start_sha
+ )))
end
- context 'when a pre_receive_error is present' do
- let(:response) { Gitaly::UserCommitFilesResponse.new(pre_receive_error: "GitLab: something failed") }
+ let(:expected_error) { Gitlab::Git::Repository::GitError }
- it 'raises a PreReceiveError' do
- expect { subject }.to raise_error(Gitlab::Git::PreReceiveError, "something failed")
- end
+ it_behaves_like '#user_squash with an error'
+ end
+
+ context 'when RebaseConflictError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserSquashError.new(
+ rebase_conflict: Gitaly::MergeConflictError.new(
+ conflicting_files: ['conflicting-file']
+ )))
end
- context 'when an index_error is present' do
- let(:response) { Gitaly::UserCommitFilesResponse.new(index_error: "something failed") }
+ let(:expected_error) { Gitlab::Git::Repository::GitError }
- it 'raises a PreReceiveError' do
- expect { subject }.to raise_error(Gitlab::Git::Index::IndexError, "something failed")
- end
+ it_behaves_like '#user_squash with an error'
+ end
+
+ context 'when non-detailed gRPC error is raised' do
+ let(:raised_error) do
+ GRPC::Internal.new('non-detailed error')
+ end
+
+ let(:expected_error) { GRPC::Internal }
+
+ it_behaves_like '#user_squash with an error'
+ end
+ end
+
+ describe '#user_commit_files' do
+ subject do
+ client.user_commit_files(
+ gitaly_user, 'my-branch', 'Commit files message', [], 'janedoe@example.com', 'Jane Doe',
+ 'master', repository)
+ end
+
+ before do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_commit_files).with(kind_of(Enumerator), kind_of(Hash))
+ .and_return(response)
+ end
+
+ context 'when a pre_receive_error is present' do
+ let(:response) { Gitaly::UserCommitFilesResponse.new(pre_receive_error: "GitLab: something failed") }
+
+ it 'raises a PreReceiveError' do
+ expect { subject }.to raise_error(Gitlab::Git::PreReceiveError, "something failed")
end
+ end
- context 'when branch_update is nil' do
- let(:response) { Gitaly::UserCommitFilesResponse.new }
+ context 'when an index_error is present' do
+ let(:response) { Gitaly::UserCommitFilesResponse.new(index_error: "something failed") }
- it { expect(subject).to be_nil }
+ it 'raises a PreReceiveError' do
+ expect { subject }.to raise_error(Gitlab::Git::Index::IndexError, "something failed")
end
end
+
+ context 'when branch_update is nil' do
+ let(:response) { Gitaly::UserCommitFilesResponse.new }
+
+ it { expect(subject).to be_nil }
+ end
end
describe '#user_commit_patches' do