X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fplack.t;h=8d8aa10088d1c0b8afafb33f101de38a08410d6f;hb=af0b0fb7a454470a32c452119d0392e0dedb3fe1;hp=e23658fd3003d56d06acc887dd6c9effd272096e;hpb=bf4d35dd2f6389e9aa4dc87fdfaef801fa5b9108;p=public-inbox.git diff --git a/t/plack.t b/t/plack.t index e23658fd..8d8aa100 100644 --- a/t/plack.t +++ b/t/plack.t @@ -1,9 +1,8 @@ -# Copyright (C) 2014-2019 all contributors +# Copyright (C) 2014-2021 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(); @@ -22,8 +21,8 @@ ok(-f $psgi, "psgi example file found"); my $pfx = 'http://example.com/test'; ok(run_script(['-init', 'test', $inboxdir, "$pfx/", $addr]), 'initialized repo'); -PublicInbox::Import::run_die([qw(git config -f), $pi_config, - 'publicinbox.test.newsgroup', 'inbox.test']); +xsys_e(qw(git config -f), $pi_config, + qw(publicinbox.test.newsgroup inbox.test)); open my $fh, '>', "$inboxdir/description" or die "open: $!\n"; print $fh "test for public-inbox\n"; close $fh or die "close: $!\n"; @@ -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 @@ -46,69 +45,40 @@ EOF $im->add($mime); $im->done; my $rev = $git->qx(qw(rev-list HEAD)); - like($rev, qr/\A[a-f0-9]{40}/, "good revision committed"); + 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 - my %attr_text = (attributes => { content_type => 'text/plain' }); - my $parts = [ - Email::MIME->create(%attr_text, body => 'hi'), - Email::MIME->create(%attr_text, body => 'bye') - ]; - $mime = Email::MIME->create( - header_str => [ - From => 'a@example.com', - Subject => 'blargh', - 'Message-ID' => '', - 'In-Reply-To' => '' - ], - parts => $parts, - ); + $mime = eml_load 't/plack-2-txt-bodies.eml'; $im->add($mime); # multipart with attached patch + filename - $parts = [ Email::MIME->create(%attr_text, body => 'hi, see attached'), - Email::MIME->create( - attributes => { - content_type => 'text/plain', - filename => "foo&.patch", - }, - body => "--- a/file\n+++ b/file\n" . - "@@ -49, 7 +49,34 @@\n" - ) - ]; - $mime = Email::MIME->create( - header_str => [ - From => 'a@example.com', - Subject => '[PATCH] asdf', - 'Message-ID' => '' - ], - parts => $parts - ); + $mime = eml_load 't/plack-attached-patch.eml'; $im->add($mime); # multipart collapsed to single quoted-printable text/plain - $parts = [ - Email::MIME->create( - attributes => { - content_type => 'text/plain', - encoding => 'quoted-printable' - }, - body => 'hi = bye', - ) - ]; - $mime = Email::MIME->create( - header_str => [ - From => 'qp@example.com', - Subject => 'QP', - 'Message-ID' => '', - ], - parts => $parts, - ); + $mime = eml_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::Eml->new($crlf)); + $im->done; } @@ -120,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) = @_; @@ -229,6 +209,10 @@ test_psgi($app, sub { my $res = $cb->(GET($pfx . '/blah@example.com/raw')); is(200, $res->code, 'success response received for /*/raw'); like($res->content, qr!^From !sm, "mbox returned"); + + $res = $cb->(GET($pfx . '/blah@example.com/t.mbox.gz')); + is(501, $res->code, '501 when overview missing'); + like($res->content, qr!\bOverview\b!, 'overview omission noted'); }); # legacy redirects