X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F67pager.t;h=fa7c93a0e7668857a02037c805af202483379b6c;hb=261a9d64a6c252dd0b6609c023a982a8cb58655c;hp=1835d6db0e662b51c2fd207bbfe6b7ca88721adf;hpb=652452208e616becca6cfd0f16956339410da6d0;p=dbsrgits%2FDBIx-Class.git diff --git a/t/67pager.t b/t/67pager.t index 1835d6d..fa7c93a 100644 --- a/t/67pager.t +++ b/t/67pager.t @@ -2,7 +2,6 @@ use strict; use warnings; use Test::More; -use Test::Exception; use lib qw(t/lib); use DBICTest; @@ -70,12 +69,14 @@ $it = $rs->search( { order_by => 'title', rows => 3 } ); -my $page = $it->page(2); -is( $page->count, 2, "standard resultset paged rs count ok" ); +{ + my $page = $it->page(2); -is( $page->next->title, "Generic Manufactured Singles", "second page of standard resultset ok" ); + is( $page->count, 2, "standard resultset paged rs count ok" ); + is( $page->next->title, "Generic Manufactured Singles", "second page of standard resultset ok" ); +} # test software-based limit paging $it = $rs->search( @@ -111,7 +112,7 @@ $it = $rs->search({}, { }); my $row = $rs->search({}, { - order_by => 'cdid', + order_by => 'cdid', offset => 3, rows => 1 })->single; @@ -152,19 +153,31 @@ is ($qcnt, 0, 'No queries with explicitly sey total count'); # test cached resultsets my $init_cnt = $rs->count; -$it = $rs->search({}, { rows => 3, cache => 1 })->page(3); +$it = $rs->search({}, { rows => 3, cache => 1 })->page(2); +is ($it->count, 3, '3 rows'); +is (scalar $it->all, 3, '3 objects'); + +isa_ok($it->pager,'Data::Page','Get a pager back ok'); +is($it->pager->total_entries,7); +is($it->pager->current_page,2); +is($it->pager->entries_on_this_page,3); + +$it = $it->page(3); is ($it->count, 1, 'One row'); is (scalar $it->all, 1, 'One object'); +isa_ok($it->pager,'Data::Page','Get a pager back ok'); +is($it->pager->total_entries,7); +is($it->pager->current_page,3); +is($it->pager->entries_on_this_page,1); + + $it->delete; is ($rs->count, $init_cnt - 1, 'One row deleted as expected'); is ($it->count, 1, 'One row (cached)'); is (scalar $it->all, 1, 'One object (cached)'); -throws_ok { $it->pager } - qr/Pagers on cached resultsets are not supported/, 'No pagers on cached resultsets'; - # test fresh rs creation with modified defaults my $p = sub { $schema->resultset('CD')->page(1)->pager->entries_per_page; }; @@ -174,5 +187,40 @@ $schema->default_resultset_attributes({ rows => 5 }); is($p->(), 5, 'default rows is 5'); +# does serialization work (preserve laziness, while preserving state if exits) +$qcnt = 0; +$it = $rs->search( + {}, + { order_by => 'title', + rows => 5, + page => 2 } +); +$pager = $it->pager; +is ($qcnt, 0, 'No queries on rs/pager creation'); + +# test *requires* it to be Storable +$it = do { + local $DBIx::Class::ResultSourceHandle::thaw_schema = $schema; + Storable::dclone ($it); +}; +is ($qcnt, 0, 'No queries on rs/pager freeze/thaw'); + +is( $it->pager->entries_on_this_page, 1, "entries_on_this_page ok for page 2" ); + +is ($qcnt, 1, 'Count fired to get pager page entries'); + +$rs->create({ title => 'bah', artist => 1, year => 2011 }); + +$qcnt = 0; +# test *requires* it to be Storable +$it = do { + local $DBIx::Class::ResultSourceHandle::thaw_schema = $schema; + Storable::dclone ($it); +}; +is ($qcnt, 0, 'No queries on rs/pager freeze/thaw'); + +is( $it->pager->entries_on_this_page, 1, "entries_on_this_page ok for page 2, even though underlying count changed" ); + +is ($qcnt, 0, 'No count fired on pre-existing total count'); done_testing;