diff options
Diffstat (limited to 'comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js')
-rw-r--r-- | comm/mail/test/browser/composition/browser_newmsgComposeIdentity.js | 273 |
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); +}); |