summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js')
-rw-r--r--comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js250
1 files changed, 250 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js b/comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js
new file mode 100644
index 0000000000..71d448a068
--- /dev/null
+++ b/comm/mail/test/browser/folder-pane/browser_displayMessageWithFolderModes.js
@@ -0,0 +1,250 @@
+/* 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/. */
+
+/*
+ * Test that displaying messages in folder tabs works correctly with folder
+ * modes. This includes:
+ * - switching to the default folder mode if the folder isn't present in the
+ * current folder mode
+ * - not switching otherwise
+ * - making sure that we're able to expand the right folders in the smart folder
+ * mode
+ */
+
+"use strict";
+
+var {
+ assert_folder_child_in_view,
+ assert_folder_collapsed,
+ assert_folder_expanded,
+ assert_folder_mode,
+ assert_folder_not_visible,
+ assert_folder_selected_and_displayed,
+ assert_folder_tree_view_row_count,
+ assert_folder_visible,
+ assert_message_not_in_view,
+ assert_selected_and_displayed,
+ be_in_folder,
+ collapse_folder,
+ display_message_in_folder_tab,
+ get_smart_folder_named,
+ inboxFolder,
+ make_message_sets_in_folders,
+ mc,
+ select_none,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+
+var folder;
+var dummyFolder;
+var inbox2Folder;
+var smartInboxFolder;
+
+var msgHdr;
+
+add_setup(async function () {
+ assert_folder_mode("all");
+ assert_folder_tree_view_row_count(7);
+
+ // This is a subfolder of the inbox so that
+ // test_display_message_in_smart_folder_mode_works is able to test that we
+ // don't attempt to expand any inboxes.
+ inboxFolder.createSubfolder("DisplayMessageWithFolderModesA", null);
+ folder = inboxFolder.getChildNamed("DisplayMessageWithFolderModesA");
+ // This second folder is meant to act as a dummy folder to switch to when we
+ // want to not be in folder.
+ inboxFolder.createSubfolder("DisplayMessageWithFolderModesB", null);
+ dummyFolder = inboxFolder.getChildNamed("DisplayMessageWithFolderModesB");
+ await make_message_sets_in_folders([folder], [{ count: 5 }]);
+ // The message itself doesn't really matter, as long as there's at least one
+ // in the inbox. We will delete this in teardownModule because the inbox
+ // is a shared resource and it's not okay to leave stuff in there.
+ await make_message_sets_in_folders([inboxFolder], [{ count: 1 }]);
+
+ // Create another subfolder on the top level that is not a parent of the
+ // 2 folders so that it is not visible in Favorite mode.
+ inboxFolder.server.rootFolder.createSubfolder("Inbox2", null);
+ inbox2Folder = inboxFolder.server.rootFolder.getChildNamed("Inbox2");
+
+ await be_in_folder(folder);
+ msgHdr = mc.window.gFolderDisplay.view.dbView.getMsgHdrAt(0);
+});
+
+/**
+ * Test that displaying a message causes a switch to the default folder mode if
+ * the folder isn't present in the current folder mode.
+ */
+add_task(
+ async function test_display_message_with_folder_not_present_in_current_folder_mode() {
+ // Make sure the folder doesn't appear in the favorite folder mode just
+ // because it was selected last before switching
+ await be_in_folder(inboxFolder);
+
+ // Enable the favorite folders view. This folder isn't currently a favorite
+ // folder.
+ mc.folderTreeView.activeModes = "favorite";
+ // Hide the all folders view. The activeModes setter takes care of removing
+ // the mode is is already visible.
+ mc.folderTreeView.activeModes = "all";
+
+ assert_folder_not_visible(folder);
+ assert_folder_not_visible(inboxFolder);
+ assert_folder_not_visible(inbox2Folder);
+
+ // Try displaying a message
+ display_message_in_folder_tab(msgHdr);
+
+ assert_folder_mode("favorite");
+ assert_folder_selected_and_displayed(folder);
+ assert_selected_and_displayed(msgHdr);
+ }
+);
+
+/**
+ * Test that displaying a message _does not_ cause a switch to the default
+ * folder mode if the folder is present in the current folder mode.
+ */
+add_task(
+ async function test_display_message_with_folder_present_in_current_folder_mode() {
+ // Mark the folder as a favorite
+ folder.setFlag(Ci.nsMsgFolderFlags.Favorite);
+ // Also mark the dummy folder as a favorite, in preparation for
+ // test_display_message_in_smart_folder_mode_works
+ dummyFolder.setFlag(Ci.nsMsgFolderFlags.Favorite);
+
+ // Make sure the folder doesn't appear in the favorite folder mode just
+ // because it was selected last before switching
+ await be_in_folder(inboxFolder);
+
+ // Hide the all folders view. The activeModes setter takes care of removing
+ // the mode if is already visible.
+ mc.folderTreeView.activeModes = "all";
+
+ // Select the folder to open the parent row.
+ await be_in_folder(folder);
+
+ assert_folder_visible(folder);
+ assert_folder_visible(dummyFolder);
+ // Also their parent folder should be visible.
+ assert_folder_visible(inboxFolder);
+ // But not a sibling of their parent, which is not Favorite.
+ assert_folder_not_visible(inbox2Folder);
+
+ // Try displaying a message
+ display_message_in_folder_tab(msgHdr);
+
+ assert_folder_mode("favorite");
+ assert_folder_selected_and_displayed(folder);
+ assert_selected_and_displayed(msgHdr);
+
+ // Now unset the flags so that we don't affect later tests.
+ folder.clearFlag(Ci.nsMsgFolderFlags.Favorite);
+ dummyFolder.clearFlag(Ci.nsMsgFolderFlags.Favorite);
+ }
+);
+
+/**
+ * Test that displaying a message in smart folders mode causes the parent in the
+ * view to expand.
+ */
+add_task(async function test_display_message_in_smart_folder_mode_works() {
+ // Clear the message selection, otherwise msgHdr will still be displayed and
+ // display_message_in_folder_tab(msgHdr) will be a no-op.
+ select_none();
+ // Show the smart folder view before removing the favorite view.
+ mc.folderTreeView.activeModes = "smart";
+ // Hide the favorite view. The activeModes setter takes care of removing a
+ // view if is currently active.
+ mc.folderTreeView.activeModes = "favorite";
+
+ // Switch to the dummy folder, otherwise msgHdr will be in the view and the
+ // display message in folder tab logic will simply select the message without
+ // bothering to expand any folders.
+ await be_in_folder(dummyFolder);
+
+ let rootFolder = folder.server.rootFolder;
+ // Check that the folder is actually the child of the account root
+ assert_folder_child_in_view(folder, rootFolder);
+
+ // Collapse everything
+ smartInboxFolder = get_smart_folder_named("Inbox");
+ collapse_folder(smartInboxFolder);
+ assert_folder_collapsed(smartInboxFolder);
+ collapse_folder(rootFolder);
+ assert_folder_collapsed(rootFolder);
+ assert_folder_not_visible(folder);
+
+ // Try displaying the message
+ display_message_in_folder_tab(msgHdr);
+
+ // Check that the right folders have expanded
+ assert_folder_mode("smart");
+ assert_folder_collapsed(smartInboxFolder);
+ assert_folder_expanded(rootFolder);
+ assert_folder_selected_and_displayed(folder);
+ assert_selected_and_displayed(msgHdr);
+});
+
+/**
+ * Test that displaying a message in an inbox in smart folders mode causes the
+ * message to be displayed in the smart inbox.
+ */
+add_task(
+ async function test_display_inbox_message_in_smart_folder_mode_works() {
+ await be_in_folder(inboxFolder);
+ let inboxMsgHdr = mc.window.gFolderDisplay.view.dbView.getMsgHdrAt(0);
+
+ // Collapse everything
+ collapse_folder(smartInboxFolder);
+ assert_folder_collapsed(smartInboxFolder);
+ assert_folder_not_visible(inboxFolder);
+ let rootFolder = folder.server.rootFolder;
+ collapse_folder(rootFolder);
+ assert_folder_collapsed(rootFolder);
+
+ // Move to a different folder
+ await be_in_folder(get_smart_folder_named("Trash"));
+ assert_message_not_in_view(inboxMsgHdr);
+
+ // Try displaying the message
+ display_message_in_folder_tab(inboxMsgHdr);
+
+ // Check that nothing has expanded, and that the right folder is selected
+ assert_folder_mode("smart");
+ assert_folder_collapsed(smartInboxFolder);
+ assert_folder_collapsed(rootFolder);
+ assert_folder_selected_and_displayed(smartInboxFolder);
+ assert_selected_and_displayed(inboxMsgHdr);
+ }
+);
+
+/**
+ * Move back to the all folders mode.
+ */
+add_task(function test_switch_to_all_folders() {
+ // Hide the smart folders view enabled in the previous test. The activeModes
+ // setter should take care of restoring the "all" view and prevent and empty
+ // Folder pane.
+ mc.folderTreeView.activeModes = "smart";
+ assert_folder_mode("all");
+ assert_folder_tree_view_row_count(10);
+});
+
+registerCleanupFunction(function () {
+ // Remove our folders
+ inboxFolder.propagateDelete(folder, true);
+ inboxFolder.propagateDelete(dummyFolder, true);
+ inboxFolder.server.rootFolder.propagateDelete(inbox2Folder, true);
+ assert_folder_tree_view_row_count(7);
+
+ document.getElementById("folderTree").focus();
+
+ Assert.report(
+ false,
+ undefined,
+ undefined,
+ "Test ran to completion successfully"
+ );
+});