use strict;
use warnings;
use Test::More;
+eval { require PublicInbox::Search; };
+plan skip_all => "Xapian missing for search" if $@;
use File::Temp qw/tempdir/;
-use PublicInbox::Search;
use Email::MIME;
use Data::Dumper;
my $tmpdir = tempdir(CLEANUP => 1);
my $rw = PublicInbox::Search->new($git_dir, 1);
my $ro = PublicInbox::Search->new($git_dir);
+my $rw_commit = sub {
+ $rw = undef;
+ $rw = PublicInbox::Search->new($git_dir, 1);
+};
{
my $root = Email::MIME->create(
header_str => [
Date => 'Fri, 02 Oct 1993 00:00:00 +0000',
- Subject => 'hello world',
+ Subject => 'Hello world',
'Message-ID' => '<root@s>',
From => 'John Smith <js@example.com>',
To => 'list@example.com',
my $last = Email::MIME->create(
header_str => [
Date => 'Sat, 02 Oct 2010 00:00:00 +0000',
- Subject => 'Re: hello world',
+ Subject => 'Re: Hello world',
'In-Reply-To' => '<root@s>',
'Message-ID' => '<last@s>',
From => 'John Smith <js@example.com>',
sub filter_mids {
my ($res) = @_;
- sort(map { (split(/\n/, $_))[0] } @{$res->{msgs}});
+ sort(map { $_->mid } @{$res->{msgs}});
}
{
+ $rw_commit->();
$ro->reopen;
my $found = $ro->lookup_message('<root@s>');
ok($found, "message found");
is($res->{count}, 0, "path variant `$p' does not match");
}
- $res = $ro->query('subject:(hello world)');
+ $res = $ro->query('subject:(Hello world)');
@res = filter_mids($res);
is_deeply(\@res, \@exp, 'got expected results for subject:() match');
- $res = $ro->query('subject:"hello world"');
+ $res = $ro->query('subject:"Hello world"');
@res = filter_mids($res);
is_deeply(\@res, \@exp, 'got expected results for subject:"" match');
- $res = $ro->query('subject:"hello world"', {limit => 1});
+ $res = $ro->query('subject:"Hello world"', {limit => 1});
is(scalar @{$res->{msgs}}, 1, "limit works");
my $first = $res->{msgs}->[0];
- $res = $ro->query('subject:"hello world"', {offset => 1});
+ $res = $ro->query('subject:"Hello world"', {offset => 1});
is(scalar @{$res->{msgs}}, 1, "offset works");
my $second = $res->{msgs}->[0];
# ghost vivication
{
- $rw->reopen;
+ $rw_commit->();
my $rmid = '<ghost-message@s>';
my $reply_to_ghost = Email::MIME->create(
header_str => [
# search thread on ghost
{
+ $rw_commit->();
$ro->reopen;
# Subject:
# body
$res = $ro->query('goodbye');
- is((split(/\n/, $res->{msgs}->[0]))[0], 'last@s',
- 'got goodbye message body');
+ is($res->{msgs}->[0]->mid, 'last@s', 'got goodbye message body');
}
# long message-id
{
- $rw->reopen;
+ $rw_commit->();
$ro->reopen;
my $long_mid = 'last' . ('x' x 60). '@s';
my $long_midc = Digest::SHA::sha1_hex($long_mid);
my $long_id = $rw->add_message($long);
is($long_id, int($long_id), "long_id is an integer: $long_id");
+ $rw_commit->();
$ro->reopen;
my $res = $ro->query('references:root@s');
my @res = filter_mids($res);
is_deeply(\@res, [ sort('last@s', $long_midc) ],
"got expected results for references: match");
- my $replies = $ro->get_replies('root@s');
- $replies = [ filter_mids($replies) ];
- is_deeply($replies, [ filter_mids($res) ], "get_replies matches");
+ my $followups = $ro->get_followups('root@s');
+ $followups = [ filter_mids($followups) ];
+ is_deeply($followups, [ filter_mids($res) ], "get_followups matches");
my $long_reply_mid = 'reply-to-long@1';
my $long_reply = Email::MIME->create(
body => "no References\n");
ok($rw->add_message($long_reply) > $long_id, "inserted long reply");
+ $rw_commit->();
$ro->reopen;
my $t = $ro->get_thread('root@s');
is($t->{count}, 4, "got all 4 mesages in thread");
# quote prioritization
{
- $rw->reopen;
+ $rw_commit->();
$rw->add_message(Email::MIME->create(
header_str => [
Date => 'Sat, 02 Oct 2010 00:00:01 +0000',
- Subject => 'hello',
+ Subject => 'Hello',
'Message-ID' => '<quote@a>',
From => 'Quoter <quoter@example.com>',
To => 'list@example.com',
$rw->add_message(Email::MIME->create(
header_str => [
Date => 'Sat, 02 Oct 2010 00:00:02 +0000',
- Subject => 'hello',
+ Subject => 'Hello',
'Message-ID' => '<nquote@a>',
From => 'Non-Quoter<non-quoter@example.com>',
To => 'list@example.com',
body => "theatre\nfade\n"));
my $res = $rw->query("theatre");
is($res->{count}, 2, "got both matches");
- like($res->{msgs}->[0], qr/\Anquote\@a/, "non-quoted scores higher");
- like($res->{msgs}->[1], qr/\Aquote\@a/, "quoted result still returned");
+ is($res->{msgs}->[0]->mid, 'nquote@a', "non-quoted scores higher");
+ is($res->{msgs}->[1]->mid, 'quote@a', "quoted result still returned");
$res = $rw->query("illusions");
is($res->{count}, 1, "got a match for quoted text");
- like($res->{msgs}->[0], qr/\Aquote\@a/,
+ is($res->{msgs}->[0]->mid, 'quote@a',
"quoted result returned if nothing else");
}