summaryrefslogtreecommitdiff
path: root/t/Helper.t
diff options
context:
space:
mode:
authorJannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de>2020-10-29 12:13:04 +0100
committerJannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de>2020-10-29 12:13:04 +0100
commitee43823179ee627ac16ea9da8168e5f1bf9619c0 (patch)
tree5e6c36d5629d2ce79f3cb1310998dc715a6f19c7 /t/Helper.t
Initial commit; Stable version
Diffstat (limited to 't/Helper.t')
-rw-r--r--t/Helper.t184
1 files changed, 184 insertions, 0 deletions
diff --git a/t/Helper.t b/t/Helper.t
new file mode 100644
index 0000000..99758a3
--- /dev/null
+++ b/t/Helper.t
@@ -0,0 +1,184 @@
+use v5.22;
+use warnings;
+use utf8;
+
+use Test::More;
+
+use Encode 'decode';
+use MIME::Words 'decode_mimewords';
+
+use JWebmail::Plugin::Helper;
+
+
+subtest 'print_size10' => sub {
+ my %TESTS = (
+ 1 => '1 Byte',
+ 10 => '10 Byte',
+ 100 => '100 Byte',
+ 1000 => '1 kByte',
+ 10000 => '10 kByte',
+ 100000 => '100 kByte',
+ 1000000 => '1 MByte',
+ 10 * 10**6 => '10 MByte',
+ 10 * 2**20 => '10 MByte',
+ 800 => '800 Byte',
+ 9999 => '10 kByte',
+ 9500 => '10 kByte',
+ 1024 => '1 kByte',
+ 1023 => '1 kByte',
+ );
+
+ plan tests => scalar keys %TESTS;
+
+ while (my ($input, $want) = each %TESTS) {
+ is(JWebmail::Plugin::Helper::print_sizes10($input), $want);
+ }
+};
+
+
+subtest 'vaild_mail_line' => sub {
+ my %TESTS = (
+ 'abc@example.com' => 1,
+ 'ABC Ex <abc@example.com>' => 1,
+ '"ABC Ex" <abc@example.com>' => 1,
+ '"A@B.V Ex" <abc@example.com>' => 1,
+ '"A@B.V Ex\"" <abc@example.com>' => 1,
+ 'ABC Ex abc@example.com' => 0,
+ );
+
+ plan tests => scalar keys %TESTS;
+
+ while (my ($input, $want) = each %TESTS) {
+ cmp_ok(JWebmail::Plugin::Helper->mail_line('', $input), '!=', $want);
+ }
+};
+
+
+subtest 'mime_word_decode' => sub {
+ my $input = "=?utf-8?Q?Jannis=20wir=20vermissen=20dich!=20Komm=20zur=C3=BCck=20und=20spare=20mit=20uns=20beim=20shoppen=20deiner=20Lieblingsmarken?=";
+ my $want = "Jannis wir vermissen dich! Komm zurück und spare mit uns beim shoppen deiner Lieblingsmarken";
+ my $got = scalar decode_mimewords $input;
+
+ isnt $want, $got;
+ is $want, _to_perl_enc(decode_mimewords $input);
+ is $want, decode('MIME-Header', $input);
+
+ done_testing 3;
+};
+
+sub _to_perl_enc {
+ my $out = '';
+ for (@_) {
+ if ($_->[1]) {
+ $out .= decode($_->[1], $_->[0]);
+ }
+ else {
+ $out .= $_->[0];
+ }
+ }
+ return $out;
+}
+
+
+subtest 'pagination' => sub {
+ my %res;
+
+ %res = JWebmail::Plugin::Helper::_paginate(first_item => 0, page_size => 10, total_items => 55);
+
+ is $res{first_item}, 1;
+ is $res{last_item}, 10;
+ 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}, [1, 10], 'first';
+ is_deeply $res{prev_page}, [1, 10], 'prev';
+ is_deeply $res{next_page}, [11, 20], 'next';
+ is_deeply $res{last_page}, [51, 55], 'last';
+
+ %res = JWebmail::Plugin::Helper::_paginate(first_item => 10, page_size => 10, total_items => 55);
+
+ is $res{first_item}, 11;
+ is $res{last_item}, 20;
+ 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}, [1, 10], 'first';
+ is_deeply $res{prev_page}, [1, 10], 'prev';
+ is_deeply $res{next_page}, [21, 30], 'next';
+ is_deeply $res{last_page}, [51, 55], 'last';
+
+ %res = JWebmail::Plugin::Helper::_paginate(first_item => 20, page_size => 10, total_items => 55);
+
+ is $res{first_item}, 21;
+ is $res{last_item}, 30;
+ 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';
+
+ %res = JWebmail::Plugin::Helper::_paginate(first_item => 50, page_size => 10, total_items => 55);
+
+ is $res{first_item}, 51;
+ is $res{last_item}, 55;
+ is $res{total_items}, 55;
+
+ is $res{page_size}, 10;
+ is $res{total_pages}, 6;
+ is $res{current_page}, 6;
+
+ is_deeply $res{first_page}, [1, 10], 'first';
+ is_deeply $res{prev_page}, [41, 50], 'prev';
+ is_deeply $res{next_page}, [51, 55], 'next';
+ is_deeply $res{last_page}, [51, 55], 'last';
+
+ %res = JWebmail::Plugin::Helper::_paginate(first_item => 0, page_size => 10, total_items => 0);
+
+ is $res{first_item}, 0;
+ is $res{last_item}, 0;
+ is $res{total_items}, 0;
+
+ is $res{page_size}, 10;
+ is $res{total_pages}, 0;
+ is $res{current_page}, 1;
+
+ 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 = JWebmail::Plugin::Helper::_paginate(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; \ No newline at end of file