summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/multiple-identities/browser_displayNames.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/multiple-identities/browser_displayNames.js')
-rw-r--r--comm/mail/test/browser/multiple-identities/browser_displayNames.js224
1 files changed, 224 insertions, 0 deletions
diff --git a/comm/mail/test/browser/multiple-identities/browser_displayNames.js b/comm/mail/test/browser/multiple-identities/browser_displayNames.js
new file mode 100644
index 0000000000..66344d8147
--- /dev/null
+++ b/comm/mail/test/browser/multiple-identities/browser_displayNames.js
@@ -0,0 +1,224 @@
+/* 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 we can open and close a standalone message display window from the
+ * folder pane.
+ */
+
+"use strict";
+
+var { ensure_card_exists, ensure_no_card_exists } = ChromeUtils.import(
+ "resource://testing-common/mozmill/AddressBookHelpers.jsm"
+);
+var {
+ add_message_to_folder,
+ be_in_folder,
+ create_folder,
+ create_message,
+ get_about_message,
+ mc,
+ select_click_row,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var folder;
+var decoyFolder;
+var localAccount;
+var secondIdentity;
+var myEmail = "sender@nul.invalid"; // Dictated by messagerInjector.js
+var friendEmail = "carl@sagan.invalid";
+var friendName = "Carl Sagan";
+var headertoFieldMe;
+var collectedAddresses;
+
+add_setup(async function () {
+ localAccount = MailServices.accounts.FindAccountForServer(
+ MailServices.accounts.localFoldersServer
+ );
+
+ // We need to make sure we have only one identity:
+ // 1) Delete all accounts except for Local Folders
+ for (let account of MailServices.accounts.accounts) {
+ if (account != localAccount) {
+ MailServices.accounts.removeAccount(account);
+ }
+ }
+
+ // 2) Delete all identities except for one
+ for (let i = localAccount.identities.length - 1; i >= 0; i--) {
+ let identity = localAccount.identities[i];
+ if (identity.email != myEmail) {
+ localAccount.removeIdentity(identity);
+ }
+ }
+
+ // 3) Create a second identity and hold onto it for later
+ secondIdentity = MailServices.accounts.createIdentity();
+ secondIdentity.email = "nobody@nowhere.invalid";
+
+ folder = await create_folder("DisplayNamesA");
+ decoyFolder = await create_folder("DisplayNamesB");
+
+ // # 0
+ await add_message_to_folder(
+ [folder],
+ create_message({ to: [["", myEmail]] })
+ );
+ // # 1
+ await add_message_to_folder(
+ [folder],
+ create_message({ from: ["", friendEmail] })
+ );
+ // # 2
+ await add_message_to_folder(
+ [folder],
+ create_message({ from: [friendName, friendEmail] })
+ );
+ // # 3 - a message I got with a custom address to myself
+ await add_message_to_folder(
+ [folder],
+ create_message({ to: [["Customized", myEmail]] })
+ );
+
+ // Ensure all the directories are initialised.
+ MailServices.ab.directories;
+ collectedAddresses = MailServices.ab.getDirectory(
+ "jsaddrbook://history.sqlite"
+ );
+
+ let bundle = Services.strings.createBundle(
+ "chrome://messenger/locale/messenger.properties"
+ );
+ headertoFieldMe = bundle.GetStringFromName("headertoFieldMe");
+});
+
+function ensure_single_identity() {
+ if (localAccount.identities.length > 1) {
+ localAccount.removeIdentity(secondIdentity);
+ }
+ Assert.ok(
+ MailServices.accounts.allIdentities.length == 1,
+ "Expected 1 identity, but got " +
+ MailServices.accounts.allIdentities.length +
+ " identities"
+ );
+}
+
+function ensure_multiple_identities() {
+ if (localAccount.identities.length == 1) {
+ localAccount.addIdentity(secondIdentity);
+ }
+ Assert.ok(
+ MailServices.accounts.allIdentities.length > 1,
+ "Expected multiple identities, but got only one identity"
+ );
+}
+
+async function help_test_display_name(message, field, expectedValue) {
+ // Switch to a decoy folder first to ensure that we refresh the message we're
+ // looking at in order to update information changed in address book entries.
+ await be_in_folder(decoyFolder);
+ await be_in_folder(folder);
+ select_click_row(message);
+
+ Assert.equal(
+ get_about_message().document.querySelector(
+ `#expanded${field}Box .header-recipient .recipient-single-line`
+ ).textContent,
+ expectedValue,
+ "The expected value matches the found value"
+ );
+}
+
+add_task(async function test_single_identity() {
+ ensure_no_card_exists(myEmail);
+ ensure_single_identity();
+ await help_test_display_name(0, "to", headertoFieldMe);
+
+ await help_test_display_name(3, "to", `Customized <${myEmail}>`);
+});
+
+add_task(async function test_single_identity_in_abook() {
+ ensure_card_exists(myEmail, "President Frankenstein", true);
+ ensure_single_identity();
+ await help_test_display_name(0, "to", "President Frankenstein");
+});
+
+add_task(async function test_single_identity_in_abook_no_pdn() {
+ ensure_card_exists(myEmail, "President Frankenstein");
+ ensure_single_identity();
+ await help_test_display_name(0, "to", headertoFieldMe);
+});
+
+add_task(async function test_multiple_identities() {
+ ensure_no_card_exists(myEmail);
+ ensure_multiple_identities();
+ await help_test_display_name(0, "to", myEmail);
+
+ await help_test_display_name(3, "to", `Customized <${myEmail}>`);
+});
+
+add_task(async function test_multiple_identities_in_abook() {
+ ensure_card_exists(myEmail, "President Frankenstein", true);
+ ensure_multiple_identities();
+ await help_test_display_name(0, "to", "President Frankenstein");
+});
+
+add_task(async function test_multiple_identities_in_abook_no_pdn() {
+ ensure_card_exists(myEmail, "President Frankenstein");
+ ensure_multiple_identities();
+ await help_test_display_name(0, "to", myEmail);
+
+ await help_test_display_name(3, "to", `Customized <${myEmail}>`);
+});
+
+add_task(async function test_no_header_name() {
+ ensure_no_card_exists(friendEmail);
+ ensure_single_identity();
+ await help_test_display_name(1, "from", friendEmail);
+});
+
+add_task(async function test_no_header_name_in_abook() {
+ ensure_card_exists(friendEmail, "My Buddy", true);
+ ensure_single_identity();
+ await help_test_display_name(1, "from", "My Buddy");
+});
+
+add_task(async function test_no_header_name_in_abook_no_pdn() {
+ ensure_card_exists(friendEmail, "My Buddy");
+ ensure_single_identity();
+ // With address book entry but display name not preferred, we display name and
+ // e-mail address or only the e-mail address if no name exists.
+ await help_test_display_name(1, "from", "carl@sagan.invalid");
+});
+
+add_task(async function test_header_name() {
+ ensure_no_card_exists(friendEmail);
+ ensure_single_identity();
+ await help_test_display_name(
+ 2,
+ "from",
+ friendName + " <" + friendEmail + ">"
+ );
+});
+
+add_task(async function test_header_name_in_abook() {
+ ensure_card_exists(friendEmail, "My Buddy", true);
+ ensure_single_identity();
+ await help_test_display_name(2, "from", "My Buddy");
+});
+
+add_task(async function test_header_name_in_abook_no_pdn() {
+ ensure_card_exists(friendEmail, "My Buddy");
+ ensure_single_identity();
+ // With address book entry but display name not preferred, we display name and
+ // e-mail address.
+ await help_test_display_name(2, "from", "Carl Sagan <carl@sagan.invalid>");
+});