Revision control
Copy as Markdown
Other Tools
/* 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
/**
* Tests that folders on the filesystem are detected and added to the database
* on start-up.
*
* TODO: Test the same thing, but with an existing database that does/doesn't
* match the file system.
*/
const { ProfileCreator } = ChromeUtils.importESModule(
);
add_setup(async function () {
const profile = new ProfileCreator(do_get_profile());
const mboxServer = profile.addLocalServer();
const mboxFolder = await mboxServer.rootFolder.addMailFolder("test1");
await mboxFolder.addMailFolder("test2");
await mboxServer.rootFolder.addMailFolder("test3");
const maildirServer = profile.addServer("nobody", "localhost", "none");
maildirServer.isMaildirStore = true;
const maildirFolder = await maildirServer.rootFolder.addMailFolder("test1");
await maildirFolder.addMailFolder("test2");
await maildirServer.rootFolder.addMailFolder("test3");
// Start the account manager.
MailServices.accounts.accounts;
loadExistingDB();
});
add_task(async function () {
await testFolderDiscovery(MailServices.accounts.localFoldersServer);
});
add_task(async function () {
await testFolderDiscovery(
MailServices.accounts.findServer("nobody", "localhost", "none")
);
});
async function testFolderDiscovery(server) {
const rootFolder = server.rootFolder;
Assert.deepEqual(rootFolder.subFolders.map(f => f.name).toSorted(), [
"Trash",
"Unsent Messages",
"test1",
"test3",
]);
Assert.deepEqual(
rootFolder
.getChildNamed("test1")
.subFolders.map(f => f.name)
.toSorted(),
["test2"]
);
Assert.deepEqual(rootFolder.descendants.map(f => f.prettyPath).toSorted(), [
"Outbox",
"Trash",
"test1",
"test1/test2",
"test3",
]);
// Check that the folders are in the db.
const root = folderDB.getFolderByPath(server.key);
drawTree(root);
Assert.equal(folderDB.getFolderParent(root), 0);
Assert.equal(folderDB.getFolderName(root), server.key);
checkRow(root, {
id: root,
parent: 0,
ordinal: null,
name: server.key,
flags: 0,
});
// Special folders were added at start-up.
const trash = folderDB.getFolderByPath(`${server.key}/Trash`);
Assert.ok(trash);
Assert.equal(folderDB.getFolderParent(trash), root);
Assert.equal(folderDB.getFolderName(trash), "Trash");
checkRow(trash, {
id: trash,
parent: root,
ordinal: null,
name: "Trash",
flags: Ci.nsMsgFolderFlags.Trash | Ci.nsMsgFolderFlags.Mail,
});
const unsent = folderDB.getFolderByPath(`${server.key}/Unsent Messages`);
Assert.ok(unsent);
Assert.equal(folderDB.getFolderParent(unsent), root);
Assert.equal(folderDB.getFolderName(unsent), "Unsent Messages");
checkRow(unsent, {
id: unsent,
parent: root,
ordinal: null,
name: "Unsent Messages",
flags: Ci.nsMsgFolderFlags.Queue | Ci.nsMsgFolderFlags.Mail,
});
// We added some files. Check they exist.
const test1 = folderDB.getFolderByPath(`${server.key}/test1`);
Assert.ok(test1);
Assert.equal(folderDB.getFolderParent(test1), root);
Assert.equal(folderDB.getFolderName(test1), "test1");
checkRow(test1, {
id: test1,
parent: root,
ordinal: null,
name: "test1",
flags: 0,
});
const test2 = folderDB.getFolderByPath(`${server.key}/test1/test2`);
Assert.ok(test2);
Assert.equal(folderDB.getFolderParent(test2), test1);
Assert.equal(folderDB.getFolderName(test2), "test2");
checkRow(test2, {
id: test2,
parent: test1,
ordinal: null,
name: "test2",
flags: 0,
});
Assert.deepEqual(folderDB.getFolderChildren(test1), [test2]);
const test3 = folderDB.getFolderByPath(`${server.key}/test3`);
Assert.ok(test3);
Assert.equal(folderDB.getFolderParent(test3), root);
Assert.equal(folderDB.getFolderName(test3), "test3");
checkRow(test3, {
id: test3,
parent: root,
ordinal: null,
name: "test3",
flags: 0,
});
Assert.deepEqual(
folderDB.getFolderChildren(root).toSorted(),
[test1, test3, trash, unsent].toSorted()
);
Assert.deepEqual(
folderDB.getFolderChildren(test1).toSorted(),
[test2].toSorted()
);
Assert.deepEqual(
folderDB.getFolderDescendants(root).toSorted(),
[test1, test2, test3, trash, unsent].toSorted()
);
}