6 "github.com/mjl-/mox/imapclient"
9func TestMove(t *testing.T) {
13func TestMoveUIDOnly(t *testing.T) {
17func testMove(t *testing.T, uidonly bool) {
18 defer mockUIDValidity()()
19 tc := start(t, uidonly)
22 tc2 := startNoSwitchboard(t, uidonly)
23 defer tc2.closeNoWait()
25 tc3 := startNoSwitchboard(t, uidonly)
26 defer tc3.closeNoWait()
28 tc.login("mjl@mox.example", password0)
29 tc.client.Select("inbox")
31 tc2.login("mjl@mox.example", password0)
32 tc2.client.Select("Trash")
34 tc3.login("mjl@mox.example", password0)
35 tc3.client.Select("inbox")
37 tc.transactf("bad", "move") // Missing params.
38 tc.transactf("bad", "move 1") // Missing params.
39 tc.transactf("bad", "move 1 inbox ") // Leftover.
41 // Seqs 1,2 and UIDs 3,4.
42 tc.client.Append("inbox", makeAppend(exampleMsg))
43 tc.client.Append("inbox", makeAppend(exampleMsg))
44 tc.client.UIDStoreFlagsSet("1:2", true, `\Deleted`)
46 tc.client.Append("inbox", makeAppend(exampleMsg))
47 tc.client.Append("inbox", makeAppend(exampleMsg))
50 tc.transactf("ok", "uid move 1:* Trash")
53 tc.client.Examine("inbox")
54 tc.transactf("no", "move 1 Trash") // Opened readonly.
56 tc.client.Select("inbox")
58 tc.transactf("no", "move 1 nonexistent")
59 tc.xcodeWord("TRYCREATE")
61 tc.transactf("no", "move 1 expungebox")
62 tc.xcodeWord("TRYCREATE")
64 tc.transactf("no", "move 1 inbox") // Cannot move to same mailbox.
66 tc2.transactf("ok", "noop") // Drain.
67 tc3.transactf("ok", "noop") // Drain.
69 tc.transactf("ok", "move 1:* Trash")
71 imapclient.UntaggedResult{Status: "OK", Code: imapclient.CodeCopyUID{DestUIDValidity: 1, From: []imapclient.NumRange{{First: 3, Last: uint32ptr(4)}}, To: []imapclient.NumRange{{First: 1, Last: uint32ptr(2)}}}, Text: "moved"},
72 imapclient.UntaggedExpunge(1),
73 imapclient.UntaggedExpunge(1),
75 tc2.transactf("ok", "noop")
77 imapclient.UntaggedExists(2),
78 tc.untaggedFetch(1, 1, imapclient.FetchFlags(nil)),
79 tc.untaggedFetch(2, 2, imapclient.FetchFlags(nil)),
81 tc3.transactf("ok", "noop")
82 tc3.xuntagged(imapclient.UntaggedExpunge(1), imapclient.UntaggedExpunge(1))
86 tc.client.Append("inbox", makeAppend(exampleMsg))
87 tc.client.Append("inbox", makeAppend(exampleMsg))
88 tc2.transactf("ok", "noop") // Drain.
89 tc3.transactf("ok", "noop") // Drain.
91 tc.transactf("no", "uid move 1:4 Trash") // No match.
92 tc.transactf("ok", "uid move 6:5 Trash")
95 imapclient.UntaggedResult{Status: "OK", Code: imapclient.CodeCopyUID{DestUIDValidity: 1, From: []imapclient.NumRange{{First: 5, Last: uint32ptr(6)}}, To: []imapclient.NumRange{{First: 3, Last: uint32ptr(4)}}}, Text: "moved"},
96 imapclient.UntaggedVanished{UIDs: xparseNumSet("5:6")},
100 imapclient.UntaggedResult{Status: "OK", Code: imapclient.CodeCopyUID{DestUIDValidity: 1, From: []imapclient.NumRange{{First: 5, Last: uint32ptr(6)}}, To: []imapclient.NumRange{{First: 3, Last: uint32ptr(4)}}}, Text: "moved"},
101 imapclient.UntaggedExpunge(1),
102 imapclient.UntaggedExpunge(1),
105 tc2.transactf("ok", "noop")
107 imapclient.UntaggedExists(4),
108 tc2.untaggedFetch(3, 3, imapclient.FetchFlags(nil)),
109 tc2.untaggedFetch(4, 4, imapclient.FetchFlags(nil)),
111 tc3.transactf("ok", "noop")
113 tc3.xuntagged(imapclient.UntaggedVanished{UIDs: xparseNumSet("5:6")})
115 tc3.xuntagged(imapclient.UntaggedExpunge(1), imapclient.UntaggedExpunge(1))