about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-05-27 08:57:42 +0000
committerEric Wong <e@80x24.org>2016-05-27 09:03:32 +0000
commit0b1c6867ee10d9edcbd75c359cb23c75b732682e (patch)
tree7b880ad31530d46ed6343e9e283a5ad18aa70140
parent3344815088512287243b622658dbb7fbea87beb1 (diff)
downloadpublic-inbox-0b1c6867ee10d9edcbd75c359cb23c75b732682e.tar.gz
Oops, added a test to prevent regressions while we're at it.
-rw-r--r--lib/PublicInbox/Config.pm4
-rw-r--r--lib/PublicInbox/NewsWWW.pm3
-rw-r--r--t/plack.t15
3 files changed, 20 insertions, 2 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 935b0445..35b24af4 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -56,7 +56,8 @@ sub lookup_name {
         my ($self, $name) = @_;
         my $rv = $self->{-by_name}->{$name};
         return $rv if $rv;
-        $self->{-by_name}->{$name} = _fill($self, "publicinbox.$name");
+        $rv = _fill($self, "publicinbox.$name") or return;
+        $self->{-by_name}->{$name} = $rv;
 }
 
 sub get {
@@ -118,6 +119,7 @@ sub _fill {
                 my $v = $self->{"$pfx.$k"};
                 $rv->{$k} = $v if defined $v;
         }
+        return unless $rv->{mainrepo};
         my $inbox = $pfx;
         $inbox =~ s/\Apublicinbox\.//;
         $rv->{name} = $inbox;
diff --git a/lib/PublicInbox/NewsWWW.pm b/lib/PublicInbox/NewsWWW.pm
index 19eb596c..5357059d 100644
--- a/lib/PublicInbox/NewsWWW.pm
+++ b/lib/PublicInbox/NewsWWW.pm
@@ -30,7 +30,6 @@ sub call {
         if (my $info = $ng_map->{$ng}) {
                 my $url = PublicInbox::Hval::prurl($env, $info->{url});
                 my $code = 301;
-                my $h = [ Location => $url, 'Content-Type' => 'text/plain' ];
                 if (defined $article && $article =~ /\A\d+\z/) {
                         my $mid = eval { ng_mid_for($ng, $info, $article) };
                         if (defined $mid) {
@@ -41,6 +40,8 @@ sub call {
                         }
                 }
 
+                my $h = [ Location => $url, 'Content-Type' => 'text/plain' ];
+
                 return [ $code, $h, [ "Redirecting to $url\n" ] ]
         }
         [ 404, [ 'Content-Type' => 'text/plain' ], [] ];
diff --git a/t/plack.t b/t/plack.t
index c8dd7bfe..04680b2a 100644
--- a/t/plack.t
+++ b/t/plack.t
@@ -30,6 +30,8 @@ foreach my $mod (@mods) { use_ok $mod; }
         my %cfg = (
                 "$cfgpfx.address" => $addr,
                 "$cfgpfx.mainrepo" => $maindir,
+                "$cfgpfx.url" => 'http://example.com/test/',
+                "$cfgpfx.newsgroup" => 'inbox.test',
         );
         while (my ($k,$v) = each %cfg) {
                 is(0, system(qw(git config --file), $pi_config, $k, $v),
@@ -60,6 +62,19 @@ EOF
                 require $psgi;
         };
 
+        # redirect with newsgroup
+        test_psgi($app, sub {
+                my ($cb) = @_;
+                my $from = 'http://example.com/inbox.test';
+                my $to = 'http://example.com/test/';
+                my $res = $cb->(GET($from));
+                is($res->code, 301, 'is permanent redirect');
+                is($to, $res->header('Location'), 'redirect location matches');
+                $from .= '/';
+                is($res->code, 301, 'is permanent redirect');
+                is($to, $res->header('Location'), 'redirect location matches');
+        });
+
         # redirect with trailing /
         test_psgi($app, sub {
                 my ($cb) = @_;