]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/search.t
search: support searching on List-Id
[public-inbox.git] / t / search.t
index 0301fd90b6289f379063400ac888343f7ed9d433..92f3305d556c5773fadc1e64f6e9f544904ff06f 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Test::More;
 use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Search::Xapian Email::MIME));
+require_mods(qw(DBD::SQLite Search::Xapian));
 require PublicInbox::SearchIdx;
 require PublicInbox::Inbox;
 require PublicInbox::InboxWritable;
@@ -66,6 +66,7 @@ Subject: Hello world
 Message-ID: <root@s>
 From: John Smith <js@example.com>
 To: list@example.com
+List-Id: I'm not mad <i.m.just.bored>
 
 \m/
 EOF
@@ -77,6 +78,7 @@ Message-ID: <last@s>
 From: John Smith <js@example.com>
 To: list@example.com
 Cc: foo@example.com
+List-Id: there's nothing <left.for.me.to.do>
 
 goodbye forever :<
 EOF
@@ -286,9 +288,7 @@ EOF
 });
 
 $ibx->with_umask(sub {
-       my $eml = 't/utf8.eml';
-       my $mime = PublicInbox::InboxWritable::mime_from_path($eml) or
-               die "open $eml: $!";
+       my $mime = mime_load 't/utf8.eml';
        my $doc_id = $rw->add_message($mime);
        ok($doc_id > 0, 'message indexed doc_id with UTF-8');
        my $msg = $rw->query('m:testmessage@example.com', {limit => 1})->[0];
@@ -371,37 +371,7 @@ $ibx->with_umask(sub {
 }
 
 $ibx->with_umask(sub {
-       my $amsg = mime_load 't/search-amsg.eml', sub {
-       my $part1 = Email::MIME->create(
-                 attributes => {
-                     content_type => 'text/plain',
-                     disposition  => 'attachment',
-                     charset => 'US-ASCII',
-                    encoding => 'quoted-printable',
-                    filename => 'attached_fart.txt',
-                 },
-                 body_str => 'inside the attachment',
-       );
-       my $part2 = Email::MIME->create(
-                 attributes => {
-                     content_type => 'text/plain',
-                     disposition  => 'attachment',
-                     charset => 'US-ASCII',
-                    encoding => 'quoted-printable',
-                    filename => 'part_deux.txt',
-                 },
-                 body_str => 'inside another',
-       );
-       Email::MIME->create(
-               header_str => [
-                       Subject => 'see attachment',
-                       'Message-ID' => '<file@attached>',
-                       From => 'John Smith <js@example.com>',
-                       To => 'list@example.com',
-               ],
-               parts => [ $part1, $part2 ],
-       )}; # mime_load sub
-
+       my $amsg = mime_load 't/search-amsg.eml';
        ok($rw->add_message($amsg), 'added attachment');
        $rw_commit->();
        $ro->reopen;
@@ -480,6 +450,35 @@ EOF
        is($ro->query("m:Pine m:LNX m:10010260936330", {mset=>1})->size, 1);
 });
 
+{ # List-Id searching
+       my $found = $ro->query('lid:i.m.just.bored');
+       is_deeply([ filter_mids($found) ], [ 'root@s' ],
+               'got expected mid on exact lid: search');
+
+       $found = $ro->query('lid:just.bored');
+       is_deeply($found, [], 'got nothing on lid: search');
+
+       $found = $ro->query('lid:*.just.bored');
+       is_deeply($found, [], 'got nothing on lid: search');
+
+       $found = $ro->query('l:i.m.just.bored');
+       is_deeply([ filter_mids($found) ], [ 'root@s' ],
+               'probabilistic search works on full List-Id contents');
+
+       $found = $ro->query('l:just.bored');
+       is_deeply([ filter_mids($found) ], [ 'root@s' ],
+               'probabilistic search works on partial List-Id contents');
+
+       $found = $ro->query('lid:mad');
+       is_deeply($found, [], 'no match on phrase with lid:');
+
+       $found = $ro->query('lid:bored');
+       is_deeply($found, [], 'no match on partial List-Id with lid:');
+
+       $found = $ro->query('l:nothing');
+       is_deeply($found, [], 'matched on phrase with l:');
+}
+
 done_testing();
 
 1;