diff options
Diffstat (limited to '')
-rw-r--r-- | comm/mailnews/base/test/unit/test_retention.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/unit/test_retention.js b/comm/mailnews/base/test/unit/test_retention.js new file mode 100644 index 0000000000..38038015b1 --- /dev/null +++ b/comm/mailnews/base/test/unit/test_retention.js @@ -0,0 +1,66 @@ +/* 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/. */ + +/* + * Simple tests for retention settings. In particular, we'd like to make + * sure that applying retention settings works with the new code that avoids + * opening db's to apply retention settings if the folder doesn't override + * the server defaults. + */ + +var { MessageGenerator, MessageScenarioFactory, SyntheticMessageSet } = + ChromeUtils.import("resource://testing-common/mailnews/MessageGenerator.jsm"); +var { MessageInjection } = ChromeUtils.import( + "resource://testing-common/mailnews/MessageInjection.jsm" +); + +var gMessageGenerator = new MessageGenerator(); +var gScenarioFactory = new MessageScenarioFactory(gMessageGenerator); +var messageInjection = new MessageInjection({ mode: "local" }); + +var gTestFolder; + +add_setup(async function () { + // Add 10 messages + let messages = []; + messages = messages.concat(gScenarioFactory.directReply(10)); + + let msgSet = new SyntheticMessageSet(messages); + + gTestFolder = await messageInjection.makeEmptyFolder(); + await messageInjection.addSetsToFolders([gTestFolder], [msgSet]); +}); + +add_task(function test_retention() { + let numMessages = 10; + gTestFolder.msgDatabase = null; + gTestFolder.applyRetentionSettings(); + const gDbService = Cc["@mozilla.org/msgDatabase/msgDBService;1"].getService( + Ci.nsIMsgDBService + ); + // adding messages leaves some headers around as garbage - make sure + // those are cleaned up so the db will get closed. + Cu.forceGC(); + Cu.forceCC(); + Assert.equal(gDbService.cachedDBForFolder(gTestFolder), null); + // no retention settings, so we should have the same number of messages. + Assert.equal(numMessages, gTestFolder.msgDatabase.dBFolderInfo.numMessages); + let serverSettings = gTestFolder.server.retentionSettings; + serverSettings.retainByPreference = + Ci.nsIMsgRetentionSettings.nsMsgRetainByNumHeaders; + serverSettings.numHeadersToKeep = 9; + gTestFolder.server.retentionSettings = serverSettings; + gTestFolder.applyRetentionSettings(); + // no retention settings, so we should have the same number of messages. + Assert.equal(9, gTestFolder.msgDatabase.dBFolderInfo.numMessages); + let folderSettings = gTestFolder.retentionSettings; + folderSettings.retainByPreference = + Ci.nsIMsgRetentionSettings.nsMsgRetainByNumHeaders; + folderSettings.numHeadersToKeep = 8; + folderSettings.useServerDefaults = false; + gTestFolder.retentionSettings = folderSettings; + gTestFolder.applyRetentionSettings(); + // no retention settings, so we should have the same number of messages. + Assert.equal(8, gTestFolder.msgDatabase.dBFolderInfo.numMessages); +}); |