2 # $Id: bop.t,v 1.6 2006-08-31 19:49:55 plobbes Exp $
6 use Test::More tests => 54;
8 BEGIN { use_ok("Business::OnlinePayment") or exit; }
10 { # fake test driver 1 (no submit method)
12 package Business::OnlinePayment::MOCK1;
15 use base qw(Business::OnlinePayment);
18 { # fake test driver 2 (with submit method)
20 package Business::OnlinePayment::MOCK2;
23 use base qw(Business::OnlinePayment);
24 sub submit { die("in processor submit\n"); }
27 my $package = "Business::OnlinePayment";
28 my @drivers = qw(MOCK1 MOCK2);
29 my $driver = $drivers[0];
31 # trick to make use() happy (called in Business::OnlinePayment->new)
32 foreach my $drv (@drivers) {
33 $INC{"Business/OnlinePayment/${drv}.pm"} = "testing";
37 can_ok( $package, qw(new) );
40 eval { $obj = $package->new(); };
41 like( $@, qr/^unspecified processor/, "new() without a processor croaks" );
43 eval { $obj = $package->new("__BOP BOGUS PROCESSOR__"); };
44 like( $@, qr/^unknown processor/,
45 "new() with an unknown processor croaks" );
47 $obj = $package->new($driver);
48 isa_ok( $obj, $package );
49 isa_ok( $obj, $package . "::" . $driver );
71 # new (via build_subs) automatically creates accessors for arguments
72 $obj = $package->new( $driver, "proc1" => "value1" );
73 can_ok( $package, "proc1" );
74 can_ok( $obj, "proc1" );
76 # new (via build_subs) automatically creates accessors for arguments
77 $obj = $package->new( $driver, qw(key1 v1 Key2 v2 -Key3 v3 --KEY4 v4) );
78 can_ok( $package, qw(key1 key2 key3 key4) );
79 can_ok( $obj, qw(key1 key2 key3 key4) );
81 # new makes all accessors lowercase and removes leading dash(es)
82 is( $obj->key1, "v1", "value of key1 (method key1) is v1" );
83 is( $obj->key2, "v2", "value of Key2 (method key2) is v2" );
84 is( $obj->key3, "v3", "value of -Key3 (method key3) is v3" );
85 is( $obj->key4, "v4", "value of --KEY4 (method key4) is v4" );
95 $obj = $package->new($driver);
96 can_ok( $package, qw(content) );
97 can_ok( $obj, qw(content) );
99 is( $obj->content, (), "default content is empty" );
101 my %data = qw(k1 v1 type test -k2 v2 K3 v3);
102 is_deeply( { $obj->content(%data) }, \%data, "content is set properly" );
103 is( $obj->transaction_type, "test", "content sets transaction_type" );
105 %data = ( type => undef );
106 is_deeply( { $obj->content(%data) }, \%data, "content with type=>undef" );
107 is( $obj->transaction_type, "test", "transaction_type not reset" );
111 my $obj = $package->new($driver);
112 can_ok( $package, qw(required_fields) );
113 can_ok( $obj, qw(required_fields) );
115 is( $obj->required_fields, 0, "no required fields" );
117 eval { $obj->required_fields("field1"); };
118 like( $@, qr/^missing required field/, "missing required_fields() croaks" );
122 my $obj = $package->new($driver);
123 can_ok( $package, qw(get_fields) );
124 can_ok( $obj, qw(get_fields) );
126 my %data = ( a => 1, b => 2, c => undef, d => 4 );
127 $obj->content(%data);
132 %get = map { $_ => $data{$_} } @want;
133 is_deeply( { $obj->get_fields(@want) },
134 \%get, "get_fields with defined vals" );
137 %get = map { defined $data{$_} ? ( $_ => $data{$_} ) : () } @want;
139 is_deeply( { $obj->get_fields(@want) },
140 \%get, "get_fields does not get fields with undef values" );
144 my $obj = $package->new($driver);
145 can_ok( $package, qw(remap_fields) );
146 can_ok( $obj, qw(remap_fields) );
148 my %data = ( a => 1, b => 2, c => undef, d => 4 );
149 $obj->content(%data);
151 my %map = ( a => "Aa", d => "Dd" );
152 my %get = ( a => 1, Aa => 1, b => 2, c => undef, d => 4, Dd => 4 );
154 $obj->remap_fields(%map);
155 is_deeply( { $obj->content }, \%get, "remap_fields" );
159 my $obj = $package->new($driver);
160 can_ok( $package, qw(submit) );
161 can_ok( $obj, qw(submit) );
163 eval { $obj->submit; };
164 like( $@, qr/^Processor subclass did not /, "missing submit() croaks" );
165 is( $obj->can("submit"), $package->can("submit"), "submit unchanged" );
167 my $mock2 = $package->new("MOCK2");
168 can_ok( $mock2, qw(submit) );
170 isnt( $mock2->can("submit"), $package->can("submit"), "submit changed" );
171 eval { $mock2->submit; };
172 like( $@, qr/^in processor submit/, "processor submit() is called" );
176 my $obj = $package->new($driver);
177 can_ok( $package, qw(dump_contents) );
178 can_ok( $obj, qw(dump_contents) );
184 $obj = $package->new($driver);
185 can_ok( $package, qw(build_subs) );
186 can_ok( $obj, qw(build_subs) );
188 # build_subs creates accessors for arguments
189 my %data = qw(key1 v1 Key2 v2 -Key3 v3 --KEY4 v4);
191 sort { lc( ( $a =~ /(\w+)/ )[0] ) cmp lc( ( $b =~ /(\w+)/ )[0] ) }
194 $obj->build_subs(@subs);
196 # perl does not allow dashes ("-") in subroutine names
197 foreach my $sub (@subs) {
198 if ( $sub !~ /^\w+/ ) {
199 is( ref $package->can($sub), "", "$package can NOT $sub" );
200 is( ref $obj->can($sub), "", ref($obj) . " can NOT $sub" );
203 can_ok( $package, $sub );
204 can_ok( $obj, $sub );
205 $obj->$sub( $data{$sub} );
206 is( $obj->$sub, $data{$sub}, "$sub accessor returns $data{$sub}" );