my @warn;
local $SIG{__WARN__} = sub { push @warn, @_ };
is($im->add($mime), undef, 'obvious duplicate rejected');
- like(join(' ', @warn), qr/resent/, 'warned about resent message');
+ is(scalar(@warn), 0, 'no warning about resent message');
@warn = ();
$mime->header_set('Message-Id', '<a-mid@b>', '<c@d>');
- ok($im->add($mime), 'secondary MID used');
+ is($im->add($mime), undef, 'secondary MID ignored if first matches');
+ my $sec = PublicInbox::MIME->new($mime->as_string);
+ $sec->header_set('Date');
+ $sec->header_set('Message-Id', '<a-mid@b>', '<c@d>');
+ ok($im->add($sec), 'secondary MID used if data is different');
like(join(' ', @warn), qr/mismatched/, 'warned about mismatch');
like(join(' ', @warn), qr/alternative/, 'warned about alternative');
is_deeply([ '<a-mid@b>', '<c@d>' ],
- [ $mime->header_obj->header_raw('Message-Id') ],
+ [ $sec->header_obj->header_raw('Message-Id') ],
'no new Message-Id added');
my $sane_mid = qr/\A<[\w\-]+\@localhost>\z/;
ok($im->add($mime), 'reused mid ok');
like(join(' ', @warn), qr/reused/, 'warned about reused MID');
my @mids = $mime->header_obj->header_raw('Message-Id');
- is($mids[1], '<a-mid@b>', 'original mid not changed');
- like($mids[0], $sane_mid, 'new MID added');
+ is($mids[0], '<a-mid@b>', 'original mid not changed');
+ like($mids[1], $sane_mid, 'new MID added');
is(scalar(@mids), 2, 'only one new MID added');
@warn = ();
my $gen = PublicInbox::Import::digest2mid(content_digest($mime));
unlike($gen, qr![\+/=]!, 'no URL-unfriendly chars in Message-Id');
my $fake = PublicInbox::MIME->new($mime->as_string);
- $fake->header_set('Message-Id', $gen);
+ $fake->header_set('Message-Id', "<$gen>");
ok($im->add($fake), 'fake added easily');
is_deeply(\@warn, [], 'no warnings from a faker');
ok($im->add($mime), 'random MID made');
like(join(' ', @warn), qr/using random/, 'warned about using random');
@mids = $mime->header_obj->header_raw('Message-Id');
- is($mids[1], '<a-mid@b>', 'original mid not changed');
- like($mids[0], $sane_mid, 'new MID added');
+ is($mids[0], '<a-mid@b>', 'original mid not changed');
+ like($mids[1], $sane_mid, 'new MID added');
is(scalar(@mids), 2, 'only one new MID added');
@warn = ();
ok(!$@, '->done is idempotent');
}
+{
+ ok($im->add($mime), 'add message to be purged');
+ local $SIG{__WARN__} = sub {};
+ ok($im->purge($mime), 'purged message');
+ $im->done;
+}
+
done_testing();