1use strict;
2use warnings;  
3
4use Test::More qw(no_plan);
5use lib qw(t/lib);
6use DBICTest;
7
8my $schema = DBICTest->init_schema();
9
10# first page
11my $it = $schema->resultset("CD")->search(
12    {},
13    { order_by => 'title',
14      rows => 3,
15      page => 1 }
16);
17
18is( $it->pager->entries_on_this_page, 3, "entries_on_this_page ok" );
19
20is( $it->pager->next_page, 2, "next_page ok" );
21
22is( $it->count, 3, "count on paged rs ok" );
23
24is( $it->pager->total_entries, 5, "total_entries ok" );
25
26is( $it->next->title, "Caterwaulin' Blues", "iterator->next ok" );
27
28$it->next;
29$it->next;
30
31is( $it->next, undef, "next past end of page ok" );
32
33# second page, testing with array
34my @page2 = $schema->resultset("CD")->search( 
35    {},
36    { order_by => 'title',
37      rows => 3,
38      page => 2 }
39);
40
41is( $page2[0]->title, "Generic Manufactured Singles", "second page first title ok" );
42
43# page a standard resultset
44$it = $schema->resultset("CD")->search(
45  {},
46  { order_by => 'title',
47    rows => 3 }
48);
49my $page = $it->page(2);
50
51is( $page->count, 2, "standard resultset paged rs count ok" );
52
53is( $page->next->title, "Generic Manufactured Singles", "second page of standard resultset ok" );
54
55# test software-based limit paging
56$it = $schema->resultset("CD")->search(
57  {},
58  { order_by => 'title',
59    rows => 3,
60    page => 2,
61    software_limit => 1 }
62);
63is( $it->pager->entries_on_this_page, 2, "software entries_on_this_page ok" );
64
65is( $it->pager->previous_page, 1, "software previous_page ok" );
66
67is( $it->count, 2, "software count on paged rs ok" );
68
69is( $it->next->title, "Generic Manufactured Singles", "software iterator->next ok" );
70
71# test paging with chained searches
72$it = $schema->resultset("CD")->search(
73    {},
74    { rows => 2,
75      page => 2 }
76)->search( undef, { order_by => 'title' } );
77
78is( $it->count, 2, "chained searches paging ok" );
79
80my $p = sub { $schema->resultset("CD")->page(1)->pager->entries_per_page; };
81
82is($p->(), 10, 'default rows is 10');
83
84$schema->default_resultset_attributes({ rows => 5 });
85
86is($p->(), 5, 'default rows is 5');
87
88# test page with offset
89$it = $schema->resultset('CD')->search({}, {
90    rows => 2,
91    page => 2,
92    offset => 1,
93    order_by => 'cdid'
94});
95
96my $row = $schema->resultset('CD')->search({}, {
97    order_by => 'cdid', 
98    offset => 3,
99    rows => 1
100})->single;
101
102is($row->cdid, $it->first->cdid, 'page with offset');
103