From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../mailnews/imap/test/unit/test_imapFolderCopy.js | 137 +++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 comm/mailnews/imap/test/unit/test_imapFolderCopy.js (limited to 'comm/mailnews/imap/test/unit/test_imapFolderCopy.js') 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(); +}); -- cgit v1.2.3