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
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 06:08:48 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 06:08:48 +0300
commita67ba1bbfa161ff6e72f4d79ef5c61c7df7df947 (patch)
tree5e7540175af4325c33321cdc9b9c4331a7aa8582 /spec
parent190709c7972f951f53b9fb2b217bd3249a538512 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/lib/gitlab/gitaly_client/operation_service_spec.rb80
1 files changed, 75 insertions, 5 deletions
diff --git a/spec/lib/gitlab/gitaly_client/operation_service_spec.rb b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
index a34b554f35d..9b6efa30ff7 100644
--- a/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/operation_service_spec.rb
@@ -416,6 +416,15 @@ RSpec.describe Gitlab::GitalyClient::OperationService do
end
end
+ shared_examples '#user_cherry_pick with a gRPC error' do
+ it 'raises an exception' do
+ expect_any_instance_of(Gitaly::OperationService::Stub).to receive(:user_cherry_pick)
+ .and_raise(raised_error)
+
+ expect { subject }.to raise_error(expected_error, expected_error_message)
+ end
+ end
+
describe '#user_cherry_pick' do
let(:response_class) { Gitaly::UserCherryPickResponse }
@@ -430,13 +439,74 @@ RSpec.describe Gitlab::GitalyClient::OperationService do
)
end
- before do
- expect_any_instance_of(Gitaly::OperationService::Stub)
- .to receive(:user_cherry_pick).with(kind_of(Gitaly::UserCherryPickRequest), kind_of(Hash))
- .and_return(response)
+ context 'when errors are not raised but returned in the response' do
+ before do
+ expect_any_instance_of(Gitaly::OperationService::Stub)
+ .to receive(:user_cherry_pick).with(kind_of(Gitaly::UserCherryPickRequest), kind_of(Hash))
+ .and_return(response)
+ end
+
+ it_behaves_like 'cherry pick and revert errors'
end
- it_behaves_like 'cherry pick and revert errors'
+ context 'when AccessCheckError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserCherryPickError.new(
+ access_check: Gitaly::AccessCheckError.new(
+ error_message: 'something went wrong'
+ )))
+ end
+
+ let(:expected_error) { Gitlab::Git::PreReceiveError }
+ let(:expected_error_message) { "something went wrong" }
+
+ it_behaves_like '#user_cherry_pick with a gRPC error'
+ end
+
+ context 'when NotAncestorError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::FAILED_PRECONDITION,
+ 'Branch diverged',
+ Gitaly::UserCherryPickError.new(
+ target_branch_diverged: Gitaly::NotAncestorError.new
+ )
+ )
+ end
+
+ let(:expected_error) { Gitlab::Git::CommitError }
+ let(:expected_error_message) { 'branch diverged' }
+
+ it_behaves_like '#user_cherry_pick with a gRPC error'
+ end
+
+ context 'when MergeConflictError is raised' do
+ let(:raised_error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::FAILED_PRECONDITION,
+ 'Conflict',
+ Gitaly::UserCherryPickError.new(
+ cherry_pick_conflict: Gitaly::MergeConflictError.new
+ )
+ )
+ end
+
+ let(:expected_error) { Gitlab::Git::Repository::CreateTreeError }
+ let(:expected_error_message) { }
+
+ it_behaves_like '#user_cherry_pick with a gRPC error'
+ end
+
+ context 'when a non-detailed gRPC error is raised' do
+ let(:raised_error) { GRPC::Internal.new('non-detailed error') }
+ let(:expected_error) { GRPC::Internal }
+ let(:expected_error_message) { }
+
+ it_behaves_like '#user_cherry_pick with a gRPC error'
+ end
end
describe '#user_revert' do