Catalyst-View-Template-PHP
view release on metacpan or search on metacpan
t/20-upload.t view on Meta::CPAN
use FindBin;
use lib "$FindBin::Bin/lib";
use strict;
use warnings;
use Test::More;
use Catalyst::Test 'TestApp';
use Data::Dumper;
use HTTP::Request::Common; # reqd for POST requests
eval "use PHP 0.14";
if ($@) {
plan skip_all => "PHP 0.14 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";
sub array {
return { @_ };
}
{
# how to do a request that simulates a file upload??
my $size = -s "t/testapp.conf";
my $response = request POST 'http://localhost/handle_upload.php',
Content_Type => 'form-data',
Content => [
my_file => [ "t/testapp.conf", "test_file_name", "Content-type" => "text/plain; charset=UTF-8" ]
];
my $content = eval { $response->content };
ok( $response, 'response ok for POST with file upload' );
ok( $content, 'got content for POST with file upload' );
ok( $content =~ /\$_FILES =/, 'content looks like correct format' );
ok( $content =~ /\bmy_file\b/, 'content got correct file upload param name' );
ok( $content =~ /\bname\b.*test_file_name/, 'file upload recorded filename' );
ok( $content =~ /\bsize\b\D*(\d+)/ && $1 == $size,
'file upload recorded correct file size' );
my $tmp_name = PHP::eval_return( "\$_FILES['my_file']['tmp_name']" );
ok( $tmp_name, "can recover file temp name $tmp_name from PHP" );
ok( PHP::eval_return( "is_uploaded_file('$tmp_name')" ),
"PHP believes $tmp_name is uploaded file" );
### files may be deleted when the request is complete.
### need to perform the test inside PHP to read, move file
# ok( PHP::eval_return( "is_file('$tmp_name')" ),
# "PHP believes $tmp_name is file" );
# ok( -f $tmp_name, "Perl believes $tmp_name is a file" );
### multiple uploads
my $size2 = -s "MANIFEST";
$response = request POST 'http://localhost/handle_upload.php',
( run in 0.571 second using v1.01-cache-2.11-cpan-39bf76dae61 )