diff options
author | Stan Hu <stanhu@gmail.com> | 2018-11-05 15:37:21 -0800 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-11-07 11:37:46 -0800 |
commit | 5b6d5301d9589b694fea0820a2b6cf165642669b (patch) | |
tree | 50a3cfa2afc1b9fb6783cb15d9582d3a429480b0 /spec/lib/bitbucket_server | |
parent | 4068d46078faaa97acbfbe33cc7663db6d1c831a (diff) | |
download | gitlab-ce-5b6d5301d9589b694fea0820a2b6cf165642669b.tar.gz |
Paginate Bitbucket Server importer projects
To prevent delays in loading the page and reduce memory usage, limit the
number of projects shown at 25 per page.
Part of https://gitlab.com/gitlab-org/gitlab-ce/issues/50021
Diffstat (limited to 'spec/lib/bitbucket_server')
-rw-r--r-- | spec/lib/bitbucket_server/client_spec.rb | 12 | ||||
-rw-r--r-- | spec/lib/bitbucket_server/collection_spec.rb | 29 | ||||
-rw-r--r-- | spec/lib/bitbucket_server/paginator_spec.rb | 10 |
3 files changed, 48 insertions, 3 deletions
diff --git a/spec/lib/bitbucket_server/client_spec.rb b/spec/lib/bitbucket_server/client_spec.rb index f926ae963a4..5de0a9a65b5 100644 --- a/spec/lib/bitbucket_server/client_spec.rb +++ b/spec/lib/bitbucket_server/client_spec.rb @@ -13,7 +13,7 @@ describe BitbucketServer::Client do let(:path) { "/projects/#{project}/repos/#{repo_slug}/pull-requests?state=ALL" } it 'requests a collection' do - expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :pull_request) + expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :pull_request, page_offset: 0, limit: nil) subject.pull_requests(project, repo_slug) end @@ -29,7 +29,7 @@ describe BitbucketServer::Client do let(:path) { "/projects/#{project}/repos/#{repo_slug}/pull-requests/1/activities" } it 'requests a collection' do - expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :activity) + expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :activity, page_offset: 0, limit: nil) subject.activities(project, repo_slug, 1) end @@ -52,10 +52,16 @@ describe BitbucketServer::Client do let(:path) { "/repos" } it 'requests a collection' do - expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :repo) + expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :repo, page_offset: 0, limit: nil) subject.repos end + + it 'requests a collection with an offset and limit' do + expect(BitbucketServer::Paginator).to receive(:new).with(anything, path, :repo, page_offset: 10, limit: 25) + + subject.repos(page_offset: 10, limit: 25) + end end describe '#create_branch' do diff --git a/spec/lib/bitbucket_server/collection_spec.rb b/spec/lib/bitbucket_server/collection_spec.rb new file mode 100644 index 00000000000..ddd02bac88a --- /dev/null +++ b/spec/lib/bitbucket_server/collection_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe BitbucketServer::Collection do + let(:connection) { instance_double(BitbucketServer::Connection) } + let(:page) { 1 } + let(:paginator) { BitbucketServer::Paginator.new(connection, 'http://more-data', :pull_request, page_offset: page) } + + subject { described_class.new(paginator) } + + describe '#current_page' do + it 'returns 1' do + expect(subject.current_page).to eq(1) + end + end + + describe '#prev_page' do + it 'returns nil' do + expect(subject.prev_page).to be_nil + end + end + + describe '#next_page' do + it 'returns 2' do + expect(subject.next_page).to eq(2) + end + end +end diff --git a/spec/lib/bitbucket_server/paginator_spec.rb b/spec/lib/bitbucket_server/paginator_spec.rb index 2de50eba3c4..d268d4f23cf 100644 --- a/spec/lib/bitbucket_server/paginator_spec.rb +++ b/spec/lib/bitbucket_server/paginator_spec.rb @@ -20,6 +20,16 @@ describe BitbucketServer::Paginator do expect { paginator.items }.to raise_error(StopIteration) end + it 'obeys limits' do + limited = described_class.new(connection, 'http://more-data', :pull_request, page_offset: 0, limit: 1) + allow(limited).to receive(:fetch_next_page).and_return(first_page) + + expect(limited.has_next_page?).to be_truthy + expect(limited.items).to match(['item_1']) + expect(limited.has_next_page?).to be_truthy + expect { limited.items }.to raise_error(StopIteration) + end + it 'calls the connection with different offsets' do expect(connection).to receive(:get).with('http://more-data', start: 0, limit: BitbucketServer::Paginator::PAGE_LENGTH).and_return(page_attrs) |