package Test::Business::CyberSource; use strict; use warnings; use namespace::autoclean; use Class::Load qw( load_class ); 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 'username' => $ENV{PERL_BUSINESS_CYBERSOURCE_USERNAME} ||'test' ; service 'password' => $ENV{PERL_BUSINESS_CYBERSOURCE_PASSWORD} || 'test' ; service production => 0; service object => ( class => 'Business::CyberSource::Client', lifecycle => 'Singleton', block => sub { my $svc = shift; if ( $svc->param('username') eq 'test' || $svc->param('password') 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 = load_class('Business::CyberSource::Client') ->new({ username => $svc->param('username'), password => $svc->param('password'), production => $svc->param('production'), }); return $client; }, dependencies => { username => depends_on('username'), password => depends_on('password'), production => depends_on('production'), }, ); }; 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 => 'somewhere'; service city => 'Houston'; service state => 'TX'; service country => 'US'; service postal_code => '77064'; service email => 'xenoterracide@gmail.com'; service ip => '192.168.100.2'; service currency => 'USD'; service holder => 'Caleb Cushing'; service security_code => '1111'; }; service card => ( class => 'Business::CyberSource::RequestPart::Card', dependencies => { security_code => depends_on('services/security_code'), holder => depends_on('services/holder'), }, parameters => { account_number => { isa => 'Str', default => '4111111111111111', }, expiration => { isa => 'HashRef', default => { month => 5, year => 2025, }, }, }, ); service bill_to => ( class => 'Business::CyberSource::RequestPart::BillTo', dependencies => { first_name => depends_on('services/first_name' ), last_name => depends_on('services/last_name' ), street => depends_on('services/street' ), city => depends_on('services/city' ), state => depends_on('services/state' ), postal_code => depends_on('services/postal_code'), email => depends_on('services/email' ), ip => depends_on('services/ip' ), country => depends_on('services/country' ), }, ); service purchase_totals => ( class => 'Business::CyberSource::RequestPart::PurchaseTotals', dependencies => { currency => depends_on('services/currency'), }, parameters => { total => { isa => 'Num', default => 3000.00, }, }, ); }; container request => as { service reference_code => ( block => sub { return 'test-' . time }, ); service authorization => ( class => 'Business::CyberSource::Request::Authorization', dependencies => { card => depends_on('/helper/card'), reference_code => depends_on('reference_code'), purchase_totals => depends_on('/helper/purchase_totals'), bill_to => depends_on('/helper/bill_to'), }, parameters => { card => { isa => 'Business::CyberSource::RequestPart::Card', optional => 1, }, purchase_totals => { isa => 'Business::CyberSource::RequestPart::PurchaseTotals', optional => 1, }, business_rules => { isa => 'Business::CyberSource::RequestPart::BusinessRules', optional => 1, }, }, ); }; }; } has '+name' => ( default => sub { __PACKAGE__ }, ); __PACKAGE__->meta->make_immutable; 1;