X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=xt%2Fnet_writer-imap.t;h=007de35ea7155eb4e5ce87d4c6596b159ebd4db7;hb=91ae332610370d2a5da2cfb0bd1dff09463e5438;hp=c24fa993cc5e4d32ed3ffccbc9d4109821d0b3dd;hpb=1d0616b4ee744185ef6c1ff8672ea4521497406a;p=public-inbox.git diff --git a/xt/net_writer-imap.t b/xt/net_writer-imap.t index c24fa993..007de35e 100644 --- a/xt/net_writer-imap.t +++ b/xt/net_writer-imap.t @@ -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)}], ['', ['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 + 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