diff options
Diffstat (limited to 'comm/mail/components/extensions/test/browser/browser_ext_messageDisplay_open_headerMessageId.js')
-rw-r--r-- | comm/mail/components/extensions/test/browser/browser_ext_messageDisplay_open_headerMessageId.js | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/comm/mail/components/extensions/test/browser/browser_ext_messageDisplay_open_headerMessageId.js b/comm/mail/components/extensions/test/browser/browser_ext_messageDisplay_open_headerMessageId.js new file mode 100644 index 0000000000..8be6aa4c2b --- /dev/null +++ b/comm/mail/components/extensions/test/browser/browser_ext_messageDisplay_open_headerMessageId.js @@ -0,0 +1,221 @@ +/* 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/. */ + +requestLongerTimeout(4); + +let gRootFolder; +add_setup(async () => { + let account = createAccount(); + gRootFolder = account.incomingServer.rootFolder; + gRootFolder.createSubfolder("testFolder", null); + gRootFolder.createSubfolder("otherFolder", null); + await createMessages(gRootFolder.getChildNamed("testFolder"), 5); +}); + +async function testOpenMessages(testConfig) { + let extension = ExtensionTestUtils.loadExtension({ + files: { + "background.js": async () => { + // Verify startup conditions. + let accounts = await browser.accounts.list(); + browser.test.assertEq( + 1, + accounts.length, + `number of accounts should be correct` + ); + + let testFolder = accounts[0].folders.find(f => f.name == "testFolder"); + browser.test.assertTrue(!!testFolder, "folder should exist"); + let { messages } = await browser.messages.list(testFolder); + browser.test.assertEq( + 5, + messages.length, + `number of messages should be correct` + ); + + // Get test properties. + let [testConfig] = await window.sendMessage("getTestConfig"); + + async function open(message, testConfig) { + let properties = { ...testConfig }; + if (properties.headerMessageId) { + properties.headerMessageId = message.headerMessageId; + } else if (properties.messageId) { + properties.messageId = message.id; + } else if (properties.file) { + properties.file = new File( + [await browser.messages.getRaw(message.id)], + "msgfile.eml" + ); + } + return browser.messageDisplay.open(properties); + } + + let expectedFail; + let additionalWindowIdToBeRemoved; + if (testConfig.windowType) { + switch (testConfig.windowType) { + case "normal": + { + let secondWindow = await browser.windows.create({ + type: testConfig.windowType, + }); + testConfig.windowId = secondWindow.id; + additionalWindowIdToBeRemoved = secondWindow.id; + } + break; + case "popup": + { + let secondWindow = await browser.windows.create({ + type: testConfig.windowType, + }); + testConfig.windowId = secondWindow.id; + additionalWindowIdToBeRemoved = secondWindow.id; + expectedFail = `Window with ID ${secondWindow.id} is not a normal window`; + } + break; + case "invalid": + testConfig.windowId = 1234; + expectedFail = `Invalid window ID: 1234`; + break; + } + delete testConfig.windowType; + } + + if (expectedFail) { + await browser.test.assertRejects( + open(messages[0], testConfig), + `${expectedFail}`, + "browser.messageDisplay.open() should fail with invalid windowId" + ); + } else { + // Open multiple messages. + let promisedTabs = []; + promisedTabs.push(open(messages[0], testConfig)); + promisedTabs.push(open(messages[0], testConfig)); + promisedTabs.push(open(messages[1], testConfig)); + promisedTabs.push(open(messages[1], testConfig)); + promisedTabs.push(open(messages[2], testConfig)); + promisedTabs.push(open(messages[2], testConfig)); + let openedTabs = await Promise.allSettled(promisedTabs); + for (let i = 0; i < openedTabs.length; i++) { + browser.test.assertEq( + "fulfilled", + openedTabs[i].status, + `Promise for the opened message should have been fulfilled for message ${i}` + ); + + let msg = await browser.messageDisplay.getDisplayedMessage( + openedTabs[i].value.id + ); + if (testConfig.file) { + browser.test.assertTrue( + messages[Math.floor(i / 2)].id != msg.id, + `Opened file msg should have a new message id (${ + msg.id + }) and should not equal the id of the source message (${ + messages[Math.floor(i / 2)].id + }) in window ${i}` + ); + } else { + browser.test.assertEq( + messages[Math.floor(i / 2)].id, + msg.id, + `Should see the correct message in window ${i}` + ); + } + await browser.tabs.remove(openedTabs[i].value.id); + } + } + + if (additionalWindowIdToBeRemoved) { + await browser.windows.remove(additionalWindowIdToBeRemoved); + } + + browser.test.notifyPass(); + }, + "utils.js": await getUtilsJS(), + }, + manifest: { + background: { scripts: ["utils.js", "background.js"] }, + permissions: ["accountsRead", "messagesRead", "tabs"], + }, + }); + + let about3Pane = document.getElementById("tabmail").currentAbout3Pane; + about3Pane.displayFolder(gRootFolder.getChildNamed("otherFolder")); + + extension.onMessage("getTestConfig", async () => { + extension.sendMessage(testConfig); + }); + + await extension.startup(); + await extension.awaitFinish(); + await extension.unload(); +} + +add_task(async function testHeaderMessageIdActiveDefault() { + await testOpenMessages({ headerMessageId: true, active: true }); +}); +add_task(async function testHeaderMessageIdInactiveDefault() { + await testOpenMessages({ headerMessageId: true, active: false }); +}); +add_task(async function testHeaderMessageIdActiveWindow() { + await testOpenMessages({ + headerMessageId: true, + active: true, + location: "window", + }); +}); +add_task(async function testHeaderMessageIdInactiveWindow() { + await testOpenMessages({ + headerMessageId: true, + active: false, + location: "window", + }); +}); +add_task(async function testHeaderMessageIdActiveTab() { + await testOpenMessages({ + headerMessageId: true, + active: true, + location: "tab", + }); +}); +add_task(async function testHeaderMessageIdInactiveTab() { + await testOpenMessages({ + headerMessageId: true, + active: false, + location: "tab", + }); +}); +add_task(async function testHeaderMessageIdOtherNormalWindowActiveTab() { + await testOpenMessages({ + headerMessageId: true, + active: true, + location: "tab", + windowType: "normal", + }); +}); +add_task(async function testHeaderMessageIdOtherNormalWindowInactiveTab() { + await testOpenMessages({ + headerMessageId: true, + active: false, + location: "tab", + windowType: "normal", + }); +}); +add_task(async function testHeaderMessageIdOtherPopupWindowFail() { + await testOpenMessages({ + headerMessageId: true, + location: "tab", + windowType: "popup", + }); +}); +add_task(async function testHeaderMessageIdInvalidWindowFail() { + await testOpenMessages({ + headerMessageId: true, + location: "tab", + windowType: "invalid", + }); +}); |