The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use Test::More;
use blib;
use lib 't'; use Utils;
BEGIN {
    $ENV{PLACK_TEST_IMPL} = 'Server';
    $ENV{PLACK_SERVER} = 'Feersum';
    $ENV{PLACK_ENV} = 'deployment';

    plan skip_all => "Need Plack >= 0.9950 to run this test"
        unless eval 'require Plack; $Plack::VERSION >= 0.995';
}

plan tests => 6;

use Plack::Test;
use Plack::Test;
use Plack::Builder;
use Plack::App::File;
use Plack::App::Cascade;
use Plack::Request;
use Test::TCP;

via_map: test_psgi(
    app => builder {
        mount '/' => Plack::App::File->new(root => 't');
    },
    client => sub {
        my $cb = shift;
        my $req = HTTP::Request->new(GET =>
            "http://localhost/63-plack-apps.t");
        my $res = $cb->($req);
        my $s = "# IS THIS FILE"." STATICALLY SERVED?";
        is $res->code, 200;
        like $res->content, qr/^\Q$s\E$/m, "found static line";
    }
);

cascaded: test_psgi(
    app => builder {
        mount '/' => Plack::App::Cascade->new(apps => [
            Plack::App::File->new(root => 'notfound')->to_app,
            Plack::App::File->new(root => 'me-neither')->to_app,
            Plack::App::File->new(root => 't')->to_app,
        ]);
    },
    client => sub {
        my $cb = shift;
        my $req = HTTP::Request->new(GET =>
            "http://localhost/63-plack-apps.t");
        my $res = $cb->($req);
        my $s = "# IS THIS FILE"." STATICALLY SERVED?";
        is $res->code, 200;
        like $res->content, qr/^\Q$s\E$/m, "found static line (cascade)";
    }
);

via_redirect: test_psgi(
    app => builder {
        mount '/static' => Plack::App::Cascade->new(apps => [
            Plack::App::File->new(root => 'notfound')->to_app,
            Plack::App::File->new(root => 't')->to_app,
        ]);
        mount '/' => sub {
            my $env = shift;
            my $req = Plack::Request->new($env);
            my $res = $req->new_response(200);
            if ($req->path eq '/') {
                $res->redirect('/static/63-plack-apps.t');
            }
            else {
                $res->code(404);
            }
            $res->finalize;
        };
    },
    client => sub {
        my $cb = shift;
        my $req = HTTP::Request->new(GET =>
            "http://localhost/");
        my $res = $cb->($req);
        my $s = "# IS THIS FILE"." STATICALLY SERVED?";
        is $res->code, 200;
        like $res->content, qr/^\Q$s\E$/m, "found static line (cascade)";
    }
);

__END__
# IS THIS FILE STATICALLY SERVED?