diff options
Diffstat (limited to 'comm/mail/test/browser/openpgp/browser_perm_decrypt.js')
-rw-r--r-- | comm/mail/test/browser/openpgp/browser_perm_decrypt.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/comm/mail/test/browser/openpgp/browser_perm_decrypt.js b/comm/mail/test/browser/openpgp/browser_perm_decrypt.js new file mode 100644 index 0000000000..10dd0823c3 --- /dev/null +++ b/comm/mail/test/browser/openpgp/browser_perm_decrypt.js @@ -0,0 +1,156 @@ +/* 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 for permanent decryption of email. + */ + +"use strict"; + +const { + be_in_folder, + get_about_3pane, + get_about_message, + get_special_folder, + mc, + select_click_row, +} = ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" +); +const { OpenPGPTestUtils } = ChromeUtils.import( + "resource://testing-common/mozmill/OpenPGPTestUtils.jsm" +); +const { PromiseTestUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/PromiseTestUtils.jsm" +); + +const { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); +const { EnigmailPersistentCrypto } = ChromeUtils.import( + "chrome://openpgp/content/modules/persistentCrypto.jsm" +); + +const MSG_TEXT = "Sundays are nothing without callaloo."; + +function getMsgBodyTxt(mc) { + let msgPane = get_about_message(mc.window).getMessagePaneBrowser(); + return msgPane.contentDocument.documentElement.textContent; +} + +var aliceAcct; +var aliceIdentity; +var initialKeyIdPref = ""; +var gInbox; + +var gDecFolder; + +/** + * Set up the base account, identity and keys needed for the tests. + */ +add_setup(async function () { + aliceAcct = MailServices.accounts.createAccount(); + aliceAcct.incomingServer = MailServices.accounts.createIncomingServer( + "alice", + "openpgp.example", + "pop3" + ); + aliceIdentity = MailServices.accounts.createIdentity(); + aliceIdentity.email = "alice@openpgp.example"; + aliceAcct.addIdentity(aliceIdentity); + + aliceAcct.incomingServer.rootFolder.createSubfolder("decrypted", null); + + gDecFolder = aliceAcct.incomingServer.rootFolder.getChildNamed("decrypted"); + + // Set up the alice's private key. + let [id] = await OpenPGPTestUtils.importPrivateKey( + window, + new FileUtils.File( + getTestFilePath( + "data/keys/alice@openpgp.example-0xf231550c4f47e38e-secret.asc" + ) + ) + ); + + initialKeyIdPref = aliceIdentity.getUnicharAttribute("openpgp_key_id"); + aliceIdentity.setUnicharAttribute("openpgp_key_id", id); + + // Import and accept the public key for Bob, our verified sender. + await OpenPGPTestUtils.importPublicKey( + window, + new FileUtils.File( + getTestFilePath( + "data/keys/bob@openpgp.example-0xfbfcc82a015e7330-pub.asc" + ) + ) + ); + + gInbox = await get_special_folder(Ci.nsMsgFolderFlags.Inbox, true); + await be_in_folder(gInbox); +}); + +add_task(async function testPermanentDecrypt() { + // Fetch a local OpenPGP message. + let openPgpFile = new FileUtils.File( + getTestFilePath( + "data/eml/signed-by-0xfbfcc82a015e7330-encrypted-to-0xf231550c4f47e38e.eml" + ) + ); + + // Add the fetched OpenPGP message to the inbox folder. + let copyListener = new PromiseTestUtils.PromiseCopyListener(); + MailServices.copy.copyFileMessage( + openPgpFile, + gInbox, + null, + false, + 0, + "", + copyListener, + null + ); + await copyListener.promise; + + // Select the first row. + select_click_row(0); + + let aboutMessage = get_about_message(); + Assert.equal( + aboutMessage.document + .getElementById("encryptionTechBtn") + .querySelector("span").textContent, + "OpenPGP" + ); + + Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); + Assert.ok( + OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), + "encrypted icon is displayed" + ); + + // Get header of selected message + let hdr = get_about_3pane().gDBView.hdrForFirstSelectedMessage; + + await EnigmailPersistentCrypto.cryptMessage(hdr, gDecFolder.URI, false, null); + + await OpenPGPTestUtils.removeKeyById("0xf231550c4f47e38e", true); + + await be_in_folder(gDecFolder); + + select_click_row(0); + Assert.ok(getMsgBodyTxt(mc).includes(MSG_TEXT), "message text is in body"); + Assert.ok( + !OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"), + "encrypted icon NOT displayed" + ); +}); + +registerCleanupFunction(function () { + // Reset the OpenPGP key and delete the account. + aliceIdentity.setUnicharAttribute("openpgp_key_id", initialKeyIdPref); + MailServices.accounts.removeIncomingServer(aliceAcct.incomingServer, false); + MailServices.accounts.removeAccount(aliceAcct); + aliceAcct = null; +}); |