Business-CyberSource

 view release on metacpan or  search on metacpan

t/lib/Test/Business/CyberSource.pm  view on Meta::CPAN

package Test::Business::CyberSource;
use strict;
use warnings;
use namespace::autoclean;
use Module::Runtime qw( use_module );

use Test::Requires 'Bread::Board';
use Test::More;

use Moose;

extends 'Bread::Board::Container';

sub BUILD {
    my $self = shift;
    return container $self => as {
        container client => as {
            service 'user' => $ENV{PERL_BUSINESS_CYBERSOURCE_USERNAME}
              || 'test';
            service 'pass' => $ENV{PERL_BUSINESS_CYBERSOURCE_PASSWORD}
              || 'test';
            service test   => 1;
            service object => (
                class     => 'Business::CyberSource::Client',
                lifecycle => 'Singleton',
                block     => sub {
                    my $svc = shift;

                    if (   $svc->param('user') eq 'test'
                        || $svc->param('pass') eq 'test' )
                    {
                        plan skip_all => 'Unable to send with fake '
                          . 'credentials. Set both '
                          . 'PERL_BUSINESS_CYBERSOURCE_USERNAME ' . 'and '
                          . 'PERL_BUSINESS_CYBERSOURCE_PASSWORD '
                          . 'in the environment';

                        return;
                    }

                    my $client =
                      use_module('Business::CyberSource::Client')->new(
                        {
                            user => $svc->param('user'),
                            pass => $svc->param('pass'),
                            test => $svc->param('test'),
                        }
                      );

                    return $client;
                },
                dependencies => {
                    user => depends_on('user'),
                    pass => depends_on('pass'),
                    test => depends_on('test'),
                },
            );
        };

        container card => as {
            service holder        => 'Caleb Cushing';
            service security_code => '1111';
            service object        => (
                class        => 'Business::CyberSource::RequestPart::Card',
                dependencies => {
                    security_code => depends_on('../helper/security_code'),
                    holder        => depends_on('../helper/holder'),
                },
                parameters => {
                    account_number => {
                        isa     => 'Str',
                        default => '4111111111111111',
                    },
                    expiration => {
                        isa     => 'HashRef',
                        default => {
                            month => 5,
                            year  => 2025,
                        },
                    },
                },
            );
        };

        container helper => as {
            container services => as {
                service first_name    => 'Caleb';
                service last_name     => 'Cushing';
                service street        => '2104 E Anderson Ln';
                service city          => 'Austin';
                service state         => 'TX';
                service country       => 'US';
                service postal_code   => '78752';



( run in 0.740 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )