X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fplack.t;h=4fff977352b567671bc562934ff8018bc0d98190;hb=e39585ee2bdcbeaab7b6bd33b3568021042d0879;hp=443831a1513b3ecd2695320f3552d98ef6828283;hpb=f480471dadbd10bf6cbcf87aa3580a9cd6391f8f;p=public-inbox.git diff --git a/t/plack.t b/t/plack.t index 443831a1..4fff9773 100644 --- a/t/plack.t +++ b/t/plack.t @@ -1,9 +1,8 @@ -# Copyright (C) 2014-2019 all contributors +# Copyright (C) 2014-2020 all contributors # License: AGPL-3.0+ use strict; use warnings; use Test::More; -use Email::MIME; use PublicInbox::TestCommon; my $psgi = "./examples/public-inbox.psgi"; my ($tmpdir, $for_destroy) = tmpdir(); @@ -32,7 +31,7 @@ my $git = PublicInbox::Git->new($inboxdir); my $im = PublicInbox::Import->new($git, 'test', $addr); # ensure successful message delivery { - my $mime = Email::MIME->new(<new(< To: You Cc: $addr @@ -40,6 +39,7 @@ Message-Id: Subject: hihi Date: Fri, 02 Oct 1993 00:00:00 +0000 +> quoted text zzzzzz EOF $im->add($mime); @@ -48,6 +48,38 @@ EOF like($rev, qr/\A[a-f0-9]{40}/, "good revision committed"); @ls = $git->qx(qw(ls-tree -r --name-only HEAD)); chomp @ls; + + # multipart with two text bodies + $mime = mime_load 't/plack-2-txt-bodies.eml'; + $im->add($mime); + + # multipart with attached patch + filename + $mime = mime_load 't/plack-attached-patch.eml'; + $im->add($mime); + + # multipart collapsed to single quoted-printable text/plain + $mime = mime_load 't/plack-qp.eml'; + like($mime->body_raw, qr/hi =3D bye=/, 'our test used QP correctly'); + $im->add($mime); + + my $crlf = < +To: $addr +Message-Id: +Subject: carriage + return + in + long + subject +Date: Fri, 02 Oct 1993 00:00:00 +0000 + +:( +EOF + $crlf =~ s/\n/\r\n/sg; + $im->add(PublicInbox::MIME->new($crlf)); + + $im->done; } test_psgi($app, sub { @@ -58,6 +90,16 @@ test_psgi($app, sub { } }); +test_psgi($app, sub { + my ($cb) = @_; + my $res = $cb->(GET('http://example.com/test/crlf@example.com/')); + is($res->code, 200, 'retrieved CRLF as HTML'); + unlike($res->content, qr/\r/, 'no CR in HTML'); + $res = $cb->(GET('http://example.com/test/crlf@example.com/raw')); + is($res->code, 200, 'retrieved CRLF raw'); + like($res->content, qr/\r/, 'CR preserved in raw message'); +}); + # redirect with newsgroup test_psgi($app, sub { my ($cb) = @_; @@ -127,6 +169,8 @@ test_psgi($app, sub { like($body, qr/test for public-inbox/, "set title in XML feed"); like($body, qr/zzzzzz/, 'body included'); + $res = $cb->(GET($pfx . '/description')); + like($res->content, qr/test for public-inbox/, 'got description'); }); test_psgi($app, sub { @@ -134,8 +178,10 @@ test_psgi($app, sub { my $path = '/blah@example.com/'; my $res = $cb->(GET($pfx . $path)); is(200, $res->code, "success for $path"); - like($res->content, qr!<title>hihi - Me!, - "HTML returned"); + my $html = $res->content; + like($html, qr!hihi - Me!, 'HTML returned'); + like($html, qr!(GET($pfx . $path)); @@ -143,6 +189,19 @@ test_psgi($app, sub { my $location = $res->header('Location'); like($location, qr!/blah\@example\.com/\z!, '/$MESSAGE_ID/f/ redirected to /$MESSAGE_ID/'); + + $res = $cb->(GET($pfx . '/multipart@example.com/')); + like($res->content, + qr/hi\n.*-- Attachment #2.*\nbye\n/s, 'multipart split'); + + $res = $cb->(GET($pfx . '/patch@example.com/')); + $html = $res->content; + like($html, qr!see attached!, 'original body'); + like($html, qr!.*Attachment #2: foo&(?:amp|#38);\.patch --!, + 'parts split with filename'); + + $res = $cb->(GET($pfx . '/qp@example.com/')); + like($res->content, qr/\bhi = bye\b/, "HTML output decoded QP"); }); test_psgi($app, sub {