Skip to content

Instantly share code, notes, and snippets.

@issm
Created April 20, 2013 11:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save issm/5425734 to your computer and use it in GitHub Desktop.
Save issm/5425734 to your computer and use it in GitHub Desktop.
test of MyApp::Modell::Pagination
use strict;
use warnings;
use MyApp;
use Test::More;
use Test::Exception;
my $c = MyApp->bootstrap();
subtest 'no param' => sub {
dies_ok {
my $m = $c->model('Pagination');
};
};
subtest 'simple' => sub {
lives_ok {
my %p = ( count => 10, entries => 5 );
my $m = $c->model( 'Pagination' => \%p );
isa_ok $m, 'MyApp::Model::Pagination';
is $m->count, 10;
is $m->entries, 5;
is $m->page, 1;
};
};
subtest 'count:50, entries: 5' => sub {
my %p = ( count => 50, entries => 5 );
my $m;
subtest 'page:1' => sub {
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 10;
is $m->entries_page, 5;
ok $m->has_next;
is $m->next, 2;
ok ! $m->has_prev;
is $m->first, 1;
is $m->last, 10;
};
subtest 'page:2' => sub {
$p{page} = 2;
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 10;
is $m->entries_page, 5;
ok $m->has_next;
is $m->next, 3;
ok $m->has_prev;
is $m->prev, 1;
is $m->first, 1;
is $m->last, 10;
};
subtest 'page:10' => sub {
$p{page} = 10;
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 10;
is $m->entries_page, 5;
ok ! $m->has_next;
ok $m->has_prev;
is $m->prev, 9;
is $m->first, 1;
is $m->last, 10;
};
subtest 'page:11' => sub {
$p{page} = 11;
$m = $c->model( 'Pagination' => \%p );
is $m->entries_page, 0;
ok ! $m->has_next;
ok $m->has_prev;
is $m->prev, 10;
};
subtest 'page:15' => sub {
$p{page} = 15;
$m = $c->model( 'Pagination' => \%p );
is $m->entries_page, 0;
ok ! $m->has_next;
ok $m->has_prev;
is $m->prev, 10;
};
subtest 'page:0' => sub {
$p{page} = 0;
$m = $c->model( 'Pagination' => \%p );
is $m->entries_page, 0;
ok $m->has_next;
is $m->next, 1;
ok ! $m->has_prev;
};
subtest 'page:-5' => sub {
$p{page} = -5;
$m = $c->model( 'Pagination' => \%p );
is $m->entries_page, 0;
ok $m->has_next;
is $m->next, 1;
ok ! $m->has_prev;
};
};
subtest 'count:10, entries: 4' => sub {
my %p = ( count => 10, entries => 4 );
my $m;
subtest 'page:1' => sub {
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 3;
is $m->entries_page, 4;
ok $m->has_next;
is $m->next, 2;
ok ! $m->has_prev;
is $m->first, 1;
is $m->last, 3;
};
subtest 'page:2' => sub {
$p{page} = 2;
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 3;
is $m->entries_page, 4;
ok $m->has_next;
is $m->next, 3;
ok $m->has_prev;
is $m->prev, 1;
is $m->first, 1;
is $m->last, 3;
};
subtest 'page:3' => sub {
$p{page} = 3;
$m = $c->model( 'Pagination' => \%p );
is $m->pages, 3;
is $m->entries_page, 2;
ok ! $m->has_next;
ok $m->has_prev;
is $m->prev, 2;
is $m->first, 1;
is $m->last, 3;
};
};
done_testing;
use strict;
use warnings;
use MyApp;
use Test::More;
use Test::Exception;
my $c = MyApp->bootstrap();
my %p = ( count => 50, entries => 1 );
sub model {
my (%p) = @_;
return $c->model( 'Pagination' => \%p );
}
subtest 'array/arrayref' => sub {
my $m = model( %p );
is $m->pages, 50;
subtest 'array' => sub {
my @a = $m->list_page();
is_deeply \@a, [ 1 .. 50 ];
};
subtest 'arrayref' => sub {
my $a = $m->list_page();
isa_ok $a, 'ARRAY';
};
};
subtest 'no param' => sub {
subtest 'page:1' => sub {
my $m = model( %p, page => 1 );
my @p = $m->list_page();
is_deeply \@p, [ 1 .. 50 ];
};
subtest 'page:10' => sub {
my $m = model( %p, page => 10 );
my @p = $m->list_page();
is_deeply \@p, [ 1 .. 50 ];
};
subtest 'page:50' => sub {
my $m = model( %p, page => 50 );
my @p = $m->list_page();
is_deeply \@p, [ 1 .. 50 ];
}
};
subtest 'range' => sub {
my ($m, @p);
my $page;
subtest 'without first/last' => sub {
$page = 1;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [ 1, 2, 3, 4, undef ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, undef ];
};
$page = 3;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [1, 2, 3, 4, 5, 6, undef ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [1, 2, 3, 4, 5, 6, 7, 8, undef ];
};
$page = 5;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [undef, 2, 3, 4, 5, 6, 7, 8, undef ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, undef ];
};
$page = 10;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [undef, 7, 8, 9, 10, 11, 12, 13, undef ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [undef, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, undef ];
};
$page = 46;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [undef, 43, 44, 45, 46, 47, 48, 49, undef ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [undef, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
};
$page = 48;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [undef, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [undef, 43, 44, 45, 46, 47, 48, 49, 50 ];
};
$page = 50;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 3 );
is_deeply \@p, [undef, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5 );
is_deeply \@p, [undef, 45, 46, 47, 48, 49, 50 ];
};
};
subtest 'with first/last' => sub {
$page = 1;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, undef, 50 ];
};
$page = 3;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, undef, 50 ];
};
$page = 6;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, undef, 50 ];
};
$page = 7;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, undef, 50 ];
};
$page = 8;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, undef, 50 ];
};
$page = 25;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, undef, 50 ];
};
$page = 43;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, undef, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, undef, 50 ];
};
$page = 44;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, undef ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
};
$page = 45;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 ];
};
$page = 48;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 43, 44, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 43, 44, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 43, 44, 45, 46, 47, 48, 49, 50 ];
};
$page = 50;
subtest "page:$page" => sub {
$m = model( %p, page => $page );
@p = $m->list_page( range => 5, first => 1 );
is_deeply \@p, [ 1, undef, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, last => 1 );
is_deeply \@p, [ undef, 45, 46, 47, 48, 49, 50 ];
@p = $m->list_page( range => 5, first => 1, last => 1 );
is_deeply \@p, [ 1, undef, 45, 46, 47, 48, 49, 50 ];
};
};
};
done_testing;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment