summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_pop3MultiCopy2.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/local/test/unit/test_pop3MultiCopy2.js')
-rw-r--r--comm/mailnews/local/test/unit/test_pop3MultiCopy2.js179
1 files changed, 179 insertions, 0 deletions
diff --git a/comm/mailnews/local/test/unit/test_pop3MultiCopy2.js b/comm/mailnews/local/test/unit/test_pop3MultiCopy2.js
new file mode 100644
index 0000000000..007a0fd99b
--- /dev/null
+++ b/comm/mailnews/local/test/unit/test_pop3MultiCopy2.js
@@ -0,0 +1,179 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * This tests that moved multiple messages from maildir->mbox and
+ mbox->maildir are correct.
+ */
+
+/* import-globals-from ../../../test/resources/POP3pump.js */
+load("../../../resources/POP3pump.js");
+const { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+Services.prefs.setCharPref(
+ "mail.serverDefaultStoreContractID",
+ "@mozilla.org/msgstore/maildirstore;1"
+);
+
+var gInboxFolder, gTestFolder;
+
+gPOP3Pump.files = ["../../../data/bugmail1", "../../../data/draft1"];
+var gTestSubjects = [
+ "[Bug 397009] A filter will let me tag, but not untag",
+ "Hello, did you receive my bugmail?",
+];
+
+add_setup(async function () {
+ let storeID = "@mozilla.org/msgstore/maildirstore;1";
+ resetPluggableStoreLocal(storeID);
+
+ // We want to test cross-server copy, so don't defer.
+ gPOP3Pump.fakeServer.deferredToAccount = "";
+
+ // Create a test folder on the Local Folders account.
+ gTestFolder = localAccountUtils.rootFolder
+ .QueryInterface(Ci.nsIMsgLocalMailFolder)
+ .createLocalSubfolder("test");
+ dump("testFolder is at " + gTestFolder.filePath.path + "\n");
+ await gPOP3Pump.run();
+});
+
+add_task(async function maildirToMbox() {
+ // Test for multiple message copy for maildir->mbox.
+
+ // get message headers for the inbox folder
+ gInboxFolder = gPOP3Pump.fakeServer.rootMsgFolder.getFolderWithFlags(
+ Ci.nsMsgFolderFlags.Inbox
+ );
+ dump("inbox is at " + gInboxFolder.filePath.path + "\n");
+
+ // Accumulate messages to copy.
+ let messages = [];
+ for (let hdr of gInboxFolder.msgDatabase.enumerateMessages()) {
+ messages.push(hdr);
+ }
+ Assert.equal(messages.length, 2);
+
+ // Move messages to mbox test folder.
+ let promiseCopyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyMessages(
+ gInboxFolder,
+ messages,
+ gTestFolder,
+ true, // isMove
+ promiseCopyListener,
+ null, // window
+ false // allowUndo
+ );
+ await promiseCopyListener.promise;
+
+ // Check the destination headers.
+ messages = [];
+ let subjects = [];
+ for (let hdr of gTestFolder.msgDatabase.enumerateMessages()) {
+ messages.push(hdr);
+ dump("Subject: " + hdr.subject + "\n");
+ subjects.push(hdr.subject);
+ }
+ Assert.equal(messages.length, 2);
+
+ // messages should be missing from source
+ Assert.equal(gInboxFolder.getTotalMessages(false), 0);
+
+ // Check for subjects. maildir order for messages may not match
+ // order for creation, hence the array.includes.
+ for (let subject of gTestSubjects) {
+ Assert.ok(subjects.includes(subject));
+ }
+
+ // Make sure the body matches the message.
+ for (let hdr of gTestFolder.msgDatabase.enumerateMessages()) {
+ let body = mailTestUtils.loadMessageToString(gTestFolder, hdr);
+ Assert.ok(body.includes(hdr.subject));
+ }
+});
+
+add_task(async function mboxToMaildir() {
+ // Test for multiple message copy for mbox->maildir.
+
+ // Accumulate messages to copy.
+ let messages = [];
+ for (let hdr of gTestFolder.msgDatabase.enumerateMessages()) {
+ messages.push(hdr);
+ }
+ Assert.equal(messages.length, 2);
+
+ // Move messages to inbox folder.
+ let promiseCopyListener = new PromiseTestUtils.PromiseCopyListener();
+ MailServices.copy.copyMessages(
+ gTestFolder,
+ messages,
+ gInboxFolder,
+ true,
+ promiseCopyListener,
+ null,
+ false
+ );
+ await promiseCopyListener.promise;
+
+ // Check the destination headers.
+ messages = [];
+ let subjects = [];
+ for (let hdr of gInboxFolder.msgDatabase.enumerateMessages()) {
+ messages.push(hdr);
+ dump("Subject: " + hdr.subject + "\n");
+ subjects.push(hdr.subject);
+ }
+ Assert.equal(messages.length, 2);
+
+ // messages should be missing from source
+ Assert.equal(gTestFolder.getTotalMessages(false), 0);
+
+ // Check for subjects. maildir order for messages may not match
+ // order for creation, hence the array.includes.
+ for (let subject of gTestSubjects) {
+ Assert.ok(subjects.includes(subject));
+ }
+
+ // Make sure the body matches the message.
+ for (let hdr of gInboxFolder.msgDatabase.enumerateMessages()) {
+ let body = mailTestUtils.loadMessageToString(gInboxFolder, hdr);
+ Assert.ok(body.includes(hdr.subject));
+ }
+});
+
+add_task(function testCleanup() {
+ gPOP3Pump = null;
+});
+
+// Clone of POP3pump resetPluggableStore that does not reset local folders.
+function resetPluggableStoreLocal(aStoreContractID) {
+ Services.prefs.setCharPref(
+ "mail.serverDefaultStoreContractID",
+ aStoreContractID
+ );
+
+ // Cleanup existing files, server and account instances, if any.
+ if (gPOP3Pump._server) {
+ gPOP3Pump._server.stop();
+ }
+
+ if (gPOP3Pump.fakeServer && gPOP3Pump.fakeServer.valid) {
+ gPOP3Pump.fakeServer.closeCachedConnections();
+ MailServices.accounts.removeIncomingServer(gPOP3Pump.fakeServer, false);
+ }
+
+ gPOP3Pump.fakeServer = localAccountUtils.create_incoming_server(
+ "pop3",
+ gPOP3Pump.kPOP3_PORT,
+ "fred",
+ "wilma"
+ );
+
+ // localAccountUtils.clearAll();
+
+ gPOP3Pump._incomingServer = gPOP3Pump.fakeServer;
+ gPOP3Pump._mailboxStoreContractID = aStoreContractID;
+}