diff options
Diffstat (limited to 'spec/lib/gitlab/gitaly_client/commit_service_spec.rb')
-rw-r--r-- | spec/lib/gitlab/gitaly_client/commit_service_spec.rb | 113 |
1 files changed, 111 insertions, 2 deletions
diff --git a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb index 22c29403255..a0e2d43cf45 100644 --- a/spec/lib/gitlab/gitaly_client/commit_service_spec.rb +++ b/spec/lib/gitlab/gitaly_client/commit_service_spec.rb @@ -169,7 +169,11 @@ RSpec.describe Gitlab::GitalyClient::CommitService do end describe '#tree_entries' do + subject { client.tree_entries(repository, revision, path, recursive, pagination_params) } + let(:path) { '/' } + let(:recursive) { false } + let(:pagination_params) { nil } it 'sends a get_tree_entries message' do expect_any_instance_of(Gitaly::CommitService::Stub) @@ -177,7 +181,7 @@ RSpec.describe Gitlab::GitalyClient::CommitService do .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) .and_return([]) - client.tree_entries(repository, revision, path, false) + is_expected.to eq([[], nil]) end context 'with UTF-8 params strings' do @@ -190,7 +194,26 @@ RSpec.describe Gitlab::GitalyClient::CommitService do .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) .and_return([]) - client.tree_entries(repository, revision, path, false) + is_expected.to eq([[], nil]) + end + end + + context 'with pagination parameters' do + let(:pagination_params) { { limit: 3, page_token: nil } } + + it 'responds with a pagination cursor' do + pagination_cursor = Gitaly::PaginationCursor.new(next_cursor: 'aabbccdd') + response = Gitaly::GetTreeEntriesResponse.new( + entries: [], + pagination_cursor: pagination_cursor + ) + + expect_any_instance_of(Gitaly::CommitService::Stub) + .to receive(:get_tree_entries) + .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) + .and_return([response]) + + is_expected.to eq([[], pagination_cursor]) end end end @@ -320,6 +343,92 @@ RSpec.describe Gitlab::GitalyClient::CommitService do end end + describe '#list_new_commits' do + let(:revisions) { [revision] } + let(:gitaly_commits) { create_list(:gitaly_commit, 3) } + let(:commits) { gitaly_commits.map { |c| Gitlab::Git::Commit.new(repository, c) }} + + subject { client.list_new_commits(revisions, allow_quarantine: allow_quarantine) } + + shared_examples 'a #list_all_commits message' do + it 'sends a list_all_commits message' do + expected_repository = repository.gitaly_repository.dup + expected_repository.git_alternate_object_directories = Google::Protobuf::RepeatedField.new(:string) + + expect_next_instance_of(Gitaly::CommitService::Stub) do |service| + expect(service).to receive(:list_all_commits) + .with(gitaly_request_with_params(repository: expected_repository), kind_of(Hash)) + .and_return([Gitaly::ListAllCommitsResponse.new(commits: gitaly_commits)]) + end + + expect(subject).to eq(commits) + end + end + + shared_examples 'a #list_commits message' do + it 'sends a list_commits message' do + expect_next_instance_of(Gitaly::CommitService::Stub) do |service| + expect(service).to receive(:list_commits) + .with(gitaly_request_with_params(revisions: revisions + %w[--not --all]), kind_of(Hash)) + .and_return([Gitaly::ListCommitsResponse.new(commits: gitaly_commits)]) + end + + expect(subject).to eq(commits) + end + end + + before do + ::Gitlab::GitalyClient.clear_stubs! + + allow(Gitlab::Git::HookEnv) + .to receive(:all) + .with(repository.gl_repository) + .and_return(git_env) + end + + context 'with hook environment' do + let(:git_env) do + { + 'GIT_OBJECT_DIRECTORY_RELATIVE' => '.git/objects', + 'GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE' => ['/dir/one', '/dir/two'] + } + end + + context 'with allowed quarantine' do + let(:allow_quarantine) { true } + + it_behaves_like 'a #list_all_commits message' + end + + context 'with disallowed quarantine' do + let(:allow_quarantine) { false } + + it_behaves_like 'a #list_commits message' + end + end + + context 'without hook environment' do + let(:git_env) do + { + 'GIT_OBJECT_DIRECTORY_RELATIVE' => '', + 'GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE' => [] + } + end + + context 'with allowed quarantine' do + let(:allow_quarantine) { true } + + it_behaves_like 'a #list_commits message' + end + + context 'with disallowed quarantine' do + let(:allow_quarantine) { false } + + it_behaves_like 'a #list_commits message' + end + end + end + describe '#commit_stats' do let(:request) do Gitaly::CommitStatsRequest.new( |