[Catalyst-dev] subdomain hook for Catalyst::Test

Jason Gottshall jgottshall at capwiz.com
Wed Sep 17 23:12:48 BST 2008


Our app allows for virtual subdomains that (among other things) enable 
specific behaviors in the app.

For example,
   http://www.myapp.com/foo/bar
and
   http://magic.myapp.com/foo/bar
both point to same app, but the latter has "magic" behaviors associated 
with it.

The problem is that we're having trouble writing tests against specific 
behaviors in our controller tests, particularly when we want to test 
several different subdomains within the same script.

My current solution is to set an environment variable in the test script 
specifing the desired subdomain. I've added hooks to the app that will 
use this value if available, so that controller tests using a "local" 
instance of the app instantiated with Catalyst::Test and a faked request 
will Just Work. But we run into trouble when we try to run the tests 
against a "remote" server by setting CATALYST_SERVER. The env var 
setting embedded in the script obviously is not visible to the server 
instance that's running remotely.

In order to remedy this problem, I've patched Catalyst::Test to look for 
my new env var and prepend it to the CATALYST_SERVER host component. It 
works great! But I'm wondering whether this patch is worthy of adding to 
the core, or if there's a different way I should be approaching the 
problem. Here's a diff against 5.70/trunk:

Index: lib/Catalyst/Test.pm
===================================================================
--- lib/Catalyst/Test.pm        (revision 8432)
+++ lib/Catalyst/Test.pm        (working copy)
@@ -148,6 +148,10 @@
      my $request = Catalyst::Utils::request( shift(@_) );
      my $server  = URI->new( $ENV{CATALYST_SERVER} );

+    if ( $ENV{CATALYST_SUBDOMAIN} ) {
+        $server->host("$ENV{CATALYST_SUBDOMAIN}." . $server->host);
+    }
+
      if ( $server->path =~ m|^(.+)?/$| ) {
          my $path = $1;
          $server->path("$path") if $path;    # need to be quoted

If this approach makes sense, I'll add documentation to the patch, of 
course. I may need a little help coming up with a working test, though.

Thoughts, anyone? Thanks,
Jason





More information about the Catalyst-dev mailing list