summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/imap/test/unit/test_saveImapDraft.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/imap/test/unit/test_saveImapDraft.js')
-rw-r--r--comm/mailnews/imap/test/unit/test_saveImapDraft.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/comm/mailnews/imap/test/unit/test_saveImapDraft.js b/comm/mailnews/imap/test/unit/test_saveImapDraft.js
new file mode 100644
index 0000000000..ec2b96b3de
--- /dev/null
+++ b/comm/mailnews/imap/test/unit/test_saveImapDraft.js
@@ -0,0 +1,119 @@
+/* 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 that a message saved as draft in an IMAP folder is correctly
+ * marked as unread.
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+var gDraftsFolder;
+
+add_setup(function () {
+ setupIMAPPump();
+ Services.prefs.setBoolPref(
+ "mail.server.default.autosync_offline_stores",
+ false
+ );
+});
+
+add_task(async function createDraftsFolder() {
+ IMAPPump.incomingServer.rootFolder.createSubfolder("Drafts", null);
+ await PromiseTestUtils.promiseFolderAdded("Drafts");
+ gDraftsFolder = IMAPPump.incomingServer.rootFolder.getChildNamed("Drafts");
+ Assert.ok(gDraftsFolder instanceof Ci.nsIMsgImapMailFolder);
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ gDraftsFolder.updateFolderWithListener(null, listener);
+ await listener.promise;
+});
+
+add_task(async function saveDraft() {
+ let msgCompose = Cc["@mozilla.org/messengercompose/compose;1"].createInstance(
+ Ci.nsIMsgCompose
+ );
+ let fields = Cc[
+ "@mozilla.org/messengercompose/composefields;1"
+ ].createInstance(Ci.nsIMsgCompFields);
+ fields.from = "Nobody <nobody@tinderbox.test>";
+
+ let params = Cc[
+ "@mozilla.org/messengercompose/composeparams;1"
+ ].createInstance(Ci.nsIMsgComposeParams);
+ params.composeFields = fields;
+ msgCompose.initialize(params);
+
+ // Set up the identity
+ let identity = MailServices.accounts.createIdentity();
+ identity.draftFolder = gDraftsFolder.URI;
+
+ let progress = Cc["@mozilla.org/messenger/progress;1"].createInstance(
+ Ci.nsIMsgProgress
+ );
+ let progressListener = new ProgressListener();
+ progress.registerListener(progressListener);
+ msgCompose.sendMsg(
+ Ci.nsIMsgSend.nsMsgSaveAsDraft,
+ identity,
+ "",
+ null,
+ progress
+ );
+ await progressListener.promise;
+});
+
+add_task(async function updateDrafts() {
+ let listener = new PromiseTestUtils.PromiseUrlListener();
+ gDraftsFolder.updateFolderWithListener(null, listener);
+ await listener.promise;
+});
+
+add_task(function checkResult() {
+ Assert.equal(gDraftsFolder.getTotalMessages(false), 1);
+ Assert.equal(gDraftsFolder.getNumUnread(false), 1);
+});
+
+add_task(function endTest() {
+ teardownIMAPPump();
+});
+
+function ProgressListener() {
+ this._promise = new Promise(resolve => {
+ this._resolve = resolve;
+ });
+}
+
+ProgressListener.prototype = {
+ onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
+ if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) {
+ this._resolve();
+ }
+ },
+
+ onProgressChange(
+ aWebProgress,
+ aRequest,
+ aCurSelfProgress,
+ aMaxSelfProgress,
+ aCurTotalProgress,
+ aMaxTotalProgress
+ ) {},
+ onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {},
+ onStatusChange(aWebProgress, aRequest, aStatus, aMessage) {},
+ onSecurityChange(aWebProgress, aRequest, state) {},
+ onContentBlockingEvent(aWebProgress, aRequest, aEvent) {},
+
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIWebProgressListener",
+ "nsISupportsWeakReference",
+ ]),
+ get promise() {
+ return this._promise;
+ },
+};