summaryrefslogtreecommitdiffstats
path: root/comm/mail/base/test/browser/browser_smartFolderDelete.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/base/test/browser/browser_smartFolderDelete.js')
-rw-r--r--comm/mail/base/test/browser/browser_smartFolderDelete.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/comm/mail/base/test/browser/browser_smartFolderDelete.js b/comm/mail/base/test/browser/browser_smartFolderDelete.js
new file mode 100644
index 0000000000..1c3f1fb59c
--- /dev/null
+++ b/comm/mail/base/test/browser/browser_smartFolderDelete.js
@@ -0,0 +1,75 @@
+/* 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/. */
+
+const { VirtualFolderHelper } = ChromeUtils.import(
+ "resource:///modules/VirtualFolderWrapper.jsm"
+);
+
+const { MessageGenerator } = ChromeUtils.import(
+ "resource://testing-common/mailnews/MessageGenerator.jsm"
+);
+
+const tabmail = document.getElementById("tabmail");
+const about3Pane = tabmail.currentAbout3Pane;
+
+let rootFolder;
+let inboxFolder;
+
+add_setup(async function () {
+ MailServices.accounts.createLocalMailAccount();
+ const account = MailServices.accounts.accounts[0];
+ rootFolder = account.incomingServer.rootFolder;
+ rootFolder.QueryInterface(Ci.nsIMsgLocalMailFolder);
+
+ // Set the active modes of the folder pane. In theory we only need the "smart"
+ // mode to test with, but in practice we also need the "all" mode to generate
+ // messages in folders.
+ about3Pane.folderPane.activeModes = ["all", "smart"];
+
+ registerCleanupFunction(() => {
+ MailServices.accounts.removeAccount(account, false);
+ about3Pane.folderPane.activeModes = ["all"];
+ });
+});
+
+/**
+ * Test deleting a message from a smart folder using
+ * gDBView.applyCommandToIndices.
+ */
+add_task(async function testDeleteViaDBViewCommand() {
+ // Create an inbox folder.
+ const inboxFolder = rootFolder
+ .createLocalSubfolder("testDeleteInbox")
+ .QueryInterface(Ci.nsIMsgLocalMailFolder);
+ inboxFolder.setFlag(Ci.nsMsgFolderFlags.Inbox);
+
+ // Add a message to the folder.
+ const generator = new MessageGenerator();
+ inboxFolder.addMessage(generator.makeMessage().toMboxString());
+
+ // Create a smart folder from the inbox.
+ const smartInboxFolder = getSmartServer().rootFolder.getFolderWithFlags(
+ Ci.nsMsgFolderFlags.Inbox
+ );
+
+ // Switch the view to the smart folder.
+ about3Pane.displayFolder(smartInboxFolder.URI);
+
+ // Get the DB view and tree view to use to send the command and observe its
+ // effect.
+ const dbView = about3Pane.gDBView;
+ const treeView = dbView.QueryInterface(Ci.nsITreeView);
+
+ // Ensure we currently have one message.
+ Assert.equal(treeView.rowCount, 1, "should have one message before deleting");
+
+ // Delete the message using applyCommandToIndices.
+ dbView.applyCommandToIndices(Ci.nsMsgViewCommandType.deleteMsg, [0]);
+
+ // Test that the message has been deleted.
+ await TestUtils.waitForCondition(
+ () => treeView.rowCount === 0,
+ "there should be no remaining message in the tree"
+ );
+});