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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 18:07:47 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 18:07:47 +0300
commit8b1228b0d409d7751f01d9fb72ebfbbf62399486 (patch)
tree1b4126fe48d7666a90c0d7ee26230cf8379b6410 /spec/lib/api
parent96b0c1245c93585a8b0fe23e22306d32ff4e4905 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/api')
-rw-r--r--spec/lib/api/helpers/pagination_spec.rb70
-rw-r--r--spec/lib/api/helpers/pagination_strategies_spec.rb97
2 files changed, 104 insertions, 63 deletions
diff --git a/spec/lib/api/helpers/pagination_spec.rb b/spec/lib/api/helpers/pagination_spec.rb
index 2d5bec2e752..796c753d6c4 100644
--- a/spec/lib/api/helpers/pagination_spec.rb
+++ b/spec/lib/api/helpers/pagination_spec.rb
@@ -5,70 +5,14 @@ require 'spec_helper'
describe API::Helpers::Pagination do
subject { Class.new.include(described_class).new }
- let(:expected_result) { double("result", to_a: double) }
- let(:relation) { double("relation") }
- let(:params) { {} }
+ let(:paginator) { double('paginator') }
+ let(:relation) { double('relation') }
+ let(:expected_result) { double('expected result') }
- before do
- allow(subject).to receive(:params).and_return(params)
- end
-
- describe '#paginate' do
- let(:offset_pagination) { double("offset pagination") }
-
- it 'delegates to OffsetPagination' do
- expect(::Gitlab::Pagination::OffsetPagination).to receive(:new).with(subject).and_return(offset_pagination)
- expect(offset_pagination).to receive(:paginate).with(relation).and_return(expected_result)
-
- result = subject.paginate(relation)
-
- expect(result).to eq(expected_result)
- end
- end
-
- describe '#paginate_and_retrieve!' do
- context 'for offset pagination' do
- before do
- allow(Gitlab::Pagination::Keyset).to receive(:available?).and_return(false)
- end
-
- it 'delegates to paginate' do
- expect(subject).to receive(:paginate).with(relation).and_return(expected_result)
-
- result = subject.paginate_and_retrieve!(relation)
-
- expect(result).to eq(expected_result.to_a)
- end
- end
-
- context 'for keyset pagination' do
- let(:params) { { pagination: 'keyset' } }
- let(:request_context) { double('request context') }
-
- before do
- allow(Gitlab::Pagination::Keyset::RequestContext).to receive(:new).with(subject).and_return(request_context)
- end
-
- context 'when keyset pagination is available' do
- it 'delegates to KeysetPagination' do
- expect(Gitlab::Pagination::Keyset).to receive(:available?).and_return(true)
- expect(Gitlab::Pagination::Keyset).to receive(:paginate).with(request_context, relation).and_return(expected_result)
-
- result = subject.paginate_and_retrieve!(relation)
-
- expect(result).to eq(expected_result.to_a)
- end
- end
-
- context 'when keyset pagination is not available' do
- it 'renders a 501 error if keyset pagination isnt available yet' do
- expect(Gitlab::Pagination::Keyset).to receive(:available?).with(request_context, relation).and_return(false)
- expect(Gitlab::Pagination::Keyset).not_to receive(:paginate)
- expect(subject).to receive(:error!).with(/not yet available/, 405)
+ it 'delegates to OffsetPagination' do
+ expect(Gitlab::Pagination::OffsetPagination).to receive(:new).with(subject).and_return(paginator)
+ expect(paginator).to receive(:paginate).with(relation).and_return(expected_result)
- subject.paginate_and_retrieve!(relation)
- end
- end
- end
+ expect(subject.paginate(relation)).to eq(expected_result)
end
end
diff --git a/spec/lib/api/helpers/pagination_strategies_spec.rb b/spec/lib/api/helpers/pagination_strategies_spec.rb
new file mode 100644
index 00000000000..a418c09a824
--- /dev/null
+++ b/spec/lib/api/helpers/pagination_strategies_spec.rb
@@ -0,0 +1,97 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe API::Helpers::PaginationStrategies do
+ subject { Class.new.include(described_class).new }
+
+ let(:expected_result) { double("result") }
+ let(:relation) { double("relation") }
+ let(:params) { {} }
+
+ before do
+ allow(subject).to receive(:params).and_return(params)
+ end
+
+ describe '#paginate_with_strategies' do
+ let(:paginator) { double("paginator", paginate: expected_result, finalize: nil) }
+
+ before do
+ allow(subject).to receive(:paginator).with(relation).and_return(paginator)
+ end
+
+ it 'yields paginated relation' do
+ expect { |b| subject.paginate_with_strategies(relation, &b) }.to yield_with_args(expected_result)
+ end
+
+ it 'calls #finalize with first value returned from block' do
+ return_value = double
+ expect(paginator).to receive(:finalize).with(return_value)
+
+ subject.paginate_with_strategies(relation) do |records|
+ some_options = {}
+ [return_value, some_options]
+ end
+ end
+
+ it 'returns whatever the block returns' do
+ return_value = [double, double]
+
+ result = subject.paginate_with_strategies(relation) do |records|
+ return_value
+ end
+
+ expect(result).to eq(return_value)
+ end
+ end
+
+ describe '#paginator' do
+ context 'offset pagination' do
+ let(:paginator) { double("paginator") }
+
+ before do
+ allow(subject).to receive(:keyset_pagination_enabled?).and_return(false)
+ end
+
+ it 'delegates to OffsetPagination' do
+ expect(Gitlab::Pagination::OffsetPagination).to receive(:new).with(subject).and_return(paginator)
+
+ expect(subject.paginator(relation)).to eq(paginator)
+ end
+ end
+
+ context 'for keyset pagination' do
+ let(:params) { { pagination: 'keyset' } }
+ let(:request_context) { double('request context') }
+ let(:pager) { double('pager') }
+
+ before do
+ allow(subject).to receive(:keyset_pagination_enabled?).and_return(true)
+ allow(Gitlab::Pagination::Keyset::RequestContext).to receive(:new).with(subject).and_return(request_context)
+ end
+
+ context 'when keyset pagination is available' do
+ before do
+ allow(Gitlab::Pagination::Keyset).to receive(:available?).and_return(true)
+ allow(Gitlab::Pagination::Keyset::Pager).to receive(:new).with(request_context).and_return(pager)
+ end
+
+ it 'delegates to Pager' do
+ expect(subject.paginator(relation)).to eq(pager)
+ end
+ end
+
+ context 'when keyset pagination is not available' do
+ before do
+ allow(Gitlab::Pagination::Keyset).to receive(:available?).with(request_context, relation).and_return(false)
+ end
+
+ it 'renders a 501 error' do
+ expect(subject).to receive(:error!).with(/not yet available/, 405)
+
+ subject.paginator(relation)
+ end
+ end
+ end
+ end
+end