eval
"use DBD::SQLite 1.31"
;
if
($@) {
plan(
skip_all
=>
'DBD::SQLite not available'
);
exit
;
}
my
$mod
=
'Mail::DMARC::Report::Aggregate'
;
use_ok(
$mod
);
my
$agg
=
$mod
->new;
isa_ok(
$agg
,
$mod
);
test_metadata_isa();
test_record();
test_policy_published();
test_as_xml();
done_testing();
exit
;
sub
test_metadata_isa {
isa_ok(
$agg
->metadata,
"Mail::DMARC::Report::Aggregate::Metadata"
);
};
sub
test_policy_published {
ok( !
defined
$agg
->policy_published,
"policy_published, empty"
);
my
$pol
= Mail::DMARC::Policy->new();
$pol
->apply_defaults;
$pol
->domain(
'test.com'
);
ok(
$agg
->policy_published(
$pol
),
"policy_published, default"
);
}
sub
test_record {
ok( !
defined
$agg
->record,
"Mail::DMARC::Report::Aggregate::Record, empty"
);
my
$ip
=
'192.2.1.1'
;
my
$test_r
= {
identifiers
=> {
header_from
=>
'example.com'
,
envelope_from
=>
'example.com'
,
},
auth_results
=> {
dkim
=> [ ],
spf
=> [ ] },
row
=> {
source_ip
=>
$ip
,
count
=> 1,
policy_evaluated
=> {
disposition
=>
'pass'
,
dkim
=>
'pass'
,
spf
=>
'pass'
},
},
public_suffixes
=> {},
};
my
$r
;
eval
{
$r
=
$agg
->record(
$test_r
) };
ok(
$r
,
"record, test"
) or diag Dumper(
$r
);
delete
$agg
->record->[0]{config_file};
is_deeply(
$agg
->record, [
$test_r
],
"record, deeply"
);
$agg
->record(
$test_r
,
"record, empty, again"
);
delete
$agg
->record->[1]{config_file};
is_deeply(
$agg
->record, [
$test_r
,
$test_r
],
"record, deeply, multiple"
);
};
sub
test_as_xml {
$agg
->metadata->report_id(1);
foreach
my
$m
(
qw/ org_name email extra_contact_info error uuid /
) {
$agg
->metadata->
$m
(
"test"
);
};
foreach
my
$m
(
qw/ begin end /
) {
$agg
->metadata->
$m
(
time
);
};
ok(
$agg
->metadata->as_xml(),
"metadata, as_xml"
);
ok(
$agg
->get_policy_published_as_xml(),
"policy_published, as_xml"
);
ok(
$agg
->get_record_as_xml(),
"record, as_xml"
);
ok(
$agg
->as_xml(),
"as_xml"
);
};