Business-Monzo
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
t/business/monzo.t view on Meta::CPAN
#!perl
use strict;
use warnings;
use Test::Most;
use Test::Deep;
use Test::MockObject;
use Test::Exception;
use Mojo::JSON qw/ decode_json /;
# this makes Business::Monzo::Exception show a stack
# trace when any error is thrown so i don't have to keep
# wrapping stuff in this test in evals to debug
$ENV{MONZO_DEBUG} = 0;
use_ok( 'Business::Monzo' );
isa_ok(
my $Monzo = Business::Monzo->new(
token => 'MvYX0i6snRh/1PXfPoc6',
),
'Business::Monzo'
);
can_ok(
$Monzo,
qw/
token
api_url
client
transactions
transaction
accounts
/,
);
isa_ok( $Monzo->client,'Business::Monzo::Client' );
# monkey patching Mojo::UserAgent here to make this test work without
# having to actually hit the endpoints or use credentials
no warnings 'redefine';
no warnings 'once';
my $mock = Test::MockObject->new;
$mock->mock( 'success',sub { 1 } );
$mock->mock( 'headers',sub { $mock } );
$mock->mock( 'result',sub { $mock } );
$mock->mock( 'is_success',sub { $mock } );
$mock->mock( 'message',sub { $mock } );
$mock->mock( 'code',sub { $mock } );
$mock->mock( 'json',sub { $mock } );
*Mojo::UserAgent::post = sub { $mock };
*Mojo::UserAgent::put = sub { $mock };
*Mojo::UserAgent::patch = sub { $mock };
*Mojo::UserAgent::get = sub { $mock };
my $proxy_mock = Test::MockObject->new;
$proxy_mock->mock( 'detect',sub { 1 } );
*Mojo::UserAgent::proxy = sub { $proxy_mock };
test_transaction( $Monzo,$mock,$proxy_mock );
test_account( $Monzo,$mock,$proxy_mock );
test_balance( $Monzo,$mock,$proxy_mock );
test_attachment( $Monzo,$mock,$proxy_mock );
*Business::Monzo::Client::_api_request = sub { shift; return shift };
is( $Monzo->client->api_get,'GET','api_get' );
is( $Monzo->client->api_post,'POST','api_post' );
is( $Monzo->client->api_delete,'DELETE','api_delete' );
is( $Monzo->client->api_patch,'PATCH','api_patch' );
done_testing();
sub test_transaction {
my ( $Monzo,$mock,$proxy_mock ) = @_;
note( "Transaction" );
$mock->mock( 'json',sub { _transaction_json() } );
isa_ok(
my $Transaction = $Monzo->transaction( id => 1 ),
'Business::Monzo::Transaction'
);
$mock->mock( 'json',sub { _transactions_json() } );
isa_ok(
$Transaction = ( $Monzo->transactions( account_id => 1 ) )[1],
'Business::Monzo::Transaction'
);
}
sub test_account {
my ( $Monzo,$mock,$proxy_mock ) = @_;
note( "Account" );
$mock->mock( 'json',sub { _accounts_json() } );
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.905 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )