1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe Gitlab::Pagination::Keyset::Page do 6 describe '#per_page' do 7 it 'limits to a maximum of 100 records per page' do 8 per_page = described_class.new(per_page: 101).per_page 9 10 expect(per_page).to eq(described_class::MAXIMUM_PAGE_SIZE) 11 end 12 13 it 'uses default value when given 0' do 14 per_page = described_class.new(per_page: 0).per_page 15 16 expect(per_page).to eq(described_class::DEFAULT_PAGE_SIZE) 17 end 18 19 it 'uses default value when given negative values' do 20 per_page = described_class.new(per_page: -1).per_page 21 22 expect(per_page).to eq(described_class::DEFAULT_PAGE_SIZE) 23 end 24 25 it 'uses the given value if it is within range' do 26 per_page = described_class.new(per_page: 10).per_page 27 28 expect(per_page).to eq(10) 29 end 30 end 31 32 describe '#next' do 33 let(:page) { described_class.new(order_by: order_by, lower_bounds: lower_bounds, per_page: per_page) } 34 subject { page.next(new_lower_bounds) } 35 36 let(:order_by) { { id: :desc } } 37 let(:lower_bounds) { { id: 42 } } 38 let(:per_page) { 10 } 39 40 let(:new_lower_bounds) { { id: 21 } } 41 42 it 'copies over order_by' do 43 expect(subject.order_by).to eq(page.order_by) 44 end 45 46 it 'copies over per_page' do 47 expect(subject.per_page).to eq(page.per_page) 48 end 49 50 it 'dups the instance' do 51 expect(subject).not_to eq(page) 52 end 53 54 it 'sets lower_bounds only on new instance' do 55 expect(subject.lower_bounds).to eq(new_lower_bounds) 56 expect(page.lower_bounds).to eq(lower_bounds) 57 end 58 end 59end 60