#!/usr/bin/env perl use strict; use warnings; use Test::More; # setup library path use FindBin qw($Bin); use lib "$Bin/lib"; BEGIN { plan skip_all => 'this test needs Test::WWW::Mechanize::Catalyst' unless eval "require Test::WWW::Mechanize::Catalyst"; plan skip_all => 'this test needs Moose' unless eval "require Moose"; plan tests => 47; } # make sure testapp works use ok 'TestApp'; # a live test against TestApp, the test application use Test::WWW::Mechanize::Catalyst 'TestApp'; my $mech = Test::WWW::Mechanize::Catalyst->new; $mech->get_ok('http://localhost/', 'get main page'); $mech->content_like(qr/it works/i, 'see if it has our text'); # adaptor { $mech->get_ok('http://localhost/adaptor/isa', 'get the class name'); $mech->content_like(qr/^TestApp::Backend::SomeClass$/, 'adapted class is itself'); } { $mech->get_ok('http://localhost/adaptor/id_twice', 'get id_twice'); my ($a, $b) = split /\|/, $mech->content; is $a, $b, 'same instance both times'; $mech->get_ok('http://localhost/adaptor/id', 'get id'); is $mech->content, $a, 'same instance for different request'; } { $mech->get_ok('http://localhost/adaptor/foo', 'get foo'); $mech->content_like(qr/^bar$/, 'got foo = bar'); } { $mech->get_ok('http://localhost/adaptor/count', 'get count'); my $a = $mech->content; $mech->get_ok('http://localhost/adaptor/count', 'get count (+1)'); my $b = $mech->content; is $b, $a+1, 'same instance across requests'; } { $mech->get_ok('http://localhost/adaptor/count_twice', 'get count_twice'); my ($a, $b) = split/\|/, $mech->content; is $a, 3, '3 count for a'; is $b, 4, '4 count for b'; } # factory { $mech->get_ok('http://localhost/factory/isa', 'get the class name'); $mech->content_like(qr/^TestApp::Backend::SomeClass$/, 'adapted class is itself'); } { $mech->get_ok('http://localhost/factory/id_twice', 'get id_twice'); my ($a, $b) = split /\|/, $mech->content; is $b, $a+1, 'different instance both times'; $mech->get_ok('http://localhost/factory/id', 'get id'); is $mech->content, $b+1, 'same instance for different request too'; } { $mech->get_ok('http://localhost/factory/foo', 'get foo'); $mech->content_like(qr/^baz$/, 'got foo = baz'); } { $mech->get_ok('http://localhost/factory/count', 'get count'); my $a = $mech->content; $mech->get_ok('http://localhost/factory/count', 'get count (+1)'); my $b = $mech->content; is $a, 1, '1st request for a'; is $b, 1, '1st request for b too'; } { $mech->get_ok('http://localhost/factory/count_twice', 'get count_twice'); my ($a, $b) = split/\|/, $mech->content; is $a, 1, '1 count for a'; is $b, 1, '1 count for b too'; } # per_request { $mech->get_ok('http://localhost/perrequest/isa', 'get the class name'); $mech->content_like(qr/^TestApp::Backend::SomeClass$/, 'adapted class is itself'); } { $mech->get_ok('http://localhost/perrequest/id_twice', 'get id_twice'); my ($a, $b) = split /\|/, $mech->content; is $a, $b, 'same instance both times'; $mech->get_ok('http://localhost/perrequest/id', 'get id'); is $mech->content, $a+1, 'different instance for different request'; } { $mech->get_ok('http://localhost/perrequest/foo', 'get foo'); $mech->content_like(qr/^quux$/, 'got foo = quux'); } { $mech->get_ok('http://localhost/perrequest/count', 'get count'); my $a = $mech->content; $mech->get_ok('http://localhost/perrequest/count', 'get count (+1)'); my $b = $mech->content; is $a, 1, '1st request for a'; is $b, 1, '1st request for b too'; } { $mech->get_ok('http://localhost/perrequest/count_twice', 'get count_twice'); my ($a, $b) = split/\|/, $mech->content; is $a, 1, '1 count for a'; is $b, 2, '2 count for b'; }