test fixup
[catagits/Web-Simple.git] / lib / Web / Simple / Application.pm
index 88f025e..51fa78e 100644 (file)
@@ -89,11 +89,20 @@ sub _test_request_spec_to_http_request {
 
   my $request = HTTP::Request->new($method => $path);
 
-  if (($method eq 'POST' or $method eq 'PUT') and @rest) {
+  my @params;
+
+  while (my ($header, $value) = splice(@rest, 0, 2)) {
+    unless ($header =~ s/:$//) {
+      push @params, $header, $value;
+    }
+    $request->headers->push_header($header, $value);
+  }
+
+  if (($method eq 'POST' or $method eq 'PUT') and @params) {
     my $content = do {
       require URI;
       my $url = URI->new('http:');
-      $url->query_form(@rest);
+      $url->query_form(@params);
       $url->query;
     };
     $request->header('Content-Type' => 'application/x-www-form-urlencoded');
@@ -291,6 +300,25 @@ calls ->new, or as an object method ... in which case it doesn't.
 
 Used for running your application under stand-alone CGI and FCGI modes.
 
+I should document this more extensively but run_if_script will call it when
+you need it, so don't worry about it too much.
+
+=head2 run_test_request
+
+  my $res = $app->run_test_request(GET => '/');
+
+  my $res = $app->run_test_request(POST => '/' => %form);
+
+  my $res = $app->run_test_request($http_request);
+
+Accepts either an L<HTTP::Request> object or ($method, $path) and runs that
+request against the application, returning an L<HTTP::Response> object.
+
+If the HTTP method is POST or PUT, then a series of pairs can be passed after
+this to create a form style message body. If you need to test an upload, then
+create an L<HTTP::Request> object by hand or use the C<POST> subroutine
+provided by L<HTTP::Request::Common>.
+
 =head1 AUTHORS
 
 See L<Web::Simple> for authors.