use v5.24; use warnings; use utf8; use Test::More; use JSON::PP 'decode_json'; use List::Util 'min'; use JWebmail::Config 'MAILDIR_EXTRACTOR'; my $EXTRACT = MAILDIR_EXTRACTOR; my $MAILDIR = 't/testdata'; my $SYS_USER = $ENV{USER}; my $MAIL_USER = 'mockmaildir'; my $PROG = "$EXTRACT $MAILDIR $SYS_USER $MAIL_USER"; my $MAIL_COUNT = do { opendir(my $dh, "$MAILDIR/$MAIL_USER/cur"); my @all = grep { /^[^.]/ } readdir($dh); closedir($dh); local $" = ' '; note "@all"; @all }; subtest start => sub { my @res = `$PROG invalid 2>/dev/null`; isnt $? >> 8, 0; if ($? >> 8 == 3) { is scalar(@res), 1; my $result = decode_json @res; ok exists $result->{error}; } }; subtest folders => sub { my @res = `$PROG folders`; is($? >> 8, 0); is @res, 1; my $result = decode_json $res[0]; is(@$result, 2); }; subtest count => sub { my @res = `$PROG count ''`; is($? >> 8, 0); is @res, 1; my $result = decode_json $res[0]; is($result->{total_mails}, $MAIL_COUNT); }; subtest list => sub { my $s = "$PROG list '' 0 4 date"; my @res = `$s`; is($? >> 8, 0); is @res, 1; my $result = decode_json $res[0]; is(@$result, min($MAIL_COUNT, 4)); ok($result->[0]{message_handle}); ok($result->[0]{head}{from}) or diag $s; ok($result->[0]{head}{to}); }; subtest read => sub { my $folder = ''; my @pre_res = `$PROG list '$folder' 0 10 ''`; is($? >> 8, 0); is @pre_res, 1; my $pre_result = decode_json $pre_res[0]; ok(my $mid = $pre_result->[0]{message_handle}); my @res = `$PROG read '$folder' '$mid'`; is($? >> 8, 0, "read exit code") or (diag @res, return); is @res, 1; my $result = decode_json $res[0]; is_deeply( $result->{head}{from}, [{address => 'ex@example.com', display_name => 'exmpl'}], ); ok(exists $result->{head}{date}); is($result->{head}{date}, '1993-02-01T16:05:06+00:00'); }; done_testing;