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 --- comm/mailnews/imap/test/unit/test_saveImapDraft.js | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 comm/mailnews/imap/test/unit/test_saveImapDraft.js (limited to 'comm/mailnews/imap/test/unit/test_saveImapDraft.js') 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 "; + + 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; + }, +}; -- cgit v1.2.3