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