summaryrefslogtreecommitdiff
path: root/t/Pagination.t
diff options
context:
space:
mode:
Diffstat (limited to 't/Pagination.t')
-rw-r--r--t/Pagination.t113
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;