Business-GoCardless

 view release on metacpan or  search on metacpan

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

    note( "Merchant" );

    $mock->mock( 'content',sub { _merchant_json() } );
    cmp_deeply(
        my $Merchant = $GoCardless->merchant,
        _merchant_obj(),
        '->merchant returns a Business::GoCardless::Merchant object',
    );

    my $i = 0;

    $mock->mock(
        'content',
        sub {
            # first time return a merchant object, next time a list of pre_auths
            $i++
                ? _payouts_json()
                : _merchant_json()
        }
    );

    my @payouts = $GoCardless->payouts;
    cmp_deeply(
        \@payouts,
        [ _payout_obj( { 'app_ids' => [ 'ABC' ] } ) ],
        '->payouts returns an array of Business::GoCardless::Payout objects'
    );
}

sub test_payout {

    my ( $GoCardless,$mock ) = @_;

    note( "Payout" );

    $mock->mock( 'content',sub { '{"payouts":'._payout_json() .'}' } );
    my $Payout = $GoCardless->payout( '0BKR1AZNJF' );

    cmp_deeply(
        $Payout,
        _payout_obj(),
        '->payout returns a Business::GoCardless::Payout object'
    );
}

sub test_pre_authorization {

    my ( $GoCardless,$mock ) = @_;

    note( "PreAuthorization" );
    like(
        my $new_pre_auth_url = $GoCardless->new_pre_authorization_url(
            max_amount         => 100,
            interval_length    => 10,
            interval_unit      => 'day',
            expires_at         => '2020-01-01',
            name               => "Test PreAuthorization",
            description        => "Test PreAuthorization for testing",
            interval_count     => 10,
            setup_fee          => 500,
            calendar_intervals => 0,
            redirect_uri       => "http://localhost/success",
            cancel_uri         => "http://localhost/cancel",
            state              => "id_9SX5G36",
            user               => {
                first_name     => "Lee",
            }
        ),
        qr!https://gocardless\.com/connect/pre_authorizations/new\?cancel_uri=http%3A%2F%2Flocalhost%2Fcancel&client_id=foo&nonce=.*?&pre_authorization%5Bcalendar_intervals%5D=0&pre_authorization%5Bdescription%5D=Test%20PreAuthorization%20for%20testi...
        '->new_pre_authorization_url returns a url'
    );

    $mock->mock( 'content',sub { _pre_auth_json() } );
    cmp_deeply(
        my $PreAuthorization = $GoCardless->confirm_resource(
            resource_id   => 'foo',
            resource_type => 'pre_authorization',
        ),
        _pre_auth_obj(),
        '->confirm_resource returns a Business::GoCardless::PreAuthorization object'
    );

    $mock->mock( 'content',sub { _bill_json() } );
    my $Bill = $PreAuthorization->bill( amount => 10 );

    cmp_deeply(
        $Bill,
        _bill_obj(),
        '->bill returns a Business::GoCardless::Bill object'
    );
    
    my $i = 0;

    $mock->mock(
        'content',
        sub {
            # first time return a merchant object, next time a list of pre_auths
            $i++
                ? '[' . _pre_auth_json() . ',' . _pre_auth_json() . ']'
                : _merchant_json()
        }
    );

    my @pre_auths = $GoCardless->pre_authorizations;

    cmp_deeply(
        \@pre_auths,
        [ _pre_auth_obj(),_pre_auth_obj() ],
        '->pre_authorizations returns an array of Business::GoCardless::PreAuthorization objects'
    );

    $mock->mock( 'content',sub { _pre_auth_json() } );
    $PreAuthorization = $GoCardless->pre_authorization( '123ABCD' );

    cmp_deeply(
        $PreAuthorization,
        _pre_auth_obj(),
        '->pre_authorization returns a Business::GoCardless::PreAuthorization object'
    );

    $mock->mock( 'content',sub { _pre_auth_json( 'cancelled' ) } );

    cmp_deeply(
        $PreAuthorization = $PreAuthorization->cancel,
        _pre_auth_obj( 'cancelled' ),
        '->cancel returns a Business::GoCardless::PreAuthorization object'
    );

    ok( $PreAuthorization->cancelled,'pre_authorization is cancelled' );



( run in 1.005 second using v1.01-cache-2.11-cpan-800906f7e73 )