The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
use lib qw(./lib ./blib/lib);
my $PackageName = 'Sisimai::Rhost::GoogleApps';
my $MethodNames = {
'class' => ['get'],
'object' => [],
};
use_ok $PackageName;
can_ok $PackageName, @{ $MethodNames->{'class'} };
MAKE_TEST: {
my $rs = {
'01' => { 'status' => qr/\A5[.]2[.]1\z/, 'reason' => qr/suspend/ },
'02' => { 'status' => qr/\A5[.]1[.]1\z/, 'reason' => qr/userunknown/ },
};
is $PackageName->get, undef;
PARSE_EACH_MAIL: for my $n ( keys %$rs ) {
my $emailfn = sprintf("./set-of-emails/maildir/bsd/rhost-googleapps-%02d.eml", $n);
my $mailbox = Sisimai::Mail->new($emailfn);
my $mtahost = 'aspmx.l.google.com';
next unless defined $mailbox;
while( my $r = $mailbox->data->read ) {
my $p = Sisimai::Message->new('data' => $r);
isa_ok $p, 'Sisimai::Message';
isa_ok $p->ds, 'ARRAY';
isa_ok $p->header, 'HASH';
isa_ok $p->rfc822, 'HASH';
ok length $p->from;
for my $e ( @{ $p->ds } ) {
is $e->{'spec'}, 'SMTP', '->spec = SMTP';
ok length $e->{'recipient'}, '->recipient = '.$e->{'recipient'};
like $e->{'status'}, $rs->{ $n }->{'status'}, '->status = '.$e->{'status'};
like $e->{'command'}, qr/[A-Z]{4}/, '->command = '.$e->{'command'};
ok length $e->{'date'}, '->date = '.$e->{'date'};
ok length $e->{'diagnosis'}, '->diagnosis = '.$e->{'diagnosis'};
ok length $e->{'action'}, '->action = '.$e->{'action'};
is $e->{'rhost'}, $mtahost, '->rhost = '.$mtahost;
ok length $e->{'lhost'}, '->lhost = '.$e->{'lhost'};
ok exists $e->{'alias'}, '->alias = '.$e->{'alias'};
like $e->{'agent'}, qr/(?:Sendmail|Postfix)/, '->agent = '.$e->{'agent'};
}
my $v = Sisimai::Data->make('data' => $p);
for my $e ( @$v ) {
like $e->reason, $rs->{ $n }->{'reason'}, '->reason = '.$e->reason;
}
}
}
}
done_testing;