The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More;
use Data::Dumper;

eval "use Test::MockObject";

if($@) {
	plan skip_all => "Test::MockObject required for these tests" if $@;
}
else {
	plan tests => 4
}

my $ua = Test::MockObject->new();
$ua->fake_module( 'LWP::UserAgent',
	agent => sub { return 1; } 
);
my $response = Test::MockObject->new();
$response->fake_module( 'LWP::Response',
	yippie => sub { return 1; },
);

$ua->fake_new( 'LWP::UserAgent' );
$ua->set_true( 'agent' );
$ua->mock('post',
	sub {
		return $response;
	}
);

use_ok( 'WebService::Linode' );

my $expected;
my $api = WebService::Linode->new(apikey => 123, nowarn=>1);

isa_ok($api, 'WebService::Linode');

$response->set_always( 'content', scalar(<DATA>));
$expected = eval scalar(<DATA>);
is_deeply($api->domain_list(), $expected, 'domain_list');

$response->set_always( 'content', scalar(<DATA>));
$expected = eval scalar(<DATA>);
is_deeply($api->domain_list(domainid=>5117), $expected, 'domain_list(domainid=>5117)');

#TODO more tests!
#TODO check the requests, not just that returned data propperly handled

1;

__DATA__
{"ERRORARRAY":[],"DATA":[{"TTL_SEC":0,"REFRESH_SEC":0,"DOMAIN":"apitest.com","DOMAINID":5118,"TYPE":"master","RETRY_SEC":0,"SOA_EMAIL":"caker@linode.com","STATUS":1}],"HTTPRESULT":200.0,"REQUESTSTATUS":0.0}
[{'ttl_sec'=>0,'domain'=>'apitest.com','status'=>1,'retry_sec'=>0,'soa_email'=>'caker@linode.com','refresh_sec'=>0,'type'=>'master','domainid'=>5118}];
{"ERRORARRAY":[],"DATA":{"TTL_SEC":0,"REFRESH_SEC":0,"DOMAIN":"bar.com","DOMAINID":5117,"TYPE":"master","RETRY_SEC":0,"SOA_EMAIL":"caker@linode.com","STATUS":1},"HTTPRESULT":200.0,"REQUESTSTATUS":0.0}
{'ttl_sec'=>0,'domain'=>'bar.com','status'=>1,'retry_sec'=>0,'soa_email'=>'caker@linode.com','refresh_sec'=>0,'type'=>'master','domainid'=>5117};