Fix starting the server, test still fucked however
[catagits/Test-WWW-Mechanize-Catalyst.git] / t / multi_content_type.t
1 #!perl
2 use strict;
3 use warnings;
4 use lib qw(lib t/lib);
5
6 my $PORT;
7
8 BEGIN {
9     $PORT = $ENV{TWMC_TEST_PORT} || 7357;
10 }
11
12 use Test::More;
13 use Test::Exception;
14
15 BEGIN {
16     diag(
17         "\n###################################################################\n",
18         "Starting an external Catalyst HTTP server on port $PORT\n",
19         "To change the port, please set the TWMC_TEST_PORT env variable.\n",
20         "(The server will be automatically shut-down right after the tests).\n",
21         "###################################################################\n"
22     );
23 }
24
25 # Let's catch interrupts to force the END block execution.
26 $SIG{INT} = sub { warn "INT:$$"; exit };
27
28 use_ok 'ExternalCatty';
29 my $pid;
30 ($pid, $PORT) = ExternalCatty->background($PORT);
31 $ENV{CATALYST_SERVER} ||= "http://localhost:$PORT";
32
33 use Test::WWW::Mechanize::Catalyst;
34 my $m = Test::WWW::Mechanize::Catalyst->new;
35
36 # Yeah, sorry - wait for the forked process to spin up...
37 sleep 10;
38
39 my $skip = 0;
40 TRY_CONNECT: {
41   eval { $m->get('/') };
42
43   if ($@ || $m->content =~ /Can't connect to \w+:$PORT/) {
44     $skip = $@ || $m->content;
45     diag $m;
46   }
47 }
48
49 SKIP: {
50   skip $skip, 9 if $skip;
51   lives_ok { $m->get_ok( '/', 'Get a multi Content-Type response' ) }
52   'Survive to a multi Content-Type sting';
53
54   is( $m->ct, 'text/html', 'Multi Content-Type Content-Type' );
55   $m->title_is( 'Root', 'Multi Content-Type title' );
56   $m->content_contains( "Hello, test \x{263A}!", 'Multi Content-Type body' );
57
58   # Test a redirect with a remote server now too.
59   $m->get_ok( '/hello' );
60   is($m->uri, "$ENV{CATALYST_SERVER}/");
61
62   $m->get_ok( '/host' );
63   $m->content_contains('Host: localhost:$PORT') or diag $m->content;
64
65 }
66
67 END {
68     if ( $pid && $pid != 0 ) {
69         kill 9, $pid;
70     }
71 }
72
73 done_testing;
74
75 1;
76