Fixed: builtin actions are private too (Tutorial Docs)
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / Test.pm
index 0561348..c783be1 100644 (file)
@@ -82,6 +82,22 @@ sub prepare_connection {
     $c->req->address( $c->http->address );
 }
 
+=item $c->prepare_input
+
+=cut
+
+sub prepare_input {
+    my $c = shift;
+    return unless 
+            $c->request->content_length
+        and $c->request->content_type
+        and $c->request->content_type ne 'application/x-www-form-urlencoded'
+        and $c->request->content_type ne 'multipart/form-data';
+
+    $c->request->input( $c->http->request->content );
+}
+
 =item $c->prepare_headers
 
 =cut
@@ -120,27 +136,28 @@ sub prepare_parameters {
 
             if ( $parameters{filename} ) {
 
-                my $fh = File::Temp->new;
+                my $fh = File::Temp->new( UNLINK => 0 );
                 $fh->write( $part->content ) or die $!;
-                seek( $fh, 0, 0 ) or die $!;
+                $fh->flush or die $!;
 
-                my $upload = {
-                    fh       => $fh,
+                my $upload = Catalyst::Request::Upload->new(
                     filename => $parameters{filename},
-                    size     => ( stat $fh )[7],
+                    size     => ( $fh->stat )[7],
                     tempname => $fh->filename,
                     type     => $part->content_type
-                };
+                );
+
+                $fh->close;
 
                 push( @uploads, $parameters{name}, $upload );
-                push( @params,  $parameters{name}, $fh );
+                push( @params,  $parameters{name}, $parameters{filename} );
             }
             else {
                 push( @params, $parameters{name}, $part->content );
             }
         }
     }
-    
+
     $c->req->_assign_values( $c->req->parameters, \@params );
     $c->req->_assign_values( $c->req->uploads, \@uploads );
 }