my
$client
= WebService::Shutterstock::Client->new;
my
$customer
= WebService::Shutterstock::Customer->new(
auth_info
=> {
auth_token
=> 123,
username
=>
'abc'
},
client
=>
$client
);
isa_ok(
$customer
,
'WebService::Shutterstock::Customer'
);
can_ok
$customer
,
'subscriptions'
;
{
my
$guard
= Test::MockModule->new(
'REST::Client'
);
$guard
->mock(
'GET'
,
sub
{
my
(
$self
,
$url
) =
@_
;
like
$url
,
qr'/customers/abc/subscriptions.json\?'
,
'correct URL'
;
like
$url
,
qr{auth_token=123}
,
'includes auth_token'
;
return
$self
->response(
response(
200,
'[{"subscription_id":1,"unix_expiration_time":0,"license":"premier"},{"subscription_id":2,"unix_expiration_time":0,"license":"premier_digital","sizes":{"medium_jpg":{"format":"jpg","name":"medium"}}}]'
)
);
});
my
$subscriptions
=
$customer
->subscriptions;
is
@$subscriptions
, 2,
'has subscriptions'
;
isa_ok
$subscriptions
->[0],
'WebService::Shutterstock::Subscription'
;
is
$subscriptions
->[0]->id, 1,
'has correct data'
;
ok
$subscriptions
->[0]->is_expired,
'is_expired'
;
ok !
$subscriptions
->[0]->is_active,
'is_active'
;
is
$customer
->subscription(
license
=>
'premier_digital'
)->id, 2,
'license lookup for subscription'
;
is
$customer
->find_subscriptions(
license
=>
qr{^premier}
), 2,
'all premier licenses returned'
;
is
$customer
->find_subscriptions(
license
=>
sub
{ 0 }), 0,
'callback filter'
;
ok !
eval
{
$customer
->find_subscriptions(
bogus
=>
'blah'
); 1},
'dies OK'
;
like $@,
qr{bogus}
,
'errors informatively'
;
}
done_testing;
sub
response {
@_
= [
@_
]
unless
ref
$_
[0] eq
'ARRAY'
;
my
$code
=
$_
[0]->[0];
my
$data
=
$_
[0]->[1];
my
$method
=
$_
[1]->[0] ||
'GET'
;
my
$uri
=
$_
[1]->[1] ||
'/'
;
my
$response
= HTTP::Response->new(
$code
,
undef
, [
'Content-Type'
=>
'application/json'
],
$data
);
$response
->request(HTTP::Request->new(
$method
,
$uri
));
return
$response
;
}