X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fcgi.t;h=b59ca54ae15e6d96ea4683e691cd8b5256caf798;hb=788db1ec53c00b1a1a9457dc156bc7990736e88e;hp=39242bce12ea95d110c6cfcdb8132462e0603b19;hpb=c394de9f2c91c2c5ed1f7832a5a7cc0206120b7f;p=public-inbox.git diff --git a/t/cgi.t b/t/cgi.t index 39242bce..b59ca54a 100644 --- a/t/cgi.t +++ b/t/cgi.t @@ -28,10 +28,12 @@ my $cfgpfx = "publicinbox.test"; is(1, mkdir($pi_home, 0755), "setup ~/.public-inbox"); is(0, system(qw(git init -q --bare), $maindir), "git init (main)"); + open my $fh, '>', "$maindir/description" or die "open: $!\n"; + print $fh "test for public-inbox\n"; + close $fh or die "close: $!\n"; my %cfg = ( "$cfgpfx.address" => $addr, "$cfgpfx.mainrepo" => $maindir, - "$cfgpfx.description" => 'test for public-inbox', ); while (my ($k,$v) = each %cfg) { is(0, system(qw(git config --file), $pi_config, $k, $v), @@ -39,11 +41,11 @@ my $cfgpfx = "publicinbox.test"; } } +my $failbox = "$home/fail.mbox"; +local $ENV{PI_EMERGENCY} = $failbox; { - my $failbox = "$home/fail.mbox"; - local $ENV{PI_FAILBOX} = $failbox; local $ENV{HOME} = $home; - local $ENV{RECIPIENT} = $addr; + local $ENV{ORIGINAL_RECIPIENT} = $addr; # ensure successful message delivery { @@ -102,16 +104,13 @@ EOF # atom feeds { local $ENV{HOME} = $home; - my $res = cgi_run("/test/all.atom.xml"); + my $res = cgi_run("/test/atom.xml"); like($res->{body}, qr/test for public-inbox/, "set title in XML feed"); like($res->{body}, qr!http://test\.example\.com/test/m/blah%40example\.com!, "link id set"); like($res->{body}, qr/what\?/, "reply included"); - - $res = cgi_run("/test/index.atom.xml"); - unlike($res->{body}, qr/what\?/, "reply not included in index"); } # indices @@ -121,20 +120,42 @@ EOF like($res->{head}, qr/Status: 200 OK/, "index returns 200"); my $idx = cgi_run("/test/index.html"); + $idx->{body} =~ s!/index.html(\?r=)!/$1!; # dirty... is_deeply($res, $idx, - '/$LISTNAME/ and /$LISTNAME/index.html are identical'); + '/$LISTNAME/ and /$LISTNAME/index.html are nearly identical'); # more checks in t/feed.t } +# message-id pages { local $ENV{HOME} = $home; - my $res = cgi_run("/test/m/blahblah\@example.com.txt"); - like($res->{body}, qr/Message-Id: <blahblah\@example\.com>/, - "mid.txt hit"); + my $slashy_mid = 'slashy/asdf@example.com'; + my $reply = Email::Simple->new(<<EOF); +From: You <you\@example.com> +To: Me <me\@example.com> +Cc: $addr +Message-Id: <$slashy_mid> +Subject: Re: hihi +Date: Thu, 01 Jan 1970 00:00:01 +0000 - my $pfx = cgi_run("/prefixed/test/m/blahblah\@example.com.txt"); - is_deeply($pfx, $res, "we do not have to be a top-level URL"); +slashy +EOF + my $in = $reply->as_string; + { + local $ENV{HOME} = $home; + local $ENV{ORIGINAL_RECIPIENT} = $addr; + run_with_env({PATH => $main_path}, [$mda], \$in); + } + local $ENV{GIT_DIR} = $maindir; + + my $res = cgi_run("/test/m/slashy%2fasdf%40example.com.txt"); + like($res->{body}, qr/Message-Id: <\Q$slashy_mid\E>/, + "slashy mid.txt hit"); + + $res = cgi_run("/test/m/blahblah\@example.com.txt"); + like($res->{body}, qr/Message-Id: <blahblah\@example\.com>/, + "mid.txt hit"); $res = cgi_run("/test/m/blahblah\@example.con.txt"); like($res->{head}, qr/Status: 404 Not Found/, "mid.txt miss"); @@ -149,6 +170,18 @@ EOF like($res->{head}, qr/Status: 200 OK/, "200 response"); $res = cgi_run("/test/f/blahblah\@example.con.html"); like($res->{head}, qr/Status: 404 Not Found/, "mid.html miss"); + + $res = cgi_run("/test/"); + like($res->{body}, qr/slashy%2Fasdf%40example\.com/, + "slashy URL generated correctly"); +} + +# redirect list-name-only URLs +{ + local $ENV{HOME} = $home; + my $res = cgi_run("/test"); + like($res->{head}, qr/Status: 301 Moved/, "redirected status"); + like($res->{head}, qr!/test/!, "redirected with slash"); } done_testing();