package Test::MooseX::UserAgent; use strict; use warnings; use base 'Test::Class'; use Test::Exception; use Test::More; use Cache::MemoryCache; { package Test::UserAgent; use Moose; with qw/MooseX::UserAgent/; has useragent_conf => ( isa => 'HashRef', is => 'rw', default => sub { return { name => 'Mozilla/5.0 (compatible; LWP; RTGI; http://rtgi.fr/)', mail => 'bot@rtgi.fr', timeout => 30, cache => { use_cache => 0, }, max_size => 3000000, }; } ); 1; } { package Test::UserAgent::Async; use Moose; with qw/MooseX::UserAgent::Async/; has useragent_conf => ( isa => 'HashRef', is => 'rw', default => sub { return { name => 'Mozilla/5.0 (compatible; Async; RTGI; http://rtgi.fr/)', mail => 'bot@rtgi.fr', timeout => 30, cache => { use_cache => 0, }, max_size => 3000000, }; } ); 1; } sub cache { my $cache = new Cache::MemoryCache( { 'namespace' => 'testua', 'default_expires_in' => 600 } ); return $cache; } my @ua_roles = (qw/Test::UserAgent Test::UserAgent::Async/); sub fetch : Tests(14) { my $test = shift; my $url = 'http://lumberjaph.net/blog'; foreach my $ua (@ua_roles) { can_ok $ua, 'fetch'; ok my $obj = $ua->new(), '... object is created'; ok my $res = $obj->fetch($url), '... fetch url'; is $res->code, "200", "... fetch is a success"; like $res->content, qr/lumberjaph/, "... and content is good"; # test with cache $obj = $ua->new( useragent_conf => { name => 'Mozilla/5.0 (compatible; Async; RTGI; http://rtgi.fr/)', cache => { use_cache => 1, namespace => 'testua', } }, ua_cache => $test->cache, ); $res = $obj->fetch($url); is $res->code, "200", "... fetch is a success"; # now data should be in cache my $ref = $obj->ua_cache->get($url); ok defined $ref, "... url is now in cache"; } } #sub get_content : Tests(8) { #my $test = shift; #foreach my $ua (@ua_roles) { #can_ok $ua, 'get_content'; #ok my $obj = $ua->new(), ' ... object is created'; #my $url = 'http://google.com'; #my $res = $obj->fetch($url); #is $res->code, "200", "... fetch is a success"; #my $content = $obj->get_content($res); #like $content, qr/google/, "... and content is good"; #} #} 1;