]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/cgi.t
config: use description file for gitweb
[public-inbox.git] / t / cgi.t
diff --git a/t/cgi.t b/t/cgi.t
index f359cf6e1f1ffc1bddfbeef70d2098620fef6655..b59ca54ae15e6d96ea4683e691cd8b5256caf798 100644 (file)
--- a/t/cgi.t
+++ b/t/cgi.t
@@ -8,7 +8,7 @@ use File::Temp qw/tempdir/;
 use Cwd;
 use IPC::Run qw/run/;
 
-use constant CGI => "blib/script/public-inbox-cgi";
+use constant CGI => "blib/script/public-inbox.cgi";
 my $mda = "blib/script/public-inbox-mda";
 my $tmpdir = tempdir(CLEANUP => 1);
 my $home = "$tmpdir/pi-home";
@@ -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,31 +104,84 @@ 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/<title>test for public-inbox/,
                "set title in XML feed");
        like($res->{body},
-               qr!http://test\.example\.com/test/mid/blah%40example\.com!,
+               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
 {
        local $ENV{HOME} = $home;
-       my $res = cgi_run("/test/all.atom.xml");
-       like($res->{body}, qr/<title>test for public-inbox/,
-               "set title in XML feed");
-       like($res->{body},
-               qr!http://test\.example\.com/test/mid/blah%40example\.com!,
-               "link id set");
-       like($res->{body}, qr/what\?/, "reply included");
+       my $res = cgi_run("/test/");
+       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 nearly identical');
+       # more checks in t/feed.t
+}
+
+# message-id pages
+{
+       local $ENV{HOME} = $home;
+       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
+
+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");
+
+       $res = cgi_run("/test/m/blahblah\@example.com.html");
+       like($res->{body}, qr/\A<html>/, "mid.html hit");
+       like($res->{head}, qr/Status: 200 OK/, "200 response");
+       $res = cgi_run("/test/m/blahblah\@example.con.html");
+       like($res->{head}, qr/Status: 404 Not Found/, "mid.html miss");
+
+       $res = cgi_run("/test/f/blahblah\@example.com.html");
+       like($res->{body}, qr/\A<html>/, "mid.html hit");
+       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");
+}
 
-       $res = cgi_run("/test/index.atom.xml");
-       unlike($res->{body}, qr/what\?/, "reply not included in index");
+# 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();