about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/eml.t2
-rw-r--r--t/lei-convert.t3
-rw-r--r--t/lei-q-kw.t48
-rw-r--r--t/lei-q-thread.t7
4 files changed, 54 insertions, 6 deletions
diff --git a/t/eml.t b/t/eml.t
index ebd45c13..0cf48f22 100644
--- a/t/eml.t
+++ b/t/eml.t
@@ -26,6 +26,8 @@ sub mime_load ($) {
         is($str, "hi\n", '->new modified body like Email::Simple');
         is($eml->body, "hi\n", '->body works');
         is($eml->as_string, "a: b\n\nhi\n", '->as_string');
+        my $empty = PublicInbox::Eml->new("\n\n");
+        is($empty->as_string, "\n\n", 'empty message');
 }
 
 for my $cls (@classes) {
diff --git a/t/lei-convert.t b/t/lei-convert.t
index 186cfb13..e147715d 100644
--- a/t/lei-convert.t
+++ b/t/lei-convert.t
@@ -60,7 +60,8 @@ test_lei({ tmpdir => $tmpdir }, sub {
         PublicInbox::MdirReader::maildir_each_eml("$d/md", sub {
                 push @md, $_[2];
         });
-        is(scalar(@md), scalar(@mboxrd), 'got expected emails in Maildir');
+        is(scalar(@md), scalar(@mboxrd), 'got expected emails in Maildir') or
+                diag $lei_err;
         @md = sort { ${$a->{bdy}} cmp ${$b->{bdy}} } @md;
         @mboxrd = sort { ${$a->{bdy}} cmp ${$b->{bdy}} } @mboxrd;
         my @rd_nostatus = map {
diff --git a/t/lei-q-kw.t b/t/lei-q-kw.t
index 917a2c53..e7e14221 100644
--- a/t/lei-q-kw.t
+++ b/t/lei-q-kw.t
@@ -112,7 +112,51 @@ for my $sfx ('', '.gz') {
         lei_ok(qw(q -o), "mboxrd:/dev/stdout", qw(m:qp@example.com)) or
                 diag $lei_err;
         like($lei_out, qr/^Status: OR\n/sm, 'Status set by previous augment');
-}
+} # /mbox + mbox.gz tests
 
-});
+my ($ro_home, $cfg_path) = setup_public_inboxes;
+
+# import keywords-only for external messages:
+$o = "$ENV{HOME}/kwdir";
+my $m = 'alpine.DEB.2.20.1608131214070.4924@example';
+my @inc = ('-I', "$ro_home/t1");
+lei_ok(qw(q -o), $o, "m:$m", @inc);
+
+# emulate MUA marking a Maildir message as read:
+@fn = glob("$o/cur/*");
+scalar(@fn) == 1 or BAIL_OUT "wrote multiple or zero files: ".explain(\@fn);
+rename($fn[0], "$fn[0]S") or BAIL_OUT "rename $!";
+
+lei_ok(qw(q -o), $o, 'bogus', \'clobber output dir to import keywords');
+@fn = glob("$o/cur/*");
+is_deeply(\@fn, [], 'output dir actually clobbered');
+lei_ok('q', "m:$m", @inc);
+my $res = json_utf8->decode($lei_out);
+is_deeply($res->[0]->{kw}, ['seen'], 'seen flag set for external message')
+        or diag explain($res);
+lei_ok('q', "m:$m", '--no-external');
+is_deeply($res = json_utf8->decode($lei_out), [ undef ],
+        'external message not imported') or diag explain($res);
+
+$o = "$ENV{HOME}/kwmboxrd";
+lei_ok(qw(q -o), "mboxrd:$o", "m:$m", @inc);
+
+# emulate MUA marking mboxrd message as unread
+open my $fh, '<', $o or BAIL_OUT;
+my $s = do { local $/; <$fh> };
+$s =~ s/^Status: OR\n/Status: O\nX-Status: A\n/sm or
+        fail "failed to clear R flag in $s";
+open $fh, '>', $o or BAIL_OUT;
+print $fh $s or BAIL_OUT;
+close $fh or BAIL_OUT;
+
+lei_ok(qw(q -o), "mboxrd:$o", 'm:bogus', @inc,
+        \'clobber mbox to import keywords');
+lei_ok(qw(q -o), "mboxrd:$o", "m:$m", @inc);
+open $fh, '<', $o or BAIL_OUT;
+$s = do { local $/; <$fh> };
+like($s, qr/^Status: O\n/ms, 'seen keyword gone in mbox');
+like($s, qr/^X-Status: A\n/ms, 'answered flag set');
+
+}); # test_lei
 done_testing;
diff --git a/t/lei-q-thread.t b/t/lei-q-thread.t
index e24fb2cb..c999d12b 100644
--- a/t/lei-q-thread.t
+++ b/t/lei-q-thread.t
@@ -43,10 +43,11 @@ test_lei(sub {
                 'flagged set in direct hit');
         lei_ok qw(q -tt m:testmessage@example.com --only), "$ro_home/t2";
         $res = json_utf8->decode($lei_out);
-        is_deeply($res->[0]->{kw}, [ 'flagged' ],
-                'flagged set on external with -tt');
+        is_deeply($res->[0]->{kw}, [ qw(flagged seen) ],
+                'flagged set on external with -tt') or diag explain($res);
         lei_ok qw(q -t m:testmessage@example.com --only), "$ro_home/t2";
         $res = json_utf8->decode($lei_out);
-        ok(!exists($res->[0]->{kw}), 'flagged not set on external with 1 -t');
+        is_deeply($res->[0]->{kw}, [ 'seen' ],
+                'flagged not set on external with 1 -t') or diag explain($res);
 });
 done_testing;