-
-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathpagination_spec.rb
More file actions
115 lines (90 loc) · 3.49 KB
/
Copy pathpagination_spec.rb
File metadata and controls
115 lines (90 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
require 'rom/sql/plugin/pagination'
RSpec.describe 'Plugin / Pagination', seeds: false do
include_context 'users'
with_adapters do
before do
9.times { |i| conn[:users].insert(name: "User #{i}") }
conf.relation(:users) do
use :pagination
per_page 4
end
end
describe '#page' do
it 'allow to call with stringify number' do
expect {
container.relations[:users].page('5')
}.to_not raise_error
end
it 'preserves existing modifiers' do
expect(
container.relations[:users].send(:where, name: 'User 2').page(1).to_a.size
).to be(1)
end
end
describe '#per_page' do
it 'allow to call with stringify number' do
expect {
container.relations[:users].per_page('5')
}.to_not raise_error
end
it 'returns paginated relation with provided limit' do
users = container.relations[:users].page(2).per_page(5)
expect(users.dataset.opts[:offset]).to eql(5)
expect(users.dataset.opts[:limit]).to eql(5)
expect(users.pager.current_page).to eql(2)
expect(users.pager.total).to be(9)
expect(users.pager.total_pages).to be(2)
expect(users.pager.next_page).to be(nil)
expect(users.pager.prev_page).to be(1)
expect(users.pager.limit_value).to eql(5)
end
end
describe '#total_pages' do
it 'returns a single page when elements are a perfect fit' do
users = container.relations[:users].page(1).per_page(3)
expect(users.pager.total_pages).to eql(3)
end
it 'returns the exact number of pages to accommodate all elements' do
users = container.relations[:users].per_page(9)
expect(users.pager.total_pages).to eql(1)
end
it 'returns one page when relation is filtered' do
users = container.relations[:users].per_page(1).where(name: "User 1")
expect(users.pager.total_pages).to eql(1)
users = container.relations[:users].where(name: "User 1").per_page(1)
expect(users.pager.total_pages).to eql(1)
end
end
describe "#next_page" do
it "returns nil when there is no next page in filtered relation" do
users = container.relations[:users].per_page(1).where(name: "User 1")
expect(users.pager.next_page).to be(nil)
users = container.relations[:users].where(name: "User 1").per_page(1)
expect(users.pager.next_page).to be(nil)
end
end
describe '#pager' do
it 'returns a pager with pagination meta-info' do
users = container.relations[:users].page(1)
expect(users.pager.total).to be(9)
expect(users.pager.total_pages).to be(3)
expect(users.pager.current_page).to be(1)
expect(users.pager.next_page).to be(2)
expect(users.pager.prev_page).to be(nil)
expect(users.pager.first_in_page).to eq(1)
expect(users.pager.last_in_page).to eq(4)
users = container.relations[:users].page(2)
expect(users.pager.current_page).to be(2)
expect(users.pager.next_page).to be(3)
expect(users.pager.prev_page).to be(1)
expect(users.pager.first_in_page).to eq(5)
expect(users.pager.last_in_page).to eq(8)
users = container.relations[:users].page(3)
expect(users.pager.next_page).to be(nil)
expect(users.pager.prev_page).to be(2)
expect(users.pager.first_in_page).to eq(9)
expect(users.pager.last_in_page).to eq(9)
end
end
end
end