# Copyright (C) 2013-2015 all contributors
# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
use strict;
use warnings;
use Test::More;
use Email::MIME;
use PublicInbox::View;
# plain text
{
my $body = < keep this inline
OK
> Long and wordy reply goes here and it is split across multiple lines.
> We generate links to a separate full page where quoted-text is inline.
> This is
>
> Currently 12 lines
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
> See MAX_INLINE_QUOTED
hello world
EOF
my $s = Email::Simple->create(
header => [
From => 'a@example.com',
To => 'b@example.com',
'Content-Type' => 'text/plain',
'Message-ID' => '',
Subject => 'this is a subject',
],
body => $body,
)->as_string;
my $mime = Email::MIME->new($s);
my $html = PublicInbox::View::msg_html(undef, $mime);
# ghetto tests
like($html, qr!]+><\/a>> Long and wordy/,
"long quoted text is anchored");
# short page
my $pfx = "../hello%40example.com/f/";
$mime = Email::MIME->new($s);
my $short = PublicInbox::View::msg_html(undef, $mime, $pfx);
like($short, qr!]+>Long and wordy/,
"long quoted text is made into a link");
ok(length($short) < length($html), "short page is shorter");
}
# multipart crap
{
my $parts = [
Email::MIME->create(
attributes => { content_type => 'text/plain', },
body => 'hi',
),
Email::MIME->create(
attributes => { content_type => 'text/plain', },
body => 'bye',
)
];
my $mime = Email::MIME->create(
header_str => [
From => 'a@example.com',
Subject => 'blargh',
'Message-ID' => '',
'In-Reply-To' => '',
],
parts => $parts,
);
my $html = PublicInbox::View::msg_html(undef, $mime);
like($html, qr/hi\n-+ part #2 -+\nbye\n/, "multipart split");
}
# multipart email with attached patch
{
my $parts = [
Email::MIME->create(
attributes => { content_type => 'text/plain', },
body => 'hi, see attached patch',
),
Email::MIME->create(
attributes => {
content_type => 'text/plain',
filename => "foo.patch",
},
body => "--- a/file\n+++ b/file\n" .
"@@ -49, 7 +49,34 @@\n",
),
];
my $mime = Email::MIME->create(
header_str => [
From => 'a@example.com',
Subject => '[PATCH] asdf',
'Message-ID' => '',
],
parts => $parts,
);
my $html = PublicInbox::View::msg_html(undef, $mime);
like($html, qr!see attached patch\n-+ foo\.patch -+\n--- a/file\n!,
"parts split with filename");
}
# multipart collapsed to single quoted-printable text/plain
{
my $parts = [
Email::MIME->create(
attributes => {
content_type => 'text/plain',
encoding => 'quoted-printable',
},
body => 'hi = bye',
)
];
my $mime = Email::MIME->create(
header_str => [
From => 'qp@example.com',
Subject => 'QP',
'Message-ID' => '',
],
parts => $parts,
);
my $orig = $mime->body_raw;
my $html = PublicInbox::View::msg_html(undef, $mime);
like($orig, qr/hi =3D bye=/, "our test used QP correctly");
like($html, qr/\bhi = bye\b/, "HTML output decoded QP");
}
{
use PublicInbox::MID qw/id_compress/;
like(id_compress('foo%bar@wtf'), qr/\A[a-f0-9]{40}\z/,
"percent always converted to sha1 to workaround buggy httpds");
is(id_compress('foobar-wtf'), 'foobar-wtf',
'regular ID not compressed');
}
done_testing();