File Coverage

blib/lib/Business/OnlinePayment/Mock.pm
Criterion Covered Total %
statement 21 46 45.6
branch 1 16 6.2
condition n/a
subroutine 8 10 80.0
pod 4 4 100.0
total 34 76 44.7


line stmt bran cond sub pod time code
1             package Business::OnlinePayment::Mock;
2 4     4   15821 use strict;
  4         10  
  4         118  
3 4     4   22 use warnings;
  4         8  
  4         99  
4              
5              
6              
7 4     4   506 use Business::OnlinePayment;
  4         3540  
  4         101  
8 4     4   1796 use Business::OnlinePayment::HTTPS;
  4         87165  
  4         164  
9 4     4   1704 use parent qw(Business::OnlinePayment::HTTPS);
  4         1130  
  4         26  
10             our $me = 'Business::OnlinePayment::Mock';
11              
12             our $VERSION = '0.008'; # VERSION
13             # PODNAME: Business::OnlinePayment::Mock
14             # ABSTRACT: A backend for mocking fake results for test cards
15              
16             our $mock_responses;
17              
18             our $default_mock = {
19             error_message => 'Declined',
20             is_success => 0,
21             error_code => 100,
22             order_number => sub { time },
23             };
24              
25             our $default_approved_mock = {
26             error_message => 'Approved',
27             is_success => 1,
28             error_code => 0,
29             order_number => sub { time },
30             };
31              
32             sub _info {
33             return {
34 4     4   39 info_compat => '0.01',
35             gateway_name => 'Mock',
36             gateway_url => 'http://www.example.com',
37             module_version => $VERSION,
38             supported_types => ['CC'],
39             supported_actions => {
40             CC => [
41              
42             # 'Tokenize', # TODO
43             'Normal Authorization',
44             'Post Authorization',
45             'Authorization Only',
46             'Credit',
47             'Void',
48             'Auth Reversal',
49             'PreAuth',
50             'Mark Token Used', # very few bop modules use this
51             ],
52             },
53             };
54             }
55              
56              
57             sub set_default_mock {
58 1     1 1 11848 my ($self, $default) = @_;
59              
60 1         7 $default_mock = $default;
61             }
62              
63              
64             sub set_mock_response {
65 3     3 1 17675 my ($self, $response, $set_as_default) = @_;
66              
67 3         15 $mock_responses->{ delete $response->{'action'} }->{ delete $response->{'card_number'} } = $response;
68              
69 3 50       15 $self->set_as_default($response) if $set_as_default;
70             }
71              
72              
73             sub test_transaction {
74 0     0 1   my $self = shift;
75              
76 0           $self->{'test_transaction'} = 1;
77 0           $self->server('example.com');
78 0           $self->port(443);
79 0           $self->path('/example.html');
80              
81 0           return $self->{'test_transaction'};
82             }
83              
84              
85             sub submit {
86 0     0 1   my $self = shift;
87 0           my %content = $self->content();
88 0 0         die 'Missing action' unless $content{'action'};
89              
90 0           my $action;
91 0           foreach my $a (@{ $self->_info()->{'supported_actions'}->{'CC'} }) {
  0            
92 0 0         if (lc $a eq lc $content{'action'}) {
93 0           $action = $a;
94 0           last;
95             }
96             }
97 0 0         die 'Unsupported action' unless $action;
98 0 0         local $default_mock = $default_approved_mock if $action eq 'Mark Token Used'; # these always approve
99              
100 0 0         my $result = { %{ $mock_responses->{$action}->{ $content{'card_number'} } || $default_mock } }; # cheap clone
  0            
101              
102 0           foreach my $k (keys %{$result}) {
  0            
103 0           my $val = $result->{$k};
104 0 0         $result->{$k} = ref $val eq 'CODE' ? $val->(\%content) : $val;
105 0 0         $self->$k($result->{$k}) if $self->can($k);
106             }
107              
108 0           return $result;
109             }
110              
111             1;
112              
113             __END__