The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/env perl
use warnings;
use strict;
use Test::More;
use Business::CPI;
use Business::CPI::Base::Account;

my $cpi = Business::CPI->new(
    gateway      => 'Test',
    receiver_id  => 'receiver@andrewalker.net',
);

isa_ok($cpi, 'Business::CPI::Gateway::Test');

my $cart = $cpi->new_cart({
    buyer => {
        email              => 'buyer@andrewalker.net',
        name               => 'Mr. Buyer',
        address_street     => 'Street 1',
        address_number     => '25b',
        address_district   => 'My neighbourhood',
        address_complement => 'Apartment 05',
        address_city       => 'Happytown',
        address_state      => 'SP',
        address_country    => 'BR',
    },
    receivers => [
        {
            gateway_id => 'receiver1',
            percent_amount => 5,
        },
        {
            account => Business::CPI::Base::Account->new(gateway_id => 'receiver2', _gateway => $cpi),
            percent_amount => 5,
        },
    ],
});

$cart->add_item({
    id          => 1,
    description => 'Sample item',
    price       => 200,
    quantity    => 10,
});

ok(my $form = $cart->get_form_to_pay('pay123'), 'get form');
isa_ok($form, 'HTML::Element');
is( get_value_for($form, 'receiver_email'), 'receiver@andrewalker.net', 'form value receiver_email is correct' );
is( get_value_for($form, 'payment_id'),     'pay123',                   'form value payment_id is correct' );
is( get_value_for($form, 'buyer_name'),     'Mr. Buyer',                'form value buyer_name is correct' );
is( get_value_for($form, 'buyer_email'),    'buyer@andrewalker.net',    'form value buyer_email is correct' );
is( get_value_for($form, 'encoding'),       'UTF-8',                    'form value encoding is correct' );

is( get_value_for($form, 'item1_id'),        '1',                        'form value item1_id is correct' );
is( get_value_for($form, 'item1_desc'),      'Sample item',              'form value item1_desc is correct' );
is( get_value_for($form, 'item1_price'),     '200.00',                   'form value item1_price is correct' );
is( get_value_for($form, 'item1_qty'),       '10',                       'form value item1_qty is correct' );

is( get_value_for($form, 'receiver1_id'),      'receiver1',              'form value receiver1_id is correct' );
is( get_value_for($form, 'receiver1_percent'), '5.00',                   'form value receiver1_percent is correct' );

is( get_value_for($form, 'receiver2_id'),      'receiver2',              'form value receiver2_id is correct' );
is( get_value_for($form, 'receiver2_percent'), '5.00',                   'form value receiver2_percent is correct' );

done_testing;

sub get_value_for {
    my ($form, $name) = @_;
    return $form->look_down(_tag => 'input', name => $name )->attr('value');
}