summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js')
-rw-r--r--comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js273
1 files changed, 273 insertions, 0 deletions
diff --git a/comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js b/comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js
new file mode 100644
index 0000000000..ad796dbfaa
--- /dev/null
+++ b/comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js
@@ -0,0 +1,273 @@
+/* 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 that compose new message chooses the correct initial identity when
+ * called from the context of an open composer.
+ */
+
+"use strict";
+
+var utils = ChromeUtils.import("resource://testing-common/mozmill/utils.jsm");
+var {
+ close_compose_window,
+ open_compose_new_mail,
+ save_compose_message,
+ wait_for_compose_window,
+} = ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm");
+var { be_in_folder, get_special_folder, mc, press_delete, select_click_row } =
+ ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+ );
+var { click_menus_in_sequence, plan_for_new_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var gInbox;
+var gDrafts;
+var account;
+
+var identityKey1;
+var identity1Email = "x@example.invalid";
+var identityKey2;
+var identity2Email = "y@example.invalid";
+var identity2Name = "User Y";
+var identity2From = identity2Name + " <" + identity2Email + ">";
+var identityKey3;
+var identity3Email = "z@example.invalid";
+var identity3Name = "User Z";
+var identity3Label = "Label Z";
+var identityKey4;
+
+add_setup(async function () {
+ // Now set up an account with some identities.
+ account = MailServices.accounts.createAccount();
+ account.incomingServer = MailServices.accounts.createIncomingServer(
+ "nobody",
+ "New Msg Compose Identity Testing",
+ "pop3"
+ );
+
+ let identity1 = MailServices.accounts.createIdentity();
+ identity1.email = identity1Email;
+ account.addIdentity(identity1);
+ identityKey1 = identity1.key;
+
+ let identity2 = MailServices.accounts.createIdentity();
+ identity2.email = identity2Email;
+ identity2.fullName = identity2Name;
+ account.addIdentity(identity2);
+ identityKey2 = identity2.key;
+
+ let identity3 = MailServices.accounts.createIdentity();
+ identity3.email = identity3Email;
+ identity3.fullName = identity3Name;
+ identity3.label = identity3Label;
+ account.addIdentity(identity3);
+ identityKey3 = identity3.key;
+
+ // Identity with no data.
+ let identity4 = MailServices.accounts.createIdentity();
+ account.addIdentity(identity4);
+ identityKey4 = identity4.key;
+
+ gInbox = account.incomingServer.rootFolder.getFolderWithFlags(
+ Ci.nsMsgFolderFlags.Inbox
+ );
+ gDrafts = await get_special_folder(Ci.nsMsgFolderFlags.Drafts, true);
+});
+
+/**
+ * Helper to check that a suitable From identity was set up in the given
+ * composer window.
+ *
+ * @param cwc Compose window controller.
+ * @param aIdentityKey The key of the expected identity.
+ * @param aIdentityAlias The displayed label of the expected identity.
+ * @param aIdentityValue The value of the expected identity
+ * (the sender address to be sent out).
+ */
+function checkCompIdentity(cwc, aIdentityKey, aIdentityAlias, aIdentityValue) {
+ let identityList = cwc.window.document.getElementById("msgIdentity");
+
+ Assert.equal(
+ cwc.window.getCurrentIdentityKey(),
+ aIdentityKey,
+ "The From identity is not correctly selected"
+ );
+
+ if (aIdentityAlias) {
+ Assert.equal(
+ identityList.label,
+ aIdentityAlias,
+ "The From address does not have the correct label"
+ );
+ }
+
+ if (aIdentityValue) {
+ Assert.equal(
+ identityList.value,
+ aIdentityValue,
+ "The From address does not have the correct value"
+ );
+ }
+}
+
+/**
+ * Test that starting a new message from an open compose window gets the
+ * expected initial identity.
+ */
+add_task(async function test_compose_from_composer() {
+ await be_in_folder(gInbox);
+
+ let cwc = open_compose_new_mail();
+ checkCompIdentity(cwc, account.defaultIdentity.key);
+
+ // Compose a new message from the compose window.
+ plan_for_new_window("msgcompose");
+ EventUtils.synthesizeKey(
+ "n",
+ { shiftKey: false, accelKey: true },
+ cwc.window
+ );
+ let newCompWin = wait_for_compose_window();
+ checkCompIdentity(newCompWin, account.defaultIdentity.key);
+ close_compose_window(newCompWin);
+
+ // Switch to identity2 in the main compose window, new compose windows
+ // starting from here should use the same identity as its "parent".
+ await chooseIdentity(cwc.window, identityKey2);
+ checkCompIdentity(cwc, identityKey2);
+
+ // Compose a second new message from the compose window.
+ plan_for_new_window("msgcompose");
+ EventUtils.synthesizeKey(
+ "n",
+ { shiftKey: false, accelKey: true },
+ cwc.window
+ );
+ let newCompWin2 = wait_for_compose_window();
+ checkCompIdentity(newCompWin2, identityKey2);
+
+ close_compose_window(newCompWin2);
+
+ close_compose_window(cwc);
+});
+
+/**
+ * Bug 87987
+ * Test editing the identity email/name for the current composition.
+ */
+add_task(async function test_editing_identity() {
+ Services.prefs.setBoolPref("mail.compose.warned_about_customize_from", true);
+ await be_in_folder(gInbox);
+
+ let compWin = open_compose_new_mail();
+ checkCompIdentity(compWin, account.defaultIdentity.key, identity1Email);
+
+ // Input custom identity data into the From field.
+ let customName = "custom";
+ let customEmail = "custom@edited.invalid";
+ let identityCustom = customName + " <" + customEmail + ">";
+
+ EventUtils.synthesizeMouseAtCenter(
+ compWin.window.document.getElementById("msgIdentity"),
+ {},
+ compWin.window.document.getElementById("msgIdentity").ownerGlobal
+ );
+ await click_menus_in_sequence(
+ compWin.window.document.getElementById("msgIdentityPopup"),
+ [{ command: "cmd_customizeFromAddress" }]
+ );
+ utils.waitFor(
+ () => compWin.window.document.getElementById("msgIdentity").editable
+ );
+
+ compWin.window.document.getElementById("msgIdentityPopup").focus();
+ EventUtils.sendString(identityCustom, compWin.window);
+ checkCompIdentity(
+ compWin,
+ account.defaultIdentity.key,
+ identityCustom,
+ identityCustom
+ );
+ close_compose_window(compWin);
+
+ /* Temporarily disabled due to intermittent failure, bug 1237565.
+ TODO: To be reeabled in bug 1238264.
+ // Save message with this changed identity.
+ compWin.window.SaveAsDraft();
+
+ // Switch to another identity to see if editable field still obeys predefined
+ // identity values.
+ await click_menus_in_sequence(compWin.window.document.getElementById("msgIdentityPopup"),
+ [ { identitykey: identityKey2 } ]);
+ checkCompIdentity(compWin, identityKey2, identity2From, identity2From);
+
+ // This should not save the identity2 to the draft message.
+ close_compose_window(compWin);
+
+ await be_in_folder(gDrafts);
+ let curMessage = select_click_row(0);
+ Assert.equal(curMessage.author, identityCustom);
+ // Remove the saved draft.
+ press_delete(mc);
+ */
+ Services.prefs.setBoolPref("mail.compose.warned_about_customize_from", false);
+});
+
+/**
+ * Bug 318495
+ * Test how an identity displays and behaves in the compose window.
+ */
+add_task(async function test_display_of_identities() {
+ await be_in_folder(gInbox);
+
+ let cwc = open_compose_new_mail();
+ checkCompIdentity(cwc, account.defaultIdentity.key, identity1Email);
+
+ await chooseIdentity(cwc.window, identityKey2);
+ checkCompIdentity(cwc, identityKey2, identity2From, identity2From);
+
+ await chooseIdentity(cwc.window, identityKey4);
+ checkCompIdentity(
+ cwc,
+ identityKey4,
+ "[nsIMsgIdentity: " + identityKey4 + "]"
+ );
+
+ await chooseIdentity(cwc.window, identityKey3);
+ let identity3From = identity3Name + " <" + identity3Email + ">";
+ checkCompIdentity(
+ cwc,
+ identityKey3,
+ identity3From + " (" + identity3Label + ")",
+ identity3From
+ );
+
+ // Bug 1152045, check that the email address from the selected identity
+ // is properly used for the From field in the created message.
+ await save_compose_message(cwc.window);
+ close_compose_window(cwc);
+
+ await be_in_folder(gDrafts);
+ let curMessage = select_click_row(0);
+ Assert.equal(curMessage.author, identity3From);
+ // Remove the saved draft.
+ press_delete(mc);
+});
+
+registerCleanupFunction(function () {
+ account.removeIdentity(MailServices.accounts.getIdentity(identityKey1));
+ account.removeIdentity(MailServices.accounts.getIdentity(identityKey2));
+ account.removeIdentity(MailServices.accounts.getIdentity(identityKey3));
+
+ // The last identity of an account can't be removed so clear all its prefs
+ // which effectively destroys it.
+ MailServices.accounts.getIdentity(identityKey4).clearAllValues();
+ MailServices.accounts.removeAccount(account);
+});