Business-GoCardless

 view release on metacpan or  search on metacpan

t/business/gocardless/billingrequest.t  view on Meta::CPAN

        status
        subscription_request

        collect_customer_details
        collect_bank_account
        confirm_payer_details
        fulfil
        cancel
        notify
        fallback
        choose_currency
        select_institution

        pending
        ready_to_fulfil
        fulfilling
        fulfilled
        cancelled

        customer_id
        instalment_schedule_id
        mandate_id
        payment_id
        subscription_id

        create_flow
        institutions
    /,
);

is( $BillingRequest->endpoint,'/billing_requests/%s','endpoint' );
is( $BillingRequest->uri,'https://api.gocardless.com/billing_requests/BRQ123','->uri' );

note( "status checks" );

ok( ! $BillingRequest->pending,'! ->pending when no status' );

my @statuses = qw/ pending ready_to_fulfil fulfilling fulfilled cancelled /;

foreach my $status ( @statuses ) {
    $BillingRequest->status( $status );
    ok( $BillingRequest->$status,"->$status" );
    ok( ! $BillingRequest->$_,"! ->$_ when $status" )
        for grep { $_ ne $status } @statuses;
}

note( "links" );

is( $BillingRequest->customer_id,'CU123','->customer_id' );
is( $BillingRequest->instalment_schedule_id,'IS123','->instalment_schedule_id' );
is( $BillingRequest->mandate_id,'MD123','->mandate_id' );
is( $BillingRequest->payment_id,'PM123','->payment_id' );
is( $BillingRequest->subscription_id,'SB123','->subscription_id' );

$BillingRequest->links( undef );
ok( ! $BillingRequest->customer_id,'! ->customer_id when no links' );

note( "operations" );

# 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;
my $request;
$mock->mock( 'is_success',sub { 1 } );
$mock->mock( 'header',sub {} );
*LWP::UserAgent::request = sub { $request = $_[1]; $mock };

$mock->mock( 'content',sub { '{"billing_requests":{"id":"BRQ123","status":"after collect_customer_details"}}' } );

isa_ok(
    $BillingRequest->collect_customer_details( customer => { email => 'lee@example.com' },customer_billing_detail => { country_code => 'GB' } ),
    'Business::GoCardless::BillingRequest',
    '->collect_customer_details'
);
is( $request->method,'POST','->collect_customer_details POSTs' );
like( $request->uri,qr!/billing_requests/BRQ123/actions/collect_customer_details$!,'->collect_customer_details request path' );
cmp_deeply(
    JSON->new->decode( $request->content ),
    { data => { customer => { email => 'lee@example.com' },customer_billing_detail => { country_code => 'GB' } } },
    '->collect_customer_details request body'
);
is( $BillingRequest->status,'after collect_customer_details','->collect_customer_details updates the object' );

$mock->mock( 'content',sub { '{"billing_requests":{"id":"BRQ123","status":"after collect_bank_account"}}' } );

isa_ok(
    $BillingRequest->collect_bank_account( account_holder_name => 'Lee Johnson',iban => 'GB60BARC20000055779911' ),
    'Business::GoCardless::BillingRequest',
    '->collect_bank_account'
);
is( $request->method,'POST','->collect_bank_account POSTs' );
like( $request->uri,qr!/billing_requests/BRQ123/actions/collect_bank_account$!,'->collect_bank_account request path' );
cmp_deeply(
    JSON->new->decode( $request->content ),
    { data => { account_holder_name => 'Lee Johnson',iban => 'GB60BARC20000055779911' } },
    '->collect_bank_account request body'
);
is( $BillingRequest->status,'after collect_bank_account','->collect_bank_account updates the object' );

$mock->mock( 'content',sub { '{"billing_requests":{"id":"BRQ123","status":"after confirm_payer_details"}}' } );

isa_ok(
    $BillingRequest->confirm_payer_details,
    'Business::GoCardless::BillingRequest',
    '->confirm_payer_details'
);
is( $request->method,'POST','->confirm_payer_details POSTs' );
like( $request->uri,qr!/billing_requests/BRQ123/actions/confirm_payer_details$!,'->confirm_payer_details request path' );
ok( ! length( $request->content ),'->confirm_payer_details has no request body' );
is( $BillingRequest->status,'after confirm_payer_details','->confirm_payer_details updates the object' );

$mock->mock( 'content',sub { '{"billing_requests":{"id":"BRQ123","status":"after fulfil"}}' } );

isa_ok(
    $BillingRequest->fulfil,
    'Business::GoCardless::BillingRequest',
    '->fulfil'
);
is( $request->method,'POST','->fulfil POSTs' );



( run in 0.969 second using v1.01-cache-2.11-cpan-3f962061493 )