diff options
Diffstat (limited to 't/Pagination.t')
-rw-r--r-- | t/Pagination.t | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/t/Pagination.t b/t/Pagination.t new file mode 100644 index 0000000..e06df03 --- /dev/null +++ b/t/Pagination.t @@ -0,0 +1,113 @@ +use v5.22; +use warnings; +use strict; +use utf8; + +use Test::More; + +use JWebmail::Plugin::Paginate; + + +subtest 'pagination' => sub { + my %res; + + my $p = \&JWebmail::Plugin::Paginate::_paginate; + + %res = $p->(first_item => 0, page_size => 10, total_items => 55)->%*; + + is $res{first_item}, 0; + is $res{last_item}, 9; + is $res{total_items}, 55; + + is $res{page_size}, 10; + is $res{total_pages}, 6; + is $res{current_page}, 0; + + is_deeply $res{first_page}, [0, 10], 'first'; + is_deeply $res{prev_page}, [0, 10], 'prev'; + is_deeply $res{next_page}, [10, 20], 'next'; + is_deeply $res{last_page}, [50, 55], 'last'; + + %res = $p->(first_item => 10, page_size => 10, total_items => 55)->%*; + + is $res{first_item}, 10; + is $res{last_item}, 19; + is $res{total_items}, 55; + + is $res{page_size}, 10; + is $res{total_pages}, 6; + is $res{current_page}, 1; + + is_deeply $res{first_page}, [0, 10], 'first'; + is_deeply $res{prev_page}, [0, 10], 'prev'; + is_deeply $res{next_page}, [20, 30], 'next'; + is_deeply $res{last_page}, [50, 55], 'last'; + + %res = $p->(first_item => 20, page_size => 10, total_items => 55)->%*; + + is $res{first_item}, 20; + is $res{last_item}, 29; + is $res{total_items}, 55; + + is $res{page_size}, 10; + is $res{total_pages}, 6; + is $res{current_page}, 2; + + is_deeply $res{first_page}, [0, 10], 'first'; + is_deeply $res{prev_page}, [10, 20], 'prev'; + is_deeply $res{next_page}, [30, 40], 'next'; + is_deeply $res{last_page}, [50, 55], 'last'; + + %res = $p->(first_item => 50, page_size => 10, total_items => 55)->%*; + + is $res{first_item}, 50; + is $res{last_item}, 54; + is $res{total_items}, 55; + + is $res{page_size}, 10; + is $res{total_pages}, 6; + is $res{current_page}, 5; + + is_deeply $res{first_page}, [0, 10], 'first'; + is_deeply $res{prev_page}, [40, 50], 'prev'; + is_deeply $res{next_page}, [50, 55], 'next'; + is_deeply $res{last_page}, [50, 55], 'last'; + + %res = $p->(first_item => 0, page_size => 10, total_items => 0)->%*; + + ok !defined $res{first_item}; + ok !defined $res{last_item}; + is $res{total_items}, 0; + + is $res{page_size}, 10; + is $res{total_pages}, 0; + is $res{current_page}, 0; + + is_deeply $res{first_page}, [0, 0], 'first'; + is_deeply $res{prev_page}, [0, 0], 'prev'; + is_deeply $res{next_page}, [0, 0], 'next'; + is_deeply $res{last_page}, [0, 0], 'last'; + + SKIP: { + skip 'The first_item does not align with page boundaries and behaiviour is not specified.'; + + %res = $p->(first_item => 19, page_size => 10, total_items => 55)->%*; + + is $res{first_item}, 20; + is $res{last_item}, 29; + is $res{total_items}, 55; + + is $res{page_size}, 10; + is $res{total_pages}, 6; + is $res{current_page}, 3; + + is_deeply $res{first_page}, [1, 10], 'first'; + is_deeply $res{prev_page}, [11, 20], 'prev'; + is_deeply $res{next_page}, [31, 40], 'next'; + is_deeply $res{last_page}, [51, 55], 'last'; + } + + done_testing; +}; + +done_testing; |