summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_listSubscribed.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_listSubscribed.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_listSubscribed.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_listSubscribed.js b/comm/mailnews/imap/test/unit/test_listSubscribed.js
new file mode 100644
index 0000000000..0d536dd45c
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_listSubscribed.js
@@ -0,0 +1,123 @@
+/* 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/. */
+
+/** Test that listing subscribed mailboxes uses LIST (SUBSCRIBED) instead of LSUB
+ * for servers that have LIST-EXTENDED capability
+ */
+/* References:
+ * RFC 5258 - http://tools.ietf.org/html/rfc5258
+ * Bug 495318
+ * Bug 816028
+ * http://bugzilla.zimbra.com/show_bug.cgi?id=78794
+ */
+
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+add_setup(async function () {
+ // Zimbra is one of the servers that supports LIST-EXTENDED
+ // it also has a bug that causes a server crash in certain setups
+ setupIMAPPump("Zimbra");
+
+ Services.prefs.setBoolPref(
+ "mail.server.server1.autosync_offline_stores",
+ false
+ );
+
+ // Setup the mailboxes that will be used for this test.
+ IMAPPump.mailbox.subscribed = true;
+ IMAPPump.daemon.createMailbox("folder1", {
+ subscribed: true,
+ flags: ["\\Noselect"],
+ });
+ IMAPPump.daemon.createMailbox("folder1/folder11", {
+ subscribed: true,
+ flags: ["\\Noinferiors"],
+ });
+ IMAPPump.daemon.createMailbox("folder2", {
+ subscribed: true,
+ nonExistent: true,
+ });
+ IMAPPump.daemon.createMailbox("folder3", {});
+
+ // select the inbox to force folder discovery, etc.
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ IMAPPump.inbox.updateFolderWithListener(null, listener);
+ await listener.promise;
+});
+
+// tests that LIST (SUBSCRIBED) returns the proper response
+add_task(async function testListSubscribed() {
+ // check that we have \Noselect and \Noinferiors flags - these would not have
+ // been returned if we had used LSUB instead of LIST(SUBSCRIBED)
+ let rootFolder = IMAPPump.incomingServer.rootFolder;
+ let folder1 = rootFolder.getChildNamed("folder1");
+ Assert.ok(folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect));
+ Assert.ok(!folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoinferiors));
+
+ // make sure the above test was not a fluke
+ let folder11 = folder1.getChildNamed("folder11");
+ Assert.ok(!folder11.getFlag(Ci.nsMsgFolderFlags.ImapNoselect));
+ Assert.ok(folder11.getFlag(Ci.nsMsgFolderFlags.ImapNoinferiors));
+
+ // test that \NonExistent implies \Noselect
+ rootFolder.getChildNamed("folder2");
+ Assert.ok(folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect));
+
+ // should not get a folder3 since it is not subscribed
+ let folder3;
+ try {
+ folder3 = rootFolder.getChildNamed("folder3");
+ } catch (ex) {}
+ // do_check_false(folder1.getFlag(Ci.nsMsgFolderFlags.Subscribed));
+ Assert.equal(null, folder3);
+});
+
+add_task(async function testZimbraServerVersions() {
+ if (Services.prefs.getBoolPref("mailnews.imap.jsmodule", false)) {
+ return;
+ }
+
+ // older versions of Zimbra can crash if we send LIST (SUBSCRIBED) so we want
+ // to make sure that we are checking for versions
+
+ let testValues = [
+ { version: "6.3.1_GA_2790", expectedResult: false },
+ { version: "7.2.2_GA_2790", expectedResult: false },
+ { version: "7.2.3_GA_2790", expectedResult: true },
+ { version: "8.0.2_GA_2790", expectedResult: false },
+ { version: "8.0.3_GA_2790", expectedResult: true },
+ { version: "9.0.0_GA_2790", expectedResult: true },
+ ];
+
+ for (let i = 0; i < testValues.length; i++) {
+ IMAPPump.daemon.idResponse =
+ '("NAME" "Zimbra" ' +
+ '"VERSION" "' +
+ testValues[i].version +
+ '" ' +
+ '"RELEASE" "20120815212257" ' +
+ '"USER" "user@domain.com" ' +
+ '"SERVER" "14b63305-d002-4f1b-bcd9-23d402d4ef40")';
+ IMAPPump.incomingServer.closeCachedConnections();
+ IMAPPump.incomingServer.performExpand(null);
+ // select inbox is just to wait on performExpand since performExpand does not have listener
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ IMAPPump.inbox.updateFolderWithListener(null, listener);
+ await listener.promise;
+ // if we send LSUB instead of LIST(SUBSCRIBED), then we should not have \NoSelect flag
+ let rootFolder = IMAPPump.incomingServer.rootFolder;
+ let folder1 = rootFolder.getChildNamed("folder1");
+ Assert.equal(
+ folder1.getFlag(Ci.nsMsgFolderFlags.ImapNoselect),
+ testValues[i].expectedResult
+ );
+ }
+});
+
+// Cleanup at end
+add_task(function endTest() {
+ teardownIMAPPump();
+});