]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/imapd.t
imap: support the CLOSE command
[public-inbox.git] / t / imapd.t
index 59b95a6b83fdd0462c1dd6578c6e600125bb290d..8172a91923d3777de714a989ed03d5716942f75d 100644 (file)
--- a/t/imapd.t
+++ b/t/imapd.t
@@ -291,7 +291,7 @@ $pi_config->each_inbox(sub {
                 qr/done_testing;(?:\r\n){1,2}\z/,
                'BODY[2.1.2] tail matched');
 
-       $ret = $mic->fetch_hash($uidnext, 'BODY[2.HEADER]') or
+       $ret = $mic->fetch_hash("1:$uidnext", 'BODY[2.HEADER]') or
                                                BAIL_OUT "2.HEADER $@";
        like($ret->{$uidnext}->{'BODY[2.HEADER]'},
                qr/\ADate: Sat, 18 Apr 2020 22:20:20 /,
@@ -306,6 +306,31 @@ Content-Disposition: attachment; filename="embed2x\.eml"\r
 EOF
 }); # each_inbox
 
+# message sequence numbers :<
+is($mic->Uid(0), 0, 'disable UID on '.ref($mic));
+ok($mic->reconnect, 'reconnected');
+$ret = $mic->fetch_hash('1:*', 'RFC822') or BAIL_OUT "FETCH $@";
+is(scalar keys %$ret, 3, 'got all 3 messages');
+{
+       my $rdr = { 0 => \($ret->{1}->{RFC822}) };
+       my $env = { HOME => $ENV{HOME} };
+       my @cmd = qw(-learn rm --all);
+       run_script(\@cmd, $env, $rdr) or BAIL_OUT('-learn rm');
+}
+my $r2 = $mic->fetch_hash('1:*', 'BODY.PEEK[]') or BAIL_OUT "FETCH $@";
+is(scalar keys %$r2, 3, 'still got all 3 messages');
+like($r2->{1}->{'BODY[]'}, qr/dummy message #1/, 'got dummy message 1');
+is($r2->{2}->{'BODY[]'}, $ret->{2}->{RFC822}, 'message 2 unchanged');
+is($r2->{3}->{'BODY[]'}, $ret->{3}->{RFC822}, 'message 3 unchanged');
+$r2 = $mic->fetch_hash(2, 'BODY.PEEK[HEADER.FIELDS (message-id)]')
+                       or BAIL_OUT "FETCH $@";
+is($r2->{2}->{'BODY[HEADER.FIELDS (MESSAGE-ID)]'},
+       'Message-ID: <20200418222508.GA13918@dcvr>'."\r\n\r\n",
+       'BODY.PEEK[HEADER.FIELDS ...] drops .PEEK');
+ok($mic->close, 'CLOSE works');
+ok(!$mic->close, 'CLOSE not idempotent');
+ok($mic->logout, 'logged out');
+
 $td->kill;
 $td->join;
 is($?, 0, 'no error in exited process');