summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/gitaly_client/blob_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/gitaly_client/blob_service_spec.rb')
-rw-r--r--spec/lib/gitlab/gitaly_client/blob_service_spec.rb100
1 files changed, 100 insertions, 0 deletions
diff --git a/spec/lib/gitlab/gitaly_client/blob_service_spec.rb b/spec/lib/gitlab/gitaly_client/blob_service_spec.rb
index f0ec58f3c2d..50078d8c127 100644
--- a/spec/lib/gitlab/gitaly_client/blob_service_spec.rb
+++ b/spec/lib/gitlab/gitaly_client/blob_service_spec.rb
@@ -88,4 +88,104 @@ RSpec.describe Gitlab::GitalyClient::BlobService do
subject
end
end
+
+ describe '#list_blobs' do
+ let(:limit) { 0 }
+ let(:bytes_limit) { 0 }
+ let(:expected_params) { { revisions: revisions, limit: limit, bytes_limit: bytes_limit } }
+
+ before do
+ ::Gitlab::GitalyClient.clear_stubs!
+ end
+
+ subject { client.list_blobs(revisions, limit: limit, bytes_limit: bytes_limit) }
+
+ context 'with a single revision' do
+ let(:revisions) { ['master'] }
+
+ it 'sends a list_blobs message' do
+ expect_next_instance_of(Gitaly::BlobService::Stub) do |service|
+ expect(service)
+ .to receive(:list_blobs)
+ .with(gitaly_request_with_params(expected_params), kind_of(Hash))
+ .and_return([])
+ end
+
+ subject
+ end
+ end
+
+ context 'with multiple revisions' do
+ let(:revisions) { ['master', '--not', '--all'] }
+
+ it 'sends a list_blobs message' do
+ expect_next_instance_of(Gitaly::BlobService::Stub) do |service|
+ expect(service)
+ .to receive(:list_blobs)
+ .with(gitaly_request_with_params(expected_params), kind_of(Hash))
+ .and_return([])
+ end
+
+ subject
+ end
+ end
+
+ context 'with multiple revisions and limits' do
+ let(:revisions) { ['master', '--not', '--all'] }
+ let(:limit) { 10 }
+ let(:bytes_lmit) { 1024 }
+
+ it 'sends a list_blobs message' do
+ expect_next_instance_of(Gitaly::BlobService::Stub) do |service|
+ expect(service)
+ .to receive(:list_blobs)
+ .with(gitaly_request_with_params(expected_params), kind_of(Hash))
+ .and_return([])
+ end
+
+ subject
+ end
+ end
+
+ context 'with split contents' do
+ let(:revisions) { ['master'] }
+
+ it 'sends a list_blobs message', :aggregate_failures do
+ expect_next_instance_of(Gitaly::BlobService::Stub) do |service|
+ expect(service)
+ .to receive(:list_blobs)
+ .with(gitaly_request_with_params(expected_params), kind_of(Hash))
+ .and_return([
+ Gitaly::ListBlobsResponse.new(blobs: [
+ Gitaly::ListBlobsResponse::Blob.new(oid: "012345", size: 8, data: "0x01"),
+ Gitaly::ListBlobsResponse::Blob.new(data: "23")
+ ]),
+ Gitaly::ListBlobsResponse.new(blobs: [
+ Gitaly::ListBlobsResponse::Blob.new(data: "45"),
+ Gitaly::ListBlobsResponse::Blob.new(oid: "56", size: 4, data: "0x5"),
+ Gitaly::ListBlobsResponse::Blob.new(data: "6")
+ ]),
+ Gitaly::ListBlobsResponse.new(blobs: [
+ Gitaly::ListBlobsResponse::Blob.new(oid: "78", size: 4, data: "0x78")
+ ])
+ ])
+ end
+
+ blobs = subject.to_a
+ expect(blobs.size).to be(3)
+
+ expect(blobs[0].id).to eq('012345')
+ expect(blobs[0].size).to eq(8)
+ expect(blobs[0].data).to eq('0x012345')
+
+ expect(blobs[1].id).to eq('56')
+ expect(blobs[1].size).to eq(4)
+ expect(blobs[1].data).to eq('0x56')
+
+ expect(blobs[2].id).to eq('78')
+ expect(blobs[2].size).to eq(4)
+ expect(blobs[2].data).to eq('0x78')
+ end
+ end
+ end
end