2 # $Id: bop.t,v 1.2 2006-08-30 18:29:59 plobbes Exp $
6 use Test::More tests => 49;
8 BEGIN { use_ok("Business::OnlinePayment") or exit; }
10 { # fake test driver 1
12 package Business::OnlinePayment::MOCK1;
15 use base qw(Business::OnlinePayment);
18 my $package = "Business::OnlinePayment";
21 # trick to make use() happy (called in Business::OnlinePayment->new)
22 $INC{"Business/OnlinePayment/${driver}.pm"} = "testing";
25 can_ok( $package, qw(new) );
28 eval { $obj = $package->new(); };
29 like( $@, qr/^unspecified processor/, "new() without a processor croaks" );
31 eval { $obj = $package->new("__BOP BOGUS PROCESSOR__"); };
32 like( $@, qr/^unknown processor/,
33 "new() with an unknown processor croaks" );
35 $obj = $package->new($driver);
36 isa_ok( $obj, $package );
37 isa_ok( $obj, $package . "::" . $driver );
59 # new (via build_subs) automatically creates accessors for arguments
60 $obj = $package->new( $driver, "proc1" => "value1" );
61 can_ok( $package, "proc1" );
62 can_ok( $obj, "proc1" );
64 # new (via build_subs) automatically creates accessors for arguments
65 $obj = $package->new( $driver, qw(key1 v1 Key2 v2 -Key3 v3 --KEY4 v4) );
66 can_ok( $package, qw(key1 key2 key3 key4) );
67 can_ok( $obj, qw(key1 key2 key3 key4) );
69 # new makes all accessors lowercase and removes leading dash(es)
70 is( $obj->key1, "v1", "value of key1 (method key1) is v1" );
71 is( $obj->key2, "v2", "value of Key2 (method key2) is v2" );
72 is( $obj->key3, "v3", "value of -Key3 (method key3) is v3" );
73 is( $obj->key4, "v4", "value of --KEY4 (method key4) is v4" );
83 $obj = $package->new($driver);
84 can_ok( $package, qw(content) );
85 can_ok( $obj, qw(content) );
87 is( $obj->content, (), "default content is empty" );
89 my %data = qw(k1 v1 type test -k2 v2 K3 v3);
90 is_deeply( { $obj->content(%data) }, \%data, "content is set properly" );
91 is( $obj->transaction_type, "test", "content sets transaction_type" );
93 %data = ( type => undef );
94 is_deeply( { $obj->content(%data) }, \%data, "content with type=>undef" );
95 is( $obj->transaction_type, "test", "transaction_type not reset" );
99 my $obj = $package->new($driver);
100 can_ok( $package, qw(required_fields) );
101 can_ok( $obj, qw(required_fields) );
103 is( $obj->required_fields, undef, "no required fields" );
105 eval { $obj->required_fields("field1"); };
106 like( $@, qr/^missing required field/, "missing required_fields() croaks" );
110 my $obj = $package->new($driver);
111 can_ok( $package, qw(get_fields) );
112 can_ok( $obj, qw(get_fields) );
114 my %data = ( a => 1, b => 2, c => undef, d => 4 );
115 $obj->content(%data);
120 %get = map { $_ => $data{$_} } @want;
121 is_deeply( { $obj->get_fields(@want) },
122 \%get, "get_fields with defined vals" );
125 %get = map { defined $data{$_} ? ( $_ => $data{$_} ) : () } @want;
127 is_deeply( { $obj->get_fields(@want) },
128 \%get, "get_fields does not get fields with undef values" );
132 my $obj = $package->new($driver);
133 can_ok( $package, qw(remap_fields) );
134 can_ok( $obj, qw(remap_fields) );
136 my %data = ( a => 1, b => 2, c => undef, d => 4 );
137 $obj->content(%data);
139 my %map = ( a => "Aa", d => "Dd" );
140 my %get = ( a => 1, Aa => 1, b => 2, c => undef, d => 4, Dd => 4 );
142 $obj->remap_fields(%map);
143 is_deeply( { $obj->content }, \%get, "remap_fields" );
147 my $obj = $package->new($driver);
148 can_ok( $package, qw(submit) );
149 can_ok( $obj, qw(submit) );
152 # eval { $obj->submit; };
153 # like( $@, qr/^Processor subclass did not /, "missing submit() croaks" );
154 #Tests turned off due to bug:
155 # Deep recursion on anonymous subroutine
156 # at .../Business/OnlinePayment.pm line 110.
157 # Deep recursion on subroutine "Business::OnlinePayment::_pre_submit"
158 # at .../Business/OnlinePayment.pm line 74.
162 my $obj = $package->new($driver);
163 can_ok( $package, qw(dump_contents) );
164 can_ok( $obj, qw(dump_contents) );
170 $obj = $package->new($driver);
171 can_ok( $package, qw(build_subs) );
172 can_ok( $obj, qw(build_subs) );
174 # build_subs creates accessors for arguments
175 my %data = qw(key1 v1 Key2 v2 -Key3 v3 --KEY4 v4);
177 sort { lc( ( $a =~ /(\w+)/ )[0] ) cmp lc( ( $b =~ /(\w+)/ )[0] ) }
180 $obj->build_subs(@subs);
182 # perl does not allow dashes ("-") in subroutine names
183 foreach my $sub (@subs) {
184 if ( $sub !~ /^\w+/ ) {
185 is( ref $package->can($sub), "", "$package can NOT $sub" );
186 is( ref $obj->can($sub), "", ref($obj) . " can NOT $sub" );
189 can_ok( $package, $sub );
190 can_ok( $obj, $sub );
191 $obj->$sub( $data{$sub} );
192 is( $obj->$sub, $data{$sub}, "$sub accessor returns $data{$sub}" );