X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fpsgi_search.t;h=07fb48466bf788b060f02fd9f25614347e36c2d7;hb=0d38f65c490466837ae091afa7a7b6f59d04ce7c;hp=4ff25eb2e9b6d0e617d1edf9e70b4816aabdf15b;hpb=31cb75037a757c9388f74283a8b1ecb7c5b65f24;p=public-inbox.git
diff --git a/t/psgi_search.t b/t/psgi_search.t
index 4ff25eb2..07fb4846 100644
--- a/t/psgi_search.t
+++ b/t/psgi_search.t
@@ -1,9 +1,10 @@
-# Copyright (C) 2017-2019 all contributors
+# Copyright (C) 2017-2020 all contributors
# License: AGPL-3.0+
use strict;
use warnings;
use Test::More;
-use Email::MIME;
+use IO::Uncompress::Gunzip qw(gunzip);
+use PublicInbox::Eml;
use PublicInbox::Config;
use PublicInbox::Inbox;
use PublicInbox::InboxWritable;
@@ -14,6 +15,7 @@ my @mods = qw(DBD::SQLite Search::Xapian HTTP::Request::Common Plack::Test
require_mods(@mods);
use_ok($_) for (qw(HTTP::Request::Common Plack::Test));
use_ok 'PublicInbox::WWW';
+use_ok 'PublicInbox::SearchIdx';
my ($tmpdir, $for_destroy) = tmpdir();
my $ibx = PublicInbox::Inbox->new({
@@ -27,8 +29,10 @@ my $im = $ibx->importer(0);
my $digits = '10010260936330';
my $ua = 'Pine.LNX.4.10';
my $mid = "$ua.$digits.2460-100000\@penguin.transmeta.com";
-my $mime = PublicInbox::MIME->new(<new(<
From: Ãvar Arnfjörð Bjarmason
To: git\@vger.kernel.org
@@ -36,7 +40,13 @@ To: git\@vger.kernel.org
EOF
$im->add($mime);
-$mime = PublicInbox::MIME->new(<<'EOF');
+$im->add(PublicInbox::Eml->new(<<""));
+Message-ID:
+From: replier
+In-Reply-To: <$mid>
+Subject: mismatch
+
+$mime = PublicInbox::Eml->new(<<'EOF');
Subject:
Message-ID:
From: blank subject
@@ -45,7 +55,7 @@ To: git@vger.kernel.org
EOF
$im->add($mime);
-$mime = PublicInbox::MIME->new(<<'EOF');
+$mime = PublicInbox::Eml->new(<<'EOF');
Message-ID:
From: no subject at all
To: git@vger.kernel.org
@@ -57,11 +67,11 @@ $im->done;
PublicInbox::SearchIdx->new($ibx, 1)->index_sync;
my $cfgpfx = "publicinbox.test";
-my $config = PublicInbox::Config->new(\<new(\<new($config);
+my $www = PublicInbox::WWW->new($cfg);
test_psgi(sub { $www->call(@_) }, sub {
my ($cb) = @_;
my $res;
@@ -76,6 +86,9 @@ test_psgi(sub { $www->call(@_) }, sub {
ok(index($html, 'by Ævar Arnfjörð Bjarmason') >= 0,
"displayed Ãvar's name properly in HTML");
+ like($html, qr/download mbox\.gz: .*?"full threads"/s,
+ '"full threads" download option shown');
+
my $warn = [];
local $SIG{__WARN__} = sub { push @$warn, @_ };
$res = $cb->(GET('/test/?q=s:test&l=5e'));
@@ -101,6 +114,8 @@ test_psgi(sub { $www->call(@_) }, sub {
'subject-less message linked from "/$INBOX/"');
like($html, qr/\bhref="blank-subject[^>]+>\(no subject\),
'blank subject message linked from "/$INBOX/"');
+ like($html, qr/test Ævar/,
+ "displayed Ãvar's name properly in topic view");
$res = $cb->(GET('/test/?q=tc:git'));
like($html, qr/\bhref="no-subject-at-all[^>]+>\(no subject\),
@@ -113,8 +128,33 @@ test_psgi(sub { $www->call(@_) }, sub {
$res = $cb->(GET('/test/no-subject-at-all@example.com/t.mbox.gz'));
like($res->header('Content-Disposition'),
qr/filename=no-subject\.mbox\.gz/);
+
+ # "full threads" mbox.gz download
+ $res = $cb->(POST('/test/?q=s:test&x=m&t'));
+ is($res->code, 200, 'successful mbox download with threads');
+ gunzip(\($res->content) => \(my $before));
+ is_deeply([ "Message-ID: <$mid>\n", "Message-ID: \n" ],
+ [ grep(/^Message-ID:/m, split(/^/m, $before)) ],
+ 'got full thread');
+
+ # clobber has_threadid to emulate old versions:
+ {
+ my $sidx = PublicInbox::SearchIdx->new($ibx, 0);
+ my $xdb = $sidx->idx_acquire;
+ $xdb->set_metadata('has_threadid', '0');
+ $sidx->idx_release;
+ }
+ $cfg->each_inbox(sub { delete $_[0]->{search} });
+ $res = $cb->(GET('/test/?q=s:test'));
+ is($res->code, 200, 'successful search w/o has_threadid');
+ unlike($html, qr/download mbox\.gz: .*?"full threads"/s,
+ '"full threads" download option not shown w/o has_threadid');
+
+ # in case somebody uses curl to bypass