summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_imapFolderCopy.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_imapFolderCopy.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_imapFolderCopy.js137
1 files changed, 137 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_imapFolderCopy.js b/comm/mailnews/imap/test/unit/test_imapFolderCopy.js
new file mode 100644
index 0000000000..4b7e1bdb18
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_imapFolderCopy.js
@@ -0,0 +1,137 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// This file tests the folder copying with IMAP. In particular, we're
+// going to test copying local folders to imap servers, but other tests
+// could be added.
+
+var { MessageGenerator } = ChromeUtils.import(
+ "resource://testing-common/mailnews/MessageGenerator.jsm"
+);
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+var gEmptyLocal1, gEmptyLocal2, gEmptyLocal3, gNotEmptyLocal4;
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+add_setup(function () {
+ setupIMAPPump();
+
+ gEmptyLocal1 = localAccountUtils.rootFolder.createLocalSubfolder("empty 1");
+ gEmptyLocal2 = localAccountUtils.rootFolder.createLocalSubfolder("empty 2");
+ gEmptyLocal3 = localAccountUtils.rootFolder.createLocalSubfolder("empty 3");
+ gNotEmptyLocal4 =
+ localAccountUtils.rootFolder.createLocalSubfolder("not empty 4");
+
+ let messageGenerator = new MessageGenerator();
+ let message = messageGenerator.makeMessage();
+ gNotEmptyLocal4.QueryInterface(Ci.nsIMsgLocalMailFolder);
+ gNotEmptyLocal4.addMessage(message.toMboxString());
+
+ // these hacks are required because we've created the inbox before
+ // running initial folder discovery, and adding the folder bails
+ // out before we set it as verified online, so we bail out, and
+ // then remove the INBOX folder since it's not verified.
+ IMAPPump.inbox.hierarchyDelimiter = "/";
+ IMAPPump.inbox.verifiedAsOnlineFolder = true;
+});
+
+add_task(async function copyFolder1() {
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(
+ gEmptyLocal1,
+ IMAPPump.inbox,
+ false,
+ copyListener,
+ null
+ );
+ await copyListener.promise;
+});
+
+add_task(async function copyFolder2() {
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(
+ gEmptyLocal2,
+ IMAPPump.inbox,
+ false,
+ copyListener,
+ null
+ );
+ await copyListener.promise;
+});
+
+add_task(async function copyFolder3() {
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(
+ gEmptyLocal3,
+ IMAPPump.inbox,
+ false,
+ copyListener,
+ null
+ );
+ await copyListener.promise;
+});
+
+add_task(function verifyFolders() {
+ let folder1 = IMAPPump.inbox.getChildNamed("empty 1");
+ let folder2 = IMAPPump.inbox.getChildNamed("empty 2");
+ let folder3 = IMAPPump.inbox.getChildNamed("empty 3");
+ Assert.ok(folder1 !== null);
+ Assert.ok(folder2 !== null);
+ Assert.ok(folder3 !== null);
+});
+
+add_task(async function moveImapFolder1() {
+ let folder1 = IMAPPump.inbox.getChildNamed("empty 1");
+ let folder2 = IMAPPump.inbox.getChildNamed("empty 2");
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(folder2, folder1, true, copyListener, null);
+ await copyListener.promise;
+});
+
+add_task(async function moveImapFolder2() {
+ let folder1 = IMAPPump.inbox.getChildNamed("empty 1");
+ let folder3 = IMAPPump.inbox.getChildNamed("empty 3");
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(folder3, folder1, true, copyListener, null);
+ await copyListener.promise;
+});
+
+add_task(function verifyImapFolders() {
+ let folder1 = IMAPPump.inbox.getChildNamed("empty 1");
+ let folder2 = folder1.getChildNamed("empty 2");
+ let folder3 = folder1.getChildNamed("empty 3");
+ Assert.ok(folder1 !== null);
+ Assert.ok(folder2 !== null);
+ Assert.ok(folder3 !== null);
+});
+
+add_task(async function testImapFolderCopyFailure() {
+ IMAPPump.daemon.commandToFail = "APPEND";
+ // we expect NS_MSG_ERROR_IMAP_COMMAND_FAILED;
+ const NS_MSG_ERROR_IMAP_COMMAND_FAILED = 0x80550021;
+ let copyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyFolder(
+ gNotEmptyLocal4,
+ IMAPPump.inbox,
+ false,
+ copyListener,
+ null
+ );
+ await Assert.rejects(
+ copyListener.promise,
+ e => {
+ return e === NS_MSG_ERROR_IMAP_COMMAND_FAILED;
+ },
+ "NS_MSG_ERROR_IMAP_COMMAND_FAILED should be the cause of the error"
+ );
+});
+
+add_task(function teardown() {
+ teardownIMAPPump();
+});