File Coverage

blib/lib/JMAP/Tester/UA/Async.pm
Criterion Covered Total %
statement 17 61 27.8
branch 0 12 0.0
condition 0 9 0.0
subroutine 6 12 50.0
pod 0 5 0.0
total 23 99 23.2


line stmt bran cond sub pod time code
1 1     1   345939 use v5.20.0;
  1         5  
2 1     1   8 use warnings;
  1         3  
  1         161  
3              
4             package JMAP::Tester::UA::Async 0.109;
5              
6 1     1   632 use Moo;
  1         10694  
  1         6  
7             with 'JMAP::Tester::Role::UA';
8              
9 1     1   2531 use experimental 'signatures';
  1         2072  
  1         9  
10              
11 1     1   996 use Future;
  1         19730  
  1         1033  
12              
13             has http_client => (
14             is => 'ro',
15             required => 1,
16             );
17              
18 0     0 0   sub set_cookie ($self, $arg) {
  0            
  0            
  0            
19 0           for (qw(api_uri name value)) {
20 0 0         Carp::confess("can't set_cookie without $_") unless $arg->{$_};
21             }
22              
23 0           my $uri = URI->new($arg->{api_uri});
24              
25             $self->http_client->{cookie_jar}->set_cookie(
26             1,
27             $arg->{name},
28             $arg->{value},
29             '/',
30             $arg->{domain} // $uri->host,
31             $uri->port,
32             0,
33             ($uri->port == 443 ? 1 : 0),
34             86400,
35             0,
36             $arg->{rest} || {},
37 0 0 0       );
      0        
38             }
39              
40 0     0 0   sub scan_cookies ($self, $callback) {
  0            
  0            
  0            
41 0           return $self->http_client->{cookie_jar}->scan($callback);
42             }
43              
44             has _default_headers => (
45             is => 'ro',
46             default => sub {
47             {
48             'Content-Type' => 'application/json',
49             }
50             },
51             );
52              
53 0     0 0   sub get_default_header ($self, $name) {
  0            
  0            
  0            
54 0           return scalar $self->_default_headers->{$name};
55             }
56              
57 0     0 0   sub set_default_header ($self, $name, $value) {
  0            
  0            
  0            
  0            
58 0 0         if (defined $value) {
59 0           $self->_default_headers->{$name} = $value;
60             } else {
61 0           delete $self->_default_headers->{$name};
62             }
63              
64 0           return;
65             }
66              
67 0     0 0   sub request ($self, $tester, $req, $log_type, $log_extra = undef) {
  0            
  0            
  0            
  0            
  0            
  0            
68 0           my $dh = $self->_default_headers;
69 0           for my $h (keys %$dh) {
70 0 0         $req->header($h => $dh->{$h}) unless defined $req->header($h);
71             }
72              
73 0           my $logger = $tester->_logger;
74              
75 0   0       my $log_method = "log_" . ($log_type // 'jmap') . '_request';
76              
77             return $self->http_client->do_request(
78             request => $req,
79             on_ready => sub {
80             # This fires just before the request is written to the socket, just
81             # like how LWP::UserAgent logs the request before actually sending
82             # it
83 0   0 0     my $log_method = "log_" . ($log_type // 'jmap') . '_request';
84              
85 0 0         if ($logger->can($log_method)) {
86 0 0         $tester->_logger->$log_method(
87             $tester,
88             {
89             ($log_extra ? %$log_extra : ()),
90             http_request => $req,
91             }
92             );
93             }
94              
95 0           return Future->done;
96             },
97 0           );
98             }
99              
100 1     1   12 no Moo;
  1         3  
  1         8  
101             1;
102              
103             __END__