Business-GoCardless
view release on metacpan or search on metacpan
t/business/gocardless.t view on Meta::CPAN
#!perl
use strict;
use warnings;
use Test::Most;
use Test::Deep;
use Test::MockObject;
use Test::Exception;
use JSON;
# soft requirements of Business::GoCardless::Client
# "soft" in that they're not required => 1 but must
# be set in the ENV var if not passed to constructor
$ENV{GOCARDLESS_APP_ID} = 'foo';
$ENV{GOCARDLESS_APP_SECRET} = 'bar';
$ENV{GOCARDLESS_MERCHANT_ID} = 'baz';
# this makes Business::GoCardless::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{GOCARDLESS_DEV_TESTING} = 1;
use_ok( 'Business::GoCardless' );
isa_ok(
my $GoCardless = Business::GoCardless->new(
token => 'MvYX0i6snRh/1PXfPoc6',
merchant_id => 'MID',
),
'Business::GoCardless'
);
can_ok(
$GoCardless,
qw/
token
client_details
client
bill
/,
);
cmp_deeply(
$GoCardless->client_details,
{ api_version => 1 },
'client_details'
);
isa_ok( $GoCardless->client,'Business::GoCardless::Client' );
# monkey patching LWP 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( 'is_success',sub { 1 } );
$mock->mock( 'header',sub {} );
*LWP::UserAgent::request = sub { $mock };
test_bill( $GoCardless,$mock );
test_merchant( $GoCardless,$mock );
test_payout( $GoCardless,$mock );
test_pre_authorization( $GoCardless,$mock );
test_subscription( $GoCardless,$mock );
test_user( $GoCardless,$mock );
test_webhook( $GoCardless,$mock );
done_testing();
sub test_bill {
my ( $GoCardless,$mock ) = @_;
note( "Bill" );
like(
my $new_bill_url = $GoCardless->new_bill_url(
amount => 100,
name => "Test Bill",
description => "Test Bill for testing",
redirect_uri => "http://localhost/success",
cancel_uri => "http://localhost/cancel",
state => "id_9SX5G36",
user => {
first_name => "Lee",
}
),
qr!https://gocardless\.com/connect/bills/new\?bill%5Bamount%5D=100&bill%5Bdescription%5D=Test%20Bill%20for%20testing&bill%5Bmerchant_id%5D=baz&bill%5Bname%5D=Test%20Bill&bill%5Buser%5D%5Bfirst_name%5D=Lee&cancel_uri=http%3A%2F%2Flocalhost%2Fc...
'->new_bill_url returns a url'
);
$ENV{GOCARDLESS_DEV_TESTING} = 0;
throws_ok(
sub { $GoCardless->confirm_resource( signature => 'foo' ) },
'Business::GoCardless::Exception',
'->confirm_resource checks signature',
);
like(
$@->message,
qr/Invalid signature for confirm_resource/,
' ... and throws expected error',
);
$ENV{GOCARDLESS_DEV_TESTING} = 1;
$ENV{GOCARDLESS_SKIP_SIG_CHECK} = 1;
$mock->mock( 'content',sub { _bill_json() } );
cmp_deeply(
my $Bill = $GoCardless->confirm_resource(
resource_id => 'foo',
( run in 2.836 seconds using v1.01-cache-2.11-cpan-2398b32b56e )