diff options
Diffstat (limited to 'comm/mail/components/test/unit/test_about_support.js')
-rw-r--r-- | comm/mail/components/test/unit/test_about_support.js | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/comm/mail/components/test/unit/test_about_support.js b/comm/mail/components/test/unit/test_about_support.js new file mode 100644 index 0000000000..5626cbbe83 --- /dev/null +++ b/comm/mail/components/test/unit/test_about_support.js @@ -0,0 +1,219 @@ +/* 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/. */ + +// mail/components/about-support/content/accounts.js +/* globals AboutSupport, AboutSupportPlatform */ + +var { localAccountUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/LocalAccountUtils.jsm" +); + +/* + * Test the about:support module. + */ + +var gAccountList = [ + { + type: "pop3", + port: 1234, + user: "pop3user", + password: "pop3password", + socketType: Ci.nsMsgSocketType.plain, + authMethod: Ci.nsMsgAuthMethod.old, + smtpServers: [], + }, + { + type: "imap", + port: 2345, + user: "imapuser", + password: "imappassword", + socketType: Ci.nsMsgSocketType.trySTARTTLS, + authMethod: Ci.nsMsgAuthMethod.passwordCleartext, + smtpServers: [ + { + port: 3456, + user: "imapout", + password: "imapoutpassword", + isDefault: true, + socketType: Ci.nsMsgSocketType.alwaysSTARTTLS, + authMethod: Ci.nsMsgAuthMethod.passwordEncrypted, + }, + ], + }, + { + type: "nntp", + port: 4567, + user: null, + password: null, + socketType: Ci.nsMsgSocketType.SSL, + authMethod: Ci.nsMsgAuthMethod.GSSAPI, + smtpServers: [ + { + port: 5678, + user: "newsout1", + password: "newsoutpassword1", + isDefault: true, + socketType: Ci.nsMsgSocketType.SSL, + authMethod: Ci.nsMsgAuthMethod.NTLM, + }, + { + port: 6789, + user: "newsout2", + password: "newsoutpassword2", + isDefault: false, + socketType: Ci.nsMsgSocketType.SSL, + authMethod: Ci.nsMsgAuthMethod.External, + }, + ], + }, +]; + +// A map of account keys to servers. Populated by setup_accounts. +var gAccountMap = new Map(); +// A map of SMTP server names to SMTP servers. Populated by setup_accounts. +var gSMTPMap = new Map(); + +/** + * A list of sensitive data: it shouldn't be present in the account + * details. Populated by setup_accounts. + */ +var gSensitiveData = []; + +/** + * Set up accounts based on the given data. + */ +function setup_accounts() { + // First make sure the local folders account is set up. + localAccountUtils.loadLocalMailAccount(); + + // Now run through the details and set up accounts accordingly. + for (let details of gAccountList) { + let server = localAccountUtils.create_incoming_server( + details.type, + details.port, + details.user, + details.password + ); + server.socketType = details.socketType; + server.authMethod = details.authMethod; + gSensitiveData.push(details.password); + let account = MailServices.accounts.FindAccountForServer(server); + for (let smtpDetails of details.smtpServers) { + let outgoing = localAccountUtils.create_outgoing_server( + smtpDetails.port, + smtpDetails.user, + smtpDetails.password + ); + outgoing.socketType = smtpDetails.socketType; + outgoing.authMethod = smtpDetails.authMethod; + localAccountUtils.associate_servers( + account, + outgoing, + smtpDetails.isDefault + ); + gSensitiveData.push(smtpDetails.password); + + // Add the SMTP server to our server name -> server map + gSMTPMap.set("localhost:" + smtpDetails.port, smtpDetails); + } + + // Add the server to our account -> server map + gAccountMap.set(account.key, details); + } +} + +/** + * Verify that the given account's details match our details for the key. + */ +function verify_account_details(aDetails) { + let expectedDetails = gAccountMap.get(aDetails.key); + // All our servers are at localhost + let expectedHostDetails = + "(" + expectedDetails.type + ") localhost:" + expectedDetails.port; + Assert.equal(aDetails.hostDetails, expectedHostDetails); + Assert.equal(aDetails.socketType, expectedDetails.socketType); + Assert.equal(aDetails.authMethod, expectedDetails.authMethod); + + let smtpToSee = expectedDetails.smtpServers.map( + smtpDetails => "localhost:" + smtpDetails.port + ); + + for (let smtpDetails of aDetails.smtpServers) { + // Check that we're expecting to see this server + let toSeeIndex = smtpToSee.indexOf(smtpDetails.name); + Assert.notEqual(toSeeIndex, -1); + smtpToSee.splice(toSeeIndex, 1); + + let expectedSMTPDetails = gSMTPMap.get(smtpDetails.name); + Assert.equal(smtpDetails.socketType, expectedSMTPDetails.socketType); + Assert.equal(smtpDetails.authMethod, expectedSMTPDetails.authMethod); + Assert.equal(smtpDetails.isDefault, expectedSMTPDetails.isDefault); + } + + // Check that we saw all the SMTP servers we wanted to see + Assert.equal(smtpToSee.length, 0); +} + +/** + * Tests the getFileSystemType function. This is more a check to make sure the + * function returns something meaningful and doesn't throw an exception, since + * we don't have any information about what sort of file system we're running + * on. + */ +function test_get_file_system_type() { + let fsType = AboutSupportPlatform.getFileSystemType(do_get_cwd()); + if ("nsILocalFileMac" in Ci) { + // Mac should return null + Assert.equal(fsType, null); + } else { + // Windows and Linux should return a string + Assert.ok(["local", "network", "unknown"].includes(fsType)); + } +} + +/** + * Test the getAccountDetails function. + */ +function test_get_account_details() { + let accountDetails = AboutSupport.getAccountDetails(); + let accountDetailsText = uneval(accountDetails); + // The list of accounts we are looking for + let accountsToSee = [...gAccountMap.keys()]; + + // Our first check is to see that no sensitive data has crept in + for (let data of gSensitiveData) { + Assert.ok(!accountDetailsText.includes(data)); + } + + for (let details of accountDetails) { + // We're going to make one exception: for the local folders server. We don't + // care too much about its details. + if (details.key == localAccountUtils.msgAccount.key) { + continue; + } + + // Check that we're expecting to see this server + let toSeeIndex = accountsToSee.indexOf(details.key); + Assert.notEqual(toSeeIndex, -1); + accountsToSee.splice(toSeeIndex, 1); + + verify_account_details(details); + } + // Check that we got all the accounts we wanted to see + Assert.equal(accountsToSee.length, 0); +} + +var tests = [test_get_file_system_type, test_get_account_details]; + +function run_test() { + Services.scriptloader.loadSubScript( + "chrome://messenger/content/about-support/accounts.js" + ); + + setup_accounts(); + + for (let test of tests) { + test(); + } +} |