diff options
Diffstat (limited to 'comm/mail/services/sync/test/unit/test_account_tracker.js')
-rw-r--r-- | comm/mail/services/sync/test/unit/test_account_tracker.js | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/comm/mail/services/sync/test/unit/test_account_tracker.js b/comm/mail/services/sync/test/unit/test_account_tracker.js new file mode 100644 index 0000000000..98a132b48f --- /dev/null +++ b/comm/mail/services/sync/test/unit/test_account_tracker.js @@ -0,0 +1,155 @@ +/* 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 } = 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; + +add_setup(async function () { + engine = new AccountsEngine(Service); + await engine.initialize(); + store = engine._store; + tracker = engine._tracker; + + Assert.equal(tracker.score, 0); + Assert.equal(tracker._isTracking, false); + Assert.deepEqual(await tracker.getChangedIDs(), {}); + + try { + // Ensure there is a local mail account... + MailServices.accounts.localFoldersServer; + } catch { + // ... if not, make one. + MailServices.accounts.createLocalMailAccount(); + } + + tracker.start(); + Assert.equal(tracker._isTracking, true); +}); + +/** + * Test creating, changing, and deleting an account that should be synced. + */ +add_task(async function testAccount() { + Assert.equal(tracker.score, 0); + Assert.deepEqual(await tracker.getChangedIDs(), {}); + + let id = newUID(); + info(id); + let newAccount = MailServices.accounts.createAccount(); + newAccount.incomingServer = MailServices.accounts.createIncomingServer( + "username", + "hostname", + "imap" + ); + newAccount.incomingServer.UID = id; + newAccount.incomingServer.prettyName = "First Incoming Server"; + + Assert.equal(tracker.score, 301); + Assert.deepEqual(await tracker.getChangedIDs(), { [id]: 0 }); + + tracker.clearChangedIDs(); + Assert.deepEqual(await tracker.getChangedIDs(), {}); + tracker.resetScore(); + Assert.equal(tracker.score, 0); + + newAccount.incomingServer.prettyName = "Changed name"; + Assert.equal(tracker.score, 301); + Assert.deepEqual(await tracker.getChangedIDs(), { [id]: 0 }); + + tracker.clearChangedIDs(); + tracker.resetScore(); + + MailServices.accounts.removeAccount(newAccount, true); + Assert.equal(tracker.score, 301); + Assert.deepEqual(await tracker.getChangedIDs(), { [id]: 0 }); + + tracker.clearChangedIDs(); + tracker.resetScore(); +}); + +/** + * Test the store methods on calendars. The tracker should ignore them. + */ +add_task(async function testIncomingChanges() { + let id = newUID(); + + tracker.ignoreAll = true; + await store.applyIncoming({ + id, + 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, + }, + }); + tracker.ignoreAll = false; + + Assert.deepEqual(await tracker.getChangedIDs(), {}); + Assert.equal(tracker.score, 0); + + tracker.clearChangedIDs(); + tracker.resetScore(); + + tracker.ignoreAll = true; + await store.applyIncoming({ + id, + 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, + }, + }); + tracker.ignoreAll = false; + + Assert.deepEqual(await tracker.getChangedIDs(), {}); + Assert.equal(tracker.score, 0); + + tracker.ignoreAll = true; + await store.applyIncoming({ + id, + deleted: true, + }); + tracker.ignoreAll = false; + + Assert.deepEqual(await tracker.getChangedIDs(), {}); + Assert.equal(tracker.score, 0); +}); |