summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/folder-display/browser_applyView.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/folder-display/browser_applyView.js')
-rw-r--r--comm/mail/test/browser/folder-display/browser_applyView.js331
1 files changed, 331 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-display/browser_applyView.js b/comm/mail/test/browser/folder-display/browser_applyView.js
new file mode 100644
index 0000000000..d5b5654fe4
--- /dev/null
+++ b/comm/mail/test/browser/folder-display/browser_applyView.js
@@ -0,0 +1,331 @@
+/* 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/. */
+
+/**
+ * Tests Apply Current View To…
+ */
+
+"use strict";
+
+var { be_in_folder, create_folder, get_about_3pane } = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { click_menus_in_sequence } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+
+// These are for the reset/apply to other/apply to other+child tests.
+var folderSource, folderParent, folderChild1;
+
+add_setup(async function () {
+ folderSource = await create_folder("ColumnsApplySource");
+
+ folderParent = await create_folder("ColumnsApplyParent");
+ folderParent.createSubfolder("Child1", null);
+ folderChild1 = folderParent.getChildNamed("Child1");
+ folderParent.createSubfolder("Child2", null);
+
+ await be_in_folder(folderSource);
+ await ensure_table_view();
+
+ registerCleanupFunction(async () => {
+ await ensure_cards_view();
+ folderParent.deleteSelf(null);
+ folderSource.deleteSelf(null);
+ });
+});
+
+/**
+ * Get the currently visible threadTree columns.
+ */
+add_task(async function testSetViewSingle() {
+ const info = folderSource.msgDatabase.dBFolderInfo;
+
+ Assert.equal(
+ info.viewFlags,
+ Ci.nsMsgViewFlagsType.kThreadedDisplay,
+ "viewFlags should start threaded"
+ );
+ Assert.equal(
+ info.sortType,
+ Ci.nsMsgViewSortType.byDate,
+ "sortType should start byDate"
+ );
+ Assert.equal(
+ info.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ "sortOrder should start ascending"
+ );
+
+ const about3Pane = get_about_3pane();
+
+ const threadCol = about3Pane.document.getElementById("threadCol");
+ EventUtils.synthesizeMouseAtCenter(threadCol, { clickCount: 1 }, about3Pane);
+ await TestUtils.waitForCondition(
+ () => info.viewFlags == Ci.nsMsgViewFlagsType.kNone,
+ "should change viewFlags to none"
+ );
+
+ const subjectCol = about3Pane.document.getElementById("subjectCol");
+ EventUtils.synthesizeMouseAtCenter(subjectCol, { clickCount: 1 }, about3Pane);
+ await TestUtils.waitForCondition(
+ () => info.sortType == Ci.nsMsgViewSortType.bySubject,
+ "should change sortType to subject"
+ );
+
+ EventUtils.synthesizeMouseAtCenter(subjectCol, { clickCount: 1 }, about3Pane);
+ await TestUtils.waitForCondition(
+ () => info.sortOrder == Ci.nsMsgViewSortOrder.descending,
+ "should change sortOrder to sort descending"
+ );
+
+ Assert.equal(
+ info.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ "viewFlags should now be unthreaded"
+ );
+ Assert.equal(
+ info.sortType,
+ Ci.nsMsgViewSortType.bySubject,
+ "sortType should now be bySubject"
+ );
+ Assert.equal(
+ info.sortOrder,
+ Ci.nsMsgViewSortOrder.descending,
+ "sortOrder should now be descending"
+ );
+});
+
+async function invoke_column_picker_option(aActions) {
+ const tabmail = document.getElementById("tabmail");
+ const about3Pane = tabmail.currentAbout3Pane;
+
+ const colPicker = about3Pane.document.querySelector(
+ `th[is="tree-view-table-column-picker"] button`
+ );
+ const colPickerPopup = about3Pane.document.querySelector(
+ `th[is="tree-view-table-column-picker"] menupopup`
+ );
+
+ const shownPromise = BrowserTestUtils.waitForEvent(
+ colPickerPopup,
+ "popupshown"
+ );
+ EventUtils.synthesizeMouseAtCenter(colPicker, {}, about3Pane);
+ await shownPromise;
+ const hiddenPromise = BrowserTestUtils.waitForEvent(
+ colPickerPopup,
+ "popuphidden"
+ );
+ await click_menus_in_sequence(colPickerPopup, aActions);
+ await hiddenPromise;
+}
+
+async function _apply_to_folder_common(aChildrenToo, folder) {
+ let notificatonPromise;
+ if (aChildrenToo) {
+ notificatonPromise = TestUtils.topicObserved("msg-folder-views-propagated");
+ }
+
+ const menuItems = [
+ { class: "applyViewTo-menu" },
+ {
+ class: aChildrenToo
+ ? "applyViewToFolderAndChildren-menu"
+ : "applyViewToFolder-menu",
+ },
+ { label: "Local Folders" },
+ ];
+ if (!folder.isServer) {
+ menuItems.push({ label: folder.name });
+ }
+ menuItems.push(menuItems.at(-1));
+
+ const dialogPromise = BrowserTestUtils.promiseAlertDialog("accept");
+ await invoke_column_picker_option(menuItems);
+ await dialogPromise;
+
+ if (notificatonPromise) {
+ await notificatonPromise;
+ }
+}
+
+/**
+ * Change settings in a folder, apply them to another folder that also has
+ * children. Make sure the folder changes but the children do not.
+ */
+add_task(async function test_apply_to_folder_no_children() {
+ const child1Info = folderChild1.msgDatabase.dBFolderInfo;
+ Assert.equal(
+ child1Info.viewFlags,
+ Ci.nsMsgViewFlagsType.kThreadedDisplay,
+ "viewFlags for child1 should start threaded"
+ );
+ Assert.equal(
+ child1Info.sortType,
+ Ci.nsMsgViewSortType.byDate,
+ "sortType for child1 should start byDate"
+ );
+ Assert.equal(
+ child1Info.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ "sortOrder for child1 should start ascending"
+ );
+
+ // Apply to the one dude
+ await _apply_to_folder_common(false, folderParent);
+
+ // Should apply to the folderParent.
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ "viewFlags should have been applied"
+ );
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.sortType,
+ Ci.nsMsgViewSortType.bySubject,
+ "sortType should have been applied"
+ );
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.sortOrder,
+ Ci.nsMsgViewSortOrder.descending,
+ "sortOrder should have been applied"
+ );
+
+ // Shouldn't have applied to its children.
+ Assert.equal(
+ folderChild1.msgDatabase.dBFolderInfo.viewFlags,
+ Ci.nsMsgViewFlagsType.kThreadedDisplay,
+ "viewFlags should not have been applied to children"
+ );
+ Assert.equal(
+ folderChild1.msgDatabase.dBFolderInfo.sortType,
+ Ci.nsMsgViewSortType.byDate,
+ "sortType should not have been applied to children"
+ );
+ Assert.equal(
+ folderChild1.msgDatabase.dBFolderInfo.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ "sortOrder should not have been applied to children"
+ );
+});
+
+/**
+ * Change settings in a folder, apply them to another folder and its children.
+ * Make sure the folder and its children change.
+ */
+add_task(async function test_apply_to_folder_and_children() {
+ await be_in_folder(folderSource);
+
+ const child1Info = folderChild1.msgDatabase.dBFolderInfo;
+ Assert.equal(
+ child1Info.viewFlags,
+ Ci.nsMsgViewFlagsType.kThreadedDisplay,
+ "viewFlags for child1 should start threaded"
+ );
+ Assert.equal(
+ child1Info.sortType,
+ Ci.nsMsgViewSortType.byDate,
+ "sortType for child1 should start byDate"
+ );
+ Assert.equal(
+ child1Info.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ "sortOrder for child1 should start ascending"
+ );
+
+ // Apply to folder and children.
+ await _apply_to_folder_common(true, folderParent);
+
+ // Should apply to the folderParent.
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ "viewFlags should have been applied to parent"
+ );
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.sortType,
+ Ci.nsMsgViewSortType.bySubject,
+ "sortType should have been applied to parent"
+ );
+ Assert.equal(
+ folderParent.msgDatabase.dBFolderInfo.sortOrder,
+ Ci.nsMsgViewSortOrder.descending,
+ "sortOrder should have been applied"
+ );
+
+ // Should have applied to its children as well.
+ for (const child of folderParent.descendants) {
+ Assert.equal(
+ child.msgDatabase.dBFolderInfo.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ "viewFlags should have been applied to children"
+ );
+ Assert.equal(
+ child.msgDatabase.dBFolderInfo.sortType,
+ Ci.nsMsgViewSortType.bySubject,
+ "sortType should have been applied to children"
+ );
+ Assert.equal(
+ child.msgDatabase.dBFolderInfo.sortOrder,
+ Ci.nsMsgViewSortOrder.descending,
+ "sortOrder should have been applied to children"
+ );
+ }
+});
+
+/**
+ * Change settings in a folder, apply them to the root folder and its children.
+ * Make sure the children change.
+ */
+add_task(async function test_apply_to_root_folder_and_children() {
+ const info = folderSource.msgDatabase.dBFolderInfo;
+ await be_in_folder(folderSource);
+
+ const about3Pane = get_about_3pane();
+ const junkStatusCol = about3Pane.document.getElementById("junkStatusCol");
+ EventUtils.synthesizeMouseAtCenter(
+ junkStatusCol,
+ { clickCount: 1 },
+ about3Pane
+ );
+ Assert.equal(
+ info.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ "viewFlags should be set to unthreaded"
+ );
+ Assert.equal(
+ info.sortType,
+ Ci.nsMsgViewSortType.byJunkStatus,
+ "sortType should be set to junkStatus"
+ );
+ Assert.equal(
+ info.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ "sortOrder should be set to ascending"
+ );
+
+ // Apply to the root folder and its descendants.
+ await _apply_to_folder_common(true, folderSource.rootFolder);
+
+ // Make sure it is copied to all folders of this server.
+ for (const folder of folderSource.rootFolder.descendants) {
+ Assert.equal(
+ folder.msgDatabase.dBFolderInfo.viewFlags,
+ Ci.nsMsgViewFlagsType.kNone,
+ `viewFlags should have been applied to ${folder.name}`
+ );
+ Assert.equal(
+ folder.msgDatabase.dBFolderInfo.sortType,
+ Ci.nsMsgViewSortType.byJunkStatus,
+ `sortType should have been applied to ${folder.name}`
+ );
+ Assert.equal(
+ folder.msgDatabase.dBFolderInfo.sortOrder,
+ Ci.nsMsgViewSortOrder.ascending,
+ `sortOrder should have been applied to ${folder.name}`
+ );
+ folder.msgDatabase = null;
+ }
+});