]> Sergey Matveev's repositories - public-inbox.git/blobdiff - xt/net_writer-imap.t
lei: flesh out `forwarded' kw support for Maildir and IMAP
[public-inbox.git] / xt / net_writer-imap.t
index c24fa993cc5e4d32ed3ffccbc9d4109821d0b3dd..007de35ea7155eb4e5ce87d4c6596b159ebd4db7 100644 (file)
@@ -7,6 +7,8 @@ use POSIX qw(strftime);
 use PublicInbox::OnDestroy;
 use PublicInbox::URIimap;
 use PublicInbox::Config;
+use PublicInbox::DS;
+use PublicInbox::InboxIdle;
 use Fcntl qw(O_EXCL O_WRONLY O_CREAT);
 my $imap_url = $ENV{TEST_IMAP_WRITE_URL} or
        plan skip_all => 'TEST_IMAP_WRITE_URL unset';
@@ -168,8 +170,58 @@ test_lei(sub {
        is_deeply($empty, [], 'clobbered folder');
        lei_ok qw(q -o /dev/stdout m:testmessage@example.com --no-external);
        $res = json_utf8->decode($lei_out)->[0];
-       is_deeply([@$res{qw(m kw)}], ['<testmessage@example.com>', ['seen']],
+       is_deeply([@$res{qw(m kw)}], ['testmessage@example.com', ['seen']],
                'kw set');
+
+       # prepare messages for watch
+       $mic = $nwr->mic_for_folder($folder_uri);
+       for my $kw (qw(Deleted Seen Answered Draft forwarded)) {
+               my $buf = <<EOM;
+From: x\@example.com
+Message-ID: <$kw\@test.example.com>
+
+EOM
+               my $f = $kw eq 'forwarded' ? '$Forwarded' : "\\$kw";
+               $mic->append_string($folder_uri->mailbox, $buf, $f)
+                       or BAIL_OUT "append $kw $@";
+       }
+       $mic->disconnect;
+
+       my $inboxdir = "$ENV{HOME}/wtest";
+       my @cmd = (qw(-init -Lbasic wtest), $inboxdir,
+                       qw(https://example.com/wtest wtest@example.com));
+       run_script(\@cmd) or BAIL_OUT "init wtest";
+       xsys(qw(git config), "--file=$ENV{HOME}/.public-inbox/config",
+                       'publicinbox.wtest.watch',
+                       $$folder_uri) == 0 or BAIL_OUT "git config $?";
+       my $watcherr = "$ENV{HOME}/watch.err";
+       open my $err_wr, '>>', $watcherr or BAIL_OUT $!;
+       my $pub_cfg = PublicInbox::Config->new;
+       PublicInbox::DS->Reset;
+       my $ii = PublicInbox::InboxIdle->new($pub_cfg);
+       my $cb = sub { PublicInbox::DS->SetPostLoopCallback(sub {}) };
+       my $obj = bless \$cb, 'PublicInbox::TestCommon::InboxWakeup';
+       $pub_cfg->each_inbox(sub { $_[0]->subscribe_unlock('ident', $obj) });
+       my $w = start_script(['-watch'], undef, { 2 => $err_wr });
+       diag 'waiting for initial fetch...';
+       PublicInbox::DS->EventLoop;
+       my $ibx = $pub_cfg->lookup_name('wtest');
+       my $mm = $ibx->mm;
+       ok(defined($mm->num_for('Seen@test.example.com')),
+               '-watch takes seen message');
+       ok(defined($mm->num_for('Answered@test.example.com')),
+               '-watch takes answered message');
+       ok(!defined($mm->num_for('Deleted@test.example.com')),
+               '-watch ignored \\Deleted');
+       ok(!defined($mm->num_for('Draft@test.example.com')),
+               '-watch ignored \\Draft');
+       ok(defined($mm->num_for('forwarded@test.example.com')),
+               '-watch takes forwarded message');
+       undef $w; # done with watch
+       lei_ok qw(import), $$folder_uri;
+       lei_ok qw(q m:forwarded@test.example.com);
+       is_deeply(json_utf8->decode($lei_out)->[0]->{kw}, ['forwarded'],
+               'forwarded kw imported from IMAP');
 });
 
 undef $cleanup; # remove temporary folder