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 --- .../local/test/unit/test_pop3MoveFilter.js | 137 +++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 comm/mailnews/local/test/unit/test_pop3MoveFilter.js (limited to 'comm/mailnews/local/test/unit/test_pop3MoveFilter.js') diff --git a/comm/mailnews/local/test/unit/test_pop3MoveFilter.js b/comm/mailnews/local/test/unit/test_pop3MoveFilter.js new file mode 100644 index 0000000000..eec79bb63a --- /dev/null +++ b/comm/mailnews/local/test/unit/test_pop3MoveFilter.js @@ -0,0 +1,137 @@ +/* + * This file tests that a pop3 move filter doesn't leave the + * original message in the inbox. + * + * Original author: David Bienvenu + */ + +/* import-globals-from ../../../test/resources/POP3pump.js */ +load("../../../resources/POP3pump.js"); +const { PromiseTestUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/PromiseTestUtils.jsm" +); + +var gFiles = ["../../../data/bugmail10", "../../../data/bugmail11"]; + +// make sure limiting download size doesn't causes issues with move filters. +Services.prefs.setBoolPref( + "mail.server.default.limit_offline_message_size", + true +); +Services.prefs.setBoolPref("mail.server.default.leave_on_server", true); + +// Currently we have two mailbox storage formats. +var gPluggableStores = [ + "@mozilla.org/msgstore/berkeleystore;1", + "@mozilla.org/msgstore/maildirstore;1", +]; + +var previews = { + "[Bug 436880] IMAP itemDeleted and itemMoveCopyCompleted notifications quite broken": + "Do not reply to this email. You can add comments to this bug at https://bugzilla.mozilla.org/show_bug.cgi?id=436880 -- Configure bugmail: https://bugzilla.mozilla.org/userprefs.cgi?tab=email ------- You are receiving this mail because: -----", + "Bugzilla: confirm account creation": + "Bugzilla has received a request to create a user account using your email address (example@example.org). To confirm that you want to create an account using that email address, visit the following link: https://bugzilla.mozilla.org/token.cgi?t=xxx", +}; + +var gMoveFolder; +var gFilter; // the test filter +var gFilterList; +var gTestArray = [ + function createFilters() { + gFilterList = gPOP3Pump.fakeServer.getFilterList(null); + gFilter = gFilterList.createFilter("MoveAll"); + let searchTerm = gFilter.createTerm(); + searchTerm.matchAll = true; + gFilter.appendTerm(searchTerm); + let moveAction = gFilter.createAction(); + moveAction.type = Ci.nsMsgFilterAction.MoveToFolder; + moveAction.targetFolderUri = gMoveFolder.URI; + gFilter.appendAction(moveAction); + gFilter.enabled = true; + gFilter.filterType = Ci.nsMsgFilterType.InboxRule; + gFilterList.insertFilterAt(0, gFilter); + }, + // just get a message into the local folder + async function getLocalMessages1() { + gPOP3Pump.files = gFiles; + await gPOP3Pump.run(); + }, + async function verifyFolders2() { + Assert.equal(folderCount(gMoveFolder), 2); + // the local inbox folder should now be empty, since we moved incoming mail. + Assert.equal(folderCount(localAccountUtils.inboxFolder), 0); + + // invalidate the inbox summary file, to be sure that we really moved + // the mail. + localAccountUtils.inboxFolder.msgDatabase.summaryValid = false; + localAccountUtils.inboxFolder.msgDatabase = null; + localAccountUtils.inboxFolder.ForceDBClosed(); + let promiseUrlListener = new PromiseTestUtils.PromiseUrlListener(); + try { + localAccountUtils.inboxFolder.getDatabaseWithReparse( + promiseUrlListener, + null + ); + } catch (ex) { + await promiseUrlListener.promise; + Assert.ok(ex.result == Cr.NS_ERROR_NOT_INITIALIZED); + return; + } + // This statement isn't reached since the error is thrown. + Assert.ok(false); + }, + function verifyMessages() { + let hdrs = []; + let keys = []; + for (let hdr of gMoveFolder.msgDatabase.enumerateMessages()) { + keys.push(hdr.messageKey); + hdrs.push(hdr); + } + Assert.ok(!gMoveFolder.fetchMsgPreviewText(keys, null)); + Assert.equal( + hdrs[0].getStringProperty("preview"), + previews[hdrs[0].subject] + ); + Assert.equal( + hdrs[1].getStringProperty("preview"), + previews[hdrs[1].subject] + ); + }, +]; + +function folderCount(folder) { + return [...folder.msgDatabase.enumerateMessages()].length; +} + +function setup_store(storeID) { + return function _setup_store() { + // Reset pop3Pump with correct mailbox format. + gPOP3Pump.resetPluggableStore(storeID); + + // Make sure we're not quarantining messages + Services.prefs.setBoolPref("mailnews.downloadToTempFile", false); + + if (!localAccountUtils.inboxFolder) { + localAccountUtils.loadLocalMailAccount(); + } + + gMoveFolder = + localAccountUtils.rootFolder.createLocalSubfolder("MoveFolder"); + }; +} + +function run_test() { + for (let store of gPluggableStores) { + add_task(setup_store(store)); + gTestArray.forEach(x => add_task(x)); + } + + add_task(exitTest); + run_next_test(); +} + +function exitTest() { + // Cleanup and exit the test. + info("Exiting mail tests\n"); + gPOP3Pump = null; +} -- cgit v1.2.3