Business-GoCardless
view release on metacpan or search on metacpan
t/business/gocardless/pro.t view on Meta::CPAN
use utf8;
use feature qw/ postderef /;
use Test::Most;
no warnings qw/ experimental::postderef /;
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_WEBHOOK_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::Pro' );
isa_ok(
my $GoCardless = Business::GoCardless::Pro->new(
token => 'MvYX0i6snRh/1PXfPoc6',
),
'Business::GoCardless::Pro'
);
can_ok(
$GoCardless,
qw/
token
client_details
client
bill
payment
payments
subscription
pre_authorizations
customer
customers
new_bill_url
new_pre_authorization_url
new_subscription_url
confirm_resource
users
webhooks
/,
);
cmp_deeply(
$GoCardless->client_details,
{ api_version => 2 },
'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_payment( $GoCardless,$mock );
test_payout( $GoCardless,$mock );
test_pre_authorization( $GoCardless,$mock );
test_subscription( $GoCardless,$mock );
test_user( $GoCardless,$mock );
test_webhook( $GoCardless,$mock );
test_webhooks( $GoCardless,$mock );
done_testing();
sub test_payment {
my ( $GoCardless,$mock ) = @_;
$mock->mock(
'content',
sub { '{"payments":{' . _payment_json_internal() . '}}' }
);
isa_ok(
my $Payment = $GoCardless->create_payment,
'Business::GoCardless::Payment',
'->create_payment',
);
$mock->mock( 'content',sub { _redirect_flow_json() } );
note( "Bill" );
like(
my $new_bill_url = $GoCardless->new_bill_url(
session_token => 'foo',
description => "Test Bill",
success_redirect_url => "http://localhost:3000/rflow/confirm/bill/100/EUR",
),
qr!http://pay\.gocardless\.dev/flow/RE123!,
'->new_bill_url returns a url'
);
$ENV{GOCARDLESS_DEV_TESTING} = 1;
my $i = 0;
$mock->mock(
'content',
sub {
$i++ < 2
? _redirect_flow_json()
: _payment_json()
}
);
cmp_deeply(
my $Bill = $GoCardless->confirm_resource(
( run in 1.682 second using v1.01-cache-2.11-cpan-df04353d9ac )