1package imapserver
2
3import (
4 "testing"
5
6 "github.com/mjl-/mox/imapclient"
7)
8
9func TestStatus(t *testing.T) {
10 testStatus(t, false)
11}
12
13func TestStatusUIDOnly(t *testing.T) {
14 testStatus(t, true)
15}
16
17func testStatus(t *testing.T, uidonly bool) {
18 defer mockUIDValidity()()
19 tc := start(t, uidonly)
20 defer tc.close()
21
22 tc.login("mjl@mox.example", password0)
23
24 tc.transactf("bad", "status") // Missing param.
25 tc.transactf("bad", "status inbox") // Missing param.
26 tc.transactf("bad", "status inbox ()") // At least one attribute required.
27 tc.transactf("bad", "status inbox (uidvalidity) ") // Leftover data.
28 tc.transactf("bad", "status inbox (unknown)") // Unknown attribute.
29
30 tc.transactf("no", "status expungebox (messages)") // No longer exists.
31
32 tc.transactf("ok", "status inbox (messages uidnext uidvalidity unseen deleted size recent appendlimit)")
33 tc.xuntagged(imapclient.UntaggedStatus{
34 Mailbox: "Inbox",
35 Attrs: map[imapclient.StatusAttr]int64{imapclient.StatusMessages: 0,
36 imapclient.StatusUIDValidity: 1,
37 imapclient.StatusUIDNext: 1,
38 imapclient.StatusUnseen: 0,
39 imapclient.StatusDeleted: 0,
40 imapclient.StatusSize: 0,
41 imapclient.StatusRecent: 0,
42 imapclient.StatusAppendLimit: 0,
43 },
44 })
45
46 // Again, now with a message in the mailbox.
47 tc.transactf("ok", "append inbox {4+}\r\ntest")
48 tc.transactf("ok", "status inbox (messages uidnext uidvalidity unseen deleted size recent appendlimit)")
49
50 tc.xuntagged(imapclient.UntaggedStatus{
51 Mailbox: "Inbox",
52 Attrs: map[imapclient.StatusAttr]int64{imapclient.StatusMessages: 1,
53 imapclient.StatusUIDValidity: 1,
54 imapclient.StatusUIDNext: 2,
55 imapclient.StatusUnseen: 1,
56 imapclient.StatusDeleted: 0,
57 imapclient.StatusSize: 4,
58 imapclient.StatusRecent: 0,
59 imapclient.StatusAppendLimit: 0,
60 },
61 })
62
63 tc.client.Select("inbox")
64 tc.client.UIDStoreFlagsSet("1", true, `\Deleted`)
65 tc.transactf("ok", "status inbox (messages uidnext uidvalidity unseen deleted size recent appendlimit)")
66 tc.xuntagged(imapclient.UntaggedStatus{
67 Mailbox: "Inbox",
68 Attrs: map[imapclient.StatusAttr]int64{imapclient.StatusMessages: 1,
69 imapclient.StatusUIDValidity: 1,
70 imapclient.StatusUIDNext: 2,
71 imapclient.StatusUnseen: 1,
72 imapclient.StatusDeleted: 1,
73 imapclient.StatusSize: 4,
74 imapclient.StatusRecent: 0,
75 imapclient.StatusAppendLimit: 0,
76 },
77 })
78
79}
80