diff options
Diffstat (limited to 'comm/mail/services/sync/test/unit/test_account_store.js')
-rw-r--r-- | comm/mail/services/sync/test/unit/test_account_store.js | 361 |
1 files changed, 361 insertions, 0 deletions
diff --git a/comm/mail/services/sync/test/unit/test_account_store.js b/comm/mail/services/sync/test/unit/test_account_store.js new file mode 100644 index 0000000000..e920ce14fe --- /dev/null +++ b/comm/mail/services/sync/test/unit/test_account_store.js @@ -0,0 +1,361 @@ +/* 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/. */ + +do_get_profile(); + +const { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); +const { AccountsEngine, AccountRecord } = ChromeUtils.importESModule( + "resource://services-sync/engines/accounts.sys.mjs" +); +const { Service } = ChromeUtils.importESModule( + "resource://services-sync/service.sys.mjs" +); +const { TestUtils } = ChromeUtils.import( + "resource://testing-common/TestUtils.jsm" +); + +let engine, store, tracker; +let imapAccount, imapServer, pop3Account, pop3Server, smtpServer; + +add_setup(async function () { + engine = new AccountsEngine(Service); + await engine.initialize(); + store = engine._store; + + try { + // Ensure there is a local mail account... + MailServices.accounts.localFoldersServer; + } catch { + // ... if not, make one. + MailServices.accounts.createLocalMailAccount(); + } + + imapAccount = MailServices.accounts.createAccount(); + imapServer = imapAccount.incomingServer = + MailServices.accounts.createIncomingServer("username", "hostname", "imap"); + imapAccount.incomingServer.prettyName = "IMAP Server"; + + Assert.ok(imapServer.UID); + Assert.equal( + Services.prefs.getStringPref(`mail.server.${imapServer.key}.uid`), + imapServer.UID + ); + + pop3Account = MailServices.accounts.createAccount(); + pop3Server = pop3Account.incomingServer = + MailServices.accounts.createIncomingServer("username", "hostname", "pop3"); + pop3Account.incomingServer.prettyName = "POP3 Server"; + + Assert.ok(pop3Server.UID); + Assert.equal( + Services.prefs.getStringPref(`mail.server.${pop3Server.key}.uid`), + pop3Server.UID + ); + + smtpServer = MailServices.smtp.createServer(); + smtpServer.username = "username"; + smtpServer.hostname = "hostname"; + smtpServer.description = "SMTP Server"; + + Assert.ok(smtpServer.UID); + Assert.equal( + Services.prefs.getStringPref(`mail.smtpserver.${smtpServer.key}.uid`, ""), + smtpServer.UID + ); + + // Sanity check. + Assert.equal(MailServices.accounts.accounts.length, 3); + Assert.equal(MailServices.smtp.servers.length, 1); +}); + +add_task(async function testGetAllIDs() { + Assert.deepEqual(await store.getAllIDs(), { + [imapServer.UID]: true, + [pop3Server.UID]: true, + [smtpServer.UID]: true, + }); +}); + +add_task(async function testItemExists() { + Assert.equal(await store.itemExists(imapServer.UID), true); + Assert.equal(await store.itemExists(pop3Server.UID), true); + Assert.equal(await store.itemExists(smtpServer.UID), true); +}); + +add_task(async function testCreateIMAPRecord() { + let record = await store.createRecord(imapServer.UID); + Assert.ok(record instanceof AccountRecord); + Assert.equal(record.id, imapServer.UID); + Assert.equal(record.username, "username"); + Assert.equal(record.hostname, "hostname"); + Assert.equal(record.type, "imap"); + Assert.deepEqual(record.prefs, { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 143, + prettyName: "IMAP Server", + socketType: 0, + }); + Assert.equal(record.isDefault, undefined); +}); + +add_task(async function testCreatePOP3Record() { + let record = await store.createRecord(pop3Server.UID); + Assert.ok(record instanceof AccountRecord); + Assert.equal(record.id, pop3Server.UID); + Assert.equal(record.username, "username"); + Assert.equal(record.hostname, "hostname"); + Assert.equal(record.type, "pop3"); + Assert.deepEqual(record.prefs, { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 110, + prettyName: "POP3 Server", + socketType: 0, + }); + Assert.equal(record.isDefault, undefined); +}); + +add_task(async function testCreateSMTPRecord() { + let smtpServerID = smtpServer.UID; + + let record = await store.createRecord(smtpServerID); + Assert.ok(record instanceof AccountRecord); + Assert.equal(record.id, smtpServerID); + Assert.equal(record.username, "username"); + Assert.equal(record.hostname, "hostname"); + Assert.equal(record.type, "smtp"); + Assert.deepEqual(record.prefs, { + authMethod: 3, + port: 0, + description: "SMTP Server", + socketType: 0, + }); + Assert.equal(record.isDefault, true); +}); + +add_task(async function testCreateDeletedRecord() { + let fakeID = "12345678-1234-1234-1234-123456789012"; + let record = await store.createRecord(fakeID); + Assert.ok(record instanceof AccountRecord); + Assert.equal(record.id, fakeID); + Assert.equal(record.deleted, true); +}); + +add_task(async function testSyncIMAPRecords() { + let newID = newUID(); + await store.applyIncoming({ + id: newID, + username: "username", + hostname: "new.hostname", + type: "imap", + prefs: { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 143, + prettyName: "New IMAP Server", + socketType: Ci.nsMsgSocketType.plain, + }, + }); + + Assert.equal(MailServices.accounts.accounts.length, 4); + + let newServer = MailServices.accounts.allServers.find(s => s.UID == newID); + Assert.equal(newServer.username, "username"); + Assert.equal(newServer.hostName, "new.hostname"); + Assert.equal(newServer.prettyName, "New IMAP Server"); + Assert.equal(newServer.port, 143); + Assert.equal(newServer.socketType, Ci.nsMsgSocketType.plain); + + await store.applyIncoming({ + id: newID, + username: "username", + hostname: "new.hostname", + type: "imap", + prefs: { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 993, + prettyName: "Changed IMAP Server", + socketType: Ci.nsMsgSocketType.SSL, + }, + }); + + Assert.equal(newServer.prettyName, "Changed IMAP Server"); + Assert.equal(newServer.port, 993); + Assert.equal(newServer.socketType, Ci.nsMsgSocketType.SSL); + + await Assert.rejects( + store.applyIncoming({ + id: newID, + type: "pop3", + }), + /Refusing to change server type/ + ); + + await store.applyIncoming({ + id: newID, + deleted: true, + }); + + Assert.equal(MailServices.accounts.accounts.length, 3); +}); + +add_task(async function testSyncPOP3Records() { + let newID = newUID(); + await store.applyIncoming({ + id: newID, + username: "username", + hostname: "new.hostname", + type: "pop3", + prefs: { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 110, + prettyName: "New POP3 Server", + socketType: Ci.nsMsgSocketType.plain, + }, + }); + + Assert.equal(MailServices.accounts.accounts.length, 4); + + let newServer = MailServices.accounts.allServers.find(s => s.UID == newID); + Assert.equal(newServer.username, "username"); + Assert.equal(newServer.hostName, "new.hostname"); + Assert.equal(newServer.prettyName, "New POP3 Server"); + Assert.equal(newServer.port, 110); + Assert.equal(newServer.socketType, Ci.nsMsgSocketType.plain); + + await store.applyIncoming({ + id: newID, + username: "username", + hostname: "new.hostname", + type: "pop3", + prefs: { + authMethod: 3, + biffMinutes: 10, + doBiff: true, + downloadOnBiff: false, + emptyTrashOnExit: false, + incomingDuplicateAction: 0, + limitOfflineMessageSize: false, + loginAtStartUp: false, + maxMessageSize: 50, + port: 995, + prettyName: "Changed POP3 Server", + socketType: Ci.nsMsgSocketType.SSL, + }, + }); + + Assert.equal(newServer.prettyName, "Changed POP3 Server"); + Assert.equal(newServer.port, 995); + Assert.equal(newServer.socketType, Ci.nsMsgSocketType.SSL); + + await Assert.rejects( + store.applyIncoming({ + id: newID, + type: "imap", + }), + /Refusing to change server type/ + ); + + await store.applyIncoming({ + id: newID, + deleted: true, + }); + + Assert.equal(MailServices.accounts.accounts.length, 3); +}); + +add_task(async function testSyncSMTPRecords() { + let newSMTPServerID = newUID(); + await store.applyIncoming({ + id: newSMTPServerID, + username: "username", + hostname: "hostname", + type: "smtp", + prefs: { + authMethod: 3, + port: 0, + description: "Second Outgoing Server", + socketType: 0, + }, + isDefault: true, + }); + + Assert.equal(MailServices.smtp.servers.length, 2); + + let newSMTPServer = MailServices.smtp.servers.find( + s => s.UID == newSMTPServerID + ); + Assert.equal(newSMTPServer.username, "username"); + Assert.equal(newSMTPServer.hostname, "hostname"); + Assert.equal(newSMTPServer.description, "Second Outgoing Server"); + Assert.equal(MailServices.smtp.defaultServer.key, newSMTPServer.key); + + await store.applyIncoming({ + id: smtpServer.UID, + username: "username", + hostname: "new.hostname", + type: "smtp", + prefs: { + authMethod: 3, + port: 0, + description: "New SMTP Server", + socketType: 0, + }, + isDefault: true, + }); + + Assert.equal(smtpServer.description, "New SMTP Server"); + Assert.equal(MailServices.smtp.defaultServer.key, smtpServer.key); + + // TODO test update + + await store.applyIncoming({ + id: newSMTPServerID, + deleted: true, + }); + + Assert.equal(MailServices.smtp.servers.length, 1); + Assert.equal(MailServices.smtp.servers[0].key, smtpServer.key); + Assert.equal(MailServices.smtp.defaultServer.key, smtpServer.key); +}); |