X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Flei-import.t;h=6e9a853cf421d8a6ce6c2fbbe1bb06c45b65c7b3;hb=9eb8baf199cd148b7ebf8e6e130fb832f4e1ef00;hp=46747a911657fb7e7f8ab34423b33c78b75f9d71;hpb=2ee341027929f716636aa7f03057a961d3a02d1c;p=public-inbox.git diff --git a/t/lei-import.t b/t/lei-import.t index 46747a91..6e9a853c 100644 --- a/t/lei-import.t +++ b/t/lei-import.t @@ -3,40 +3,114 @@ # License: AGPL-3.0+ use strict; use v5.10.1; use PublicInbox::TestCommon; test_lei(sub { -ok(!lei(qw(import -f bogus), 't/plack-qp.eml'), 'fails with bogus format'); -like($lei_err, qr/\bbogus unrecognized/, 'gave error message'); +ok(!lei(qw(import -F bogus), 't/plack-qp.eml'), 'fails with bogus format'); +like($lei_err, qr/\bis `eml', not --in-format/, 'gave error message'); lei_ok(qw(q s:boolean), \'search miss before import'); unlike($lei_out, qr/boolean/i, 'no results, yet'); open my $fh, '<', 't/data/0001.patch' or BAIL_OUT $!; -lei_ok([qw(import -f eml -)], undef, { %$lei_opt, 0 => $fh }, +lei_ok([qw(import -F eml -)], undef, { %$lei_opt, 0 => $fh }, \'import single file from stdin') or diag $lei_err; close $fh; lei_ok(qw(q s:boolean), \'search hit after import'); -lei_ok(qw(import -f eml), 't/data/message_embed.eml', +lei_ok(qw(q s:boolean -f mboxrd), \'blob accessible after import'); +{ + my $expect = [ eml_load('t/data/0001.patch') ]; + require PublicInbox::MboxReader; + my @cmp; + open my $fh, '<', \$lei_out or BAIL_OUT "open :scalar: $!"; + PublicInbox::MboxReader->mboxrd($fh, sub { + my ($eml) = @_; + $eml->header_set('Status'); + push @cmp, $eml; + }); + is_deeply(\@cmp, $expect, 'got expected message in mboxrd'); +} +lei_ok(qw(import -F eml), 't/data/message_embed.eml', \'import single file by path'); -my $str = <<''; +lei_ok(qw(q m:testmessage@example.com)); +is($lei_out, "[null]\n", 'no results, yet'); +my $oid = '9bf1002c49eb075df47247b74d69bcd555e23422'; +my $eml = eml_load('t/utf8.eml'); +my $in = 'From x@y Fri Oct 2 00:00:00 1993'."\n".$eml->as_string; +lei_ok([qw(import -F eml -)], undef, { %$lei_opt, 0 => \$in }); +lei_ok(qw(q m:testmessage@example.com)); +is(json_utf8->decode($lei_out)->[0]->{'blob'}, $oid, + 'got expected OID w/o From'); + +my $eml_str = <<''; From: a@b Message-ID: Status: RO -my $opt = { %$lei_opt, 0 => \$str }; -lei_ok([qw(import -f eml -)], undef, $opt, +my $opt = { %$lei_opt, 0 => \$eml_str }; +lei_ok([qw(import -F eml -)], undef, $opt, \'import single file with keywords from stdin'); lei_ok(qw(q m:x@y)); my $res = json_utf8->decode($lei_out); is($res->[1], undef, 'only one result'); -is_deeply($res->[0]->{kw}, ['seen'], "message `seen' keyword set"); +is($res->[0]->{'m'}, 'x@y', 'got expected message'); +is($res->[0]->{kw}, undef, 'Status ignored for eml'); +lei_ok(qw(q -f mboxrd m:x@y)); +unlike($lei_out, qr/^Status:/, 'no Status: in imported message'); +lei_ok('blob', $res->[0]->{blob}); +is($lei_out, "From: a\@b\nMessage-ID: \n", 'got blob back'); + -$str =~ tr/x/v/; # v@y -lei_ok([qw(import --no-kw -f eml -)], undef, $opt, +$eml->header_set('Message-ID', ''); +$eml->header_set('Status', 'RO'); +$in = 'From v@y Fri Oct 2 00:00:00 1993'."\n".$eml->as_string; +lei_ok([qw(import --no-kw -F mboxrd -)], undef, { %$lei_opt, 0 => \$in }, \'import single file with --no-kw from stdin'); lei(qw(q m:v@y)); $res = json_utf8->decode($lei_out); is($res->[1], undef, 'only one result'); -is_deeply($res->[0]->{kw}, [], 'no keywords set'); +is($res->[0]->{'m'}, 'v@y', 'got expected message'); +is($res->[0]->{kw}, undef, 'no keywords set'); + +$eml->header_set('Message-ID', ''); +$in = 'From k@y Fri Oct 2 00:00:00 1993'."\n".$eml->as_string; +lei_ok([qw(import -F mboxrd /dev/fd/0)], undef, { %$lei_opt, 0 => \$in }, + \'import single file with --kw (default) from stdin'); +lei(qw(q m:k@y)); +$res = json_utf8->decode($lei_out); +is($res->[1], undef, 'only one result'); +is($res->[0]->{'m'}, 'k@y', 'got expected message'); +is_deeply($res->[0]->{kw}, ['seen'], "`seen' keywords set"); + +# no From, Sender, or Message-ID +$eml_str = <<'EOM'; +Subject: draft message with no sender +References: +Resent-Message-ID: + +No use for a name +EOM +lei_ok([qw(import -F eml -)], undef, { %$lei_opt, 0 => \$eml_str }); +lei_ok(['q', 's:draft message with no sender']); +my $draft_a = json_utf8->decode($lei_out); +ok(!exists $draft_a->[0]->{'m'}, 'no fake mid stored or exposed'); +lei_ok([qw(tag -F eml - +kw:draft)], undef, { %$lei_opt, 0 => \$eml_str }); +lei_ok(['q', 's:draft message with no sender']); +my $draft_b = json_utf8->decode($lei_out); +my $kw = delete $draft_b->[0]->{kw}; +is_deeply($kw, ['draft'], 'draft kw set'); +is_deeply($draft_a, $draft_b, 'fake Message-ID lookup') or + diag explain($draft_a, $draft_b); +lei_ok('blob', '--mail', $draft_b->[0]->{blob}); +is($lei_out, $eml_str, 'draft retrieved by blob'); + + +$eml_str = "Message-ID: \nSubject: label-this\n\n"; +lei_ok([qw(import -F eml - +kw:seen +L:inbox)], + undef, { %$lei_opt, 0 => \$eml_str }); +lei_ok(qw(q m:inbox@example.com)); +$res = json_utf8->decode($lei_out); +is_deeply($res->[0]->{kw}, ['seen'], 'keyword set'); +is_deeply($res->[0]->{L}, ['inbox'], 'label set'); + -# see t/lei_to_mail.t for "import -f mbox*" +# see t/lei_to_mail.t for "import -F mbox*" }); done_testing;