my @warn;
local $SIG{__WARN__} = sub { push @warn, @_ };
is($im->add($mime), undef, 'obvious duplicate rejected');
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');
- 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>' ],
like(join(' ', @warn), qr/mismatched/, 'warned about mismatch');
like(join(' ', @warn), qr/alternative/, 'warned about alternative');
is_deeply([ '<a-mid@b>', '<c@d>' ],
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');
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');
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);
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);
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');
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');
- $ibx->search->reopen;
- $ibx->search->each_smsg_by_mid('abcde@1', sub { push @found, @_; 1 });
+ my $srch = $ibx->search;
+ $srch->reopen->each_smsg_by_mid('abcde@1', sub { push @found, @_; 1 });
is(scalar(@found), 2, 'message found by second MID');
is($found[0]->{doc_id}, $found[1]->{doc_id}, 'same document');
ok($found[1]->{doc_id} > 0, 'doc_id is positive');
is(scalar(@found), 2, 'message found by second MID');
is($found[0]->{doc_id}, $found[1]->{doc_id}, 'same document');
ok($found[1]->{doc_id} > 0, 'doc_id is positive');
$im->done;
is($git0->qx(qw(log -1 --pretty=raw --raw -r --no-abbrev)),
$after, 'no git history made with idempotent remove');
$im->done;
is($git0->qx(qw(log -1 --pretty=raw --raw -r --no-abbrev)),
$after, 'no git history made with idempotent remove');
+ eval { $im->done };
+ 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;