Merge 'trunk' into 'Catalyst-Test-Updates'
Marcus Ramberg [Sun, 7 Sep 2008 13:04:19 +0000 (13:04 +0000)]
r26476@Command-Central (orig r8329):  zarquon | 2008-09-02 14:01:11 +0200
 r13852@zaphod:  kd | 2008-09-02 12:52:50 +0100
 rafl doc improvements

r26477@Command-Central (orig r8330):  zarquon | 2008-09-02 14:04:57 +0200
 r13854@zaphod:  kd | 2008-09-02 13:04:40 +0100
 rafl's doc improvements in 5.8

r26481@Command-Central (orig r8334):  groditi | 2008-09-03 01:54:43 +0200
only call ACCEPT_CONTEXT if we actually have a context
r26484@Command-Central (orig r8337):  rafl | 2008-09-03 08:03:36 +0200
Fix ACCEPT_COMPONENT tests.

As of r8334 MyApp->component doesn't invoke ACCEPT_COMPONENT anymore.
r26485@Command-Central (orig r8338):  rafl | 2008-09-03 08:03:41 +0200
Test MyApp->component not invoking ACCEPT_CONTEXT.
r26487@Command-Central (orig r8340):  rafl | 2008-09-03 10:38:05 +0200
Use Test::NoTabs instead of Test::Perl::Critic.
r26507@Command-Central (orig r8359):  rafl | 2008-09-05 17:50:16 +0200
Make go('/chained/action') execute the full chain, not just the endpoint.
r26508@Command-Central (orig r8360):  rafl | 2008-09-05 20:55:52 +0200
Fix ROADMAP url.

lib/Catalyst/Test.pm
t/catalyst-test.t [new file with mode: 0644]

index 9e0db01..ba10ffc 100644 (file)
@@ -1,5 +1,7 @@
 package Catalyst::Test;
 
+use Test::More;
+
 use strict;
 use warnings;
 
@@ -7,6 +9,10 @@ use Catalyst::Exception;
 use Catalyst::Utils;
 use Class::Inspector;
 
+use parent qw/Exporter/;
+our @EXPORT=qw/&content_like &action_ok &action_redirect &action_notfound &contenttype_is/;
+
+
 =head1 NAME
 
 Catalyst::Test - Test Catalyst Applications
@@ -44,8 +50,8 @@ Catalyst::Test - Test Catalyst Applications
 
     package main;
 
-    use Test::More tests => 1;
     use Catalyst::Test 'TestApp';
+    use Test::More tests => 1;
 
     ok( get('/foo') =~ /bar/ );
 
@@ -54,7 +60,8 @@ Catalyst::Test - Test Catalyst Applications
 This module allows you to make requests to a Catalyst application either without
 a server, by simulating the environment of an HTTP request using
 L<HTTP::Request::AsCGI> or remotely if you define the CATALYST_SERVER
-environment variable.
+environment variable. This module also adds a few catalyst
+specific testing methods as displayed in the method section.
 
 The </get> and </request> functions take either a URI or an L<HTTP::Request>
 object.
@@ -112,6 +119,7 @@ sub import {
     my $caller = caller(0);
     *{"$caller\::request"} = $request;
     *{"$caller\::get"}     = $get;
+    __PACKAGE__->export_to_level(1);
 }
 
 =head2 local_request
@@ -195,6 +203,72 @@ sub remote_request {
     return $agent->request($request);
 }
 
+=head2 action_ok
+
+Fetches the given url and check that the request was successful
+
+=head2 action_redirect
+
+Fetches the given url and check that the request was a redirect
+
+=head2 action_notfound
+
+Fetches the given url and check that the request was not found
+
+=head2 content_like
+
+Fetches the given url and matches the content against it.
+
+=head2 contenttype_is 
+    
+Check for given mime type
+
+=cut
+
+sub content_like {
+    my $caller=caller(0);
+    no strict 'refs';
+    my $get=*{"$caller\::get"};
+    my $action=shift;
+    return Test::More->builder->like(get($action),@_);
+}
+
+sub action_ok {
+    my $caller=caller(0);
+    no strict 'refs';
+    my $request=*{"$caller\::request"};
+    my $action=shift;
+    return Test::More->builder->ok(&$request($action)->is_success, @_);
+}
+
+sub action_redirect {
+    my $caller=caller(0);
+    no strict 'refs';
+    my $request=*{"$caller\::request"};
+    my $action=shift;
+    return Test::More->builder->ok(&$request($action)->is_redirect,@_);
+    
+}
+
+sub action_notfound {
+    my $caller=caller(0);
+    no strict 'refs';
+    my $request=*{"$caller\::request"};
+    my $action=shift;
+    return Test::More->builder->is_eq(&$request($action)->code,404,@_);
+
+}
+
+
+sub contenttype_is {
+    my $caller=caller(0);
+    no strict 'refs';
+    my $request=*{"$caller\::request"};
+    my $action=shift;
+    my $res=&$request($action);
+    return Test::More->builder->is_eq(scalar($res->content_type),@_);
+}
+
 =head1 SEE ALSO
 
 L<Catalyst>, L<Test::WWW::Mechanize::Catalyst>,
diff --git a/t/catalyst-test.t b/t/catalyst-test.t
new file mode 100644 (file)
index 0000000..ef88b4d
--- /dev/null
@@ -0,0 +1,11 @@
+use FindBin;
+use lib "$FindBin::Bin/lib";
+use Catalyst::Test 'TestApp';
+
+use Test::More tests => 5;
+
+content_like('/','foo');
+action_ok('/','Action ok ok');
+action_redirect('/engine/response/redirect/one');
+action_notfound('/engine/response/status/s404');
+contenttype_is('text/plain');
\ No newline at end of file