Business-GoCardless
view release on metacpan or search on metacpan
t/business/gocardless/webhook/v2.t view on Meta::CPAN
#!perl
use strict;
use warnings;
use Test::Most;
use Test::Deep;
use Test::Exception;
use JSON qw/ decode_json /;
use Business::GoCardless::Client;
use_ok( 'Business::GoCardless::Webhook::V2' );
isa_ok(
my $Webhook = Business::GoCardless::Webhook::V2->new(
client => Business::GoCardless::Client->new(
token => 'foo',
webhook_secret => 'bar',
),
json => _json_payload(),
_signature => 'd83ab95b082ac2d0154060fe63530723104d55249b00f1b49019859cbcd51078',
),
'Business::GoCardless::Webhook::V2'
);
can_ok(
$Webhook,
qw/
resource_type
action
/,
);
ok( !$Webhook->is_legacy,'! ->is_legacy' );
ok( my $events = $Webhook->events,'->events' );
cmp_deeply(
$events->[2],
bless( {
'action' => 'paid_out',
'client' => bless( {
'api_version' => 1,
'base_url' => 'https://gocardless.com',
'token' => 'foo',
'user_agent' => ignore(),
'webhook_secret' => 'bar'
}, 'Business::GoCardless::Client' ),
'created_at' => '2017-09-11T14:05:35.461Z',
'endpoint' => '/events/%s',
'id' => 'EV789',
'links' => {
'parent_event' => 'EV123',
'payment' => 'PM456',
'payout' => 'PO123'
},
'details' => {
'cause' => 'payment_paid_out',
'description' => 'The payment has been paid out by GoCardless.',
'origin' => 'gocardless'
},
'resource_type' => 'payments'
}, 'Business::GoCardless::Webhook::Event'
),
'more than one event'
);
$Webhook->signature( 'bad signature' );
throws_ok(
sub { $Webhook->json( _json_payload() ) },
'Business::GoCardless::Exception',
'->json checks signature',
);
ok( ! $Webhook->resources,' ... and clears resources if bad' );
isa_ok(
$Webhook = Business::GoCardless::Webhook::V2->new(
client => Business::GoCardless::Client->new(
token => 'foo',
webhook_secret => 'baz',
),
json => _json_payload_legacy(),
),
'Business::GoCardless::Webhook::V2'
);
ok( $Webhook->has_legacy_data,'->has_legacy_data' );
isa_ok( $Webhook = $Webhook->legacy_webhook,'Business::GoCardless::Webhook' );
is( $Webhook->resource_type,'bill','resource_type' );
ok( $Webhook->is_bill,'is_bill' );
ok( !$Webhook->is_subscription,'! is_subscription' );
ok( !$Webhook->is_pre_authorization,'! is_pre_authorization' );
is( $Webhook->action,'paid','action' );
ok( $Webhook->is_legacy,'->is_legacy' );
cmp_deeply(
[ $Webhook->resources ],
[ ( bless( {
'amount' => '20.0',
'amount_minus_fees' => '19.8',
'client' => ignore(),
'endpoint' => '/bills/%s',
'id' => ignore(),
'paid_at' => ignore(),
'source_id' => ignore(),
'source_type' => 'subscription',
'status' => 'paid',
'uri' => ignore(),
},'Business::GoCardless::Bill' ) ) x 2
],
'resources'
);
done_testing();
sub _json_payload {
my ( $signature ) = @_;
$signature //= 'd83ab95b082ac2d0154060fe63530723104d55249b00f1b49019859cbcd51078';
return qq!{
"events" : [
{
"action" : "paid",
"created_at" : "2017-09-11T14:05:35.414Z",
"details" : {
"cause" : "payout_paid",
"description" : "GoCardless has transferred the payout to the creditor's bank account.",
"origin" : "gocardless"
},
"id" : "EV123",
"links" : {
"payout" : "PO123"
},
"metadata" : {},
"resource_type" : "payouts"
},
{
"action" : "paid_out",
"created_at" : "2017-09-11T14:05:35.453Z",
"details" : {
"cause" : "payment_paid_out",
"description" : "The payment has been paid out by GoCardless.",
"origin" : "gocardless"
},
"id" : "EV456",
"links" : {
"parent_event" : "EV123",
"payment" : "PM123",
"payout" : "PO123"
},
"metadata" : {},
"resource_type" : "payments"
},
{
"action" : "paid_out",
"created_at" : "2017-09-11T14:05:35.461Z",
"details" : {
"cause" : "payment_paid_out",
"description" : "The payment has been paid out by GoCardless.",
"origin" : "gocardless"
( run in 2.587 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )