The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use FindBin;
use lib "$FindBin::Bin/lib";
use strict;
use warnings;
use Test::More;
use Catalyst::Test 'TestApp';
use Data::Dumper;

eval "use PHP 0.13";
if ($@) {
   plan skip_all => "PHP 0.13 needed for testing";
}

BEGIN {
    no warnings 'redefine';
    *Catalyst::Test::local_request = sub {
	my ($class, $req) = @_;
	my $app = ref($class) eq "CODE" ? $class : $class->_finalized_psgi_app;
	my $ret;
	require Plack::Test;
	Plack::Test::test_psgi(
	    app => sub { $app->( %{ $_[0] } ) },
	    client => sub { $ret = shift->{request} } );
	return $ret;
    };
}

my $entrypoint = "http://localhost/foo";

{

    my $response = request('http://localhost/');
    ok( $response, 'response ok' );
    ok( $response->content =~ /matched TestApp/ , 'content ok' );

    # let's do a trivial request

    $response = request( 'http://localhost/hello.php' );
    ok( $response, 'trivial response ok' );
    ok( $response->content =~ /hello\W+world/i , 'trivial content ok' );

    $response = request( 'http://localhost/phpinfo.php' );
    ok( $response, 'phpinfo response ok' );
    my $content = $response->content;
    ok( $content =~ /html.*head.*body/is , 'phpinfo response is HTML' );
    my ($version) = $content =~ /PHP Version (5\.\d+\.\d+)/;
    ok( $version, "phpinfo contains version ($version)" );
    ok( $content =~ /Directive.*Local Value.*Master Value/si,
	'phpinfo contains directive list' );
    if ($version && $version lt "5.4.0") { # removed in 5.4
	ok( $content =~ /magic_quotes_gpc/, 'phpinfo contains config data' );
    }
    ok( $content =~ /Variable.*Value/, 'phpinfo contains variable data' );
    ok( $content =~ /_SERVER/ && $content =~ /_ENV/,
	'phpinfo contains variable info' );


#   diag $response->content;

}

done_testing();