163 lines
4.6 KiB
JavaScript
163 lines
4.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { BookmarksBackupResource } = ChromeUtils.importESModule(
|
|
"resource:///modules/backup/BookmarksBackupResource.sys.mjs"
|
|
);
|
|
const { BookmarkJSONUtils } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/BookmarkJSONUtils.sys.mjs"
|
|
);
|
|
|
|
/**
|
|
* Test that the backup method correctly creates a compressed bookmarks JSON file.
|
|
*/
|
|
add_task(async function test_backup() {
|
|
let sandbox = sinon.createSandbox();
|
|
|
|
let bookmarksBackupResource = new BookmarksBackupResource();
|
|
let sourcePath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"BookmarksBackupResource-source-test"
|
|
);
|
|
let stagingPath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"BookmarksBackupResource-staging-test"
|
|
);
|
|
|
|
let exportStub = sandbox.stub(BookmarkJSONUtils, "exportToFile").resolves();
|
|
|
|
let manifestEntry = await bookmarksBackupResource.backup(
|
|
stagingPath,
|
|
sourcePath
|
|
);
|
|
Assert.equal(
|
|
manifestEntry,
|
|
null,
|
|
"BookmarksBackupResource.backup should return null as its ManifestEntry"
|
|
);
|
|
|
|
Assert.ok(
|
|
exportStub.calledOnce,
|
|
"BookmarkJSONUtils.exportToFile should have been called once"
|
|
);
|
|
Assert.ok(
|
|
exportStub.calledWith(PathUtils.join(stagingPath, "bookmarks.jsonlz4"), {
|
|
compress: true,
|
|
}),
|
|
"BookmarkJSONUtils.exportToFile should have been called with the correct arguments"
|
|
);
|
|
|
|
await maybeRemovePath(stagingPath);
|
|
await maybeRemovePath(sourcePath);
|
|
|
|
sandbox.restore();
|
|
});
|
|
|
|
/**
|
|
* Test that the recover method correctly returns the path to the bookmarks backup file.
|
|
*/
|
|
add_task(async function test_recover() {
|
|
let bookmarksBackupResource = new BookmarksBackupResource();
|
|
let recoveryPath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"BookmarksBackupResource-recovery-test"
|
|
);
|
|
let destProfilePath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"BookmarksBackupResource-test-profile"
|
|
);
|
|
|
|
await createTestFiles(recoveryPath, [{ path: "bookmarks.jsonlz4" }]);
|
|
|
|
let postRecoveryEntry = await bookmarksBackupResource.recover(
|
|
null,
|
|
recoveryPath,
|
|
destProfilePath
|
|
);
|
|
|
|
let expectedBookmarksPath = PathUtils.join(recoveryPath, "bookmarks.jsonlz4");
|
|
|
|
Assert.deepEqual(
|
|
postRecoveryEntry,
|
|
{ bookmarksBackupPath: expectedBookmarksPath },
|
|
"BookmarksBackupResource.recover should return the path to the bookmarks backup file"
|
|
);
|
|
|
|
// The bookmarks file should not be copied to the destination profile during recovery,
|
|
// it will be imported in postRecovery
|
|
Assert.ok(
|
|
!(await IOUtils.exists(
|
|
PathUtils.join(destProfilePath, "bookmarks.jsonlz4")
|
|
)),
|
|
"bookmarks.jsonlz4 should not exist in the destination profile yet"
|
|
);
|
|
|
|
await maybeRemovePath(recoveryPath);
|
|
await maybeRemovePath(destProfilePath);
|
|
});
|
|
|
|
/**
|
|
* Test that the postRecovery method correctly imports bookmarks from the backup file.
|
|
*/
|
|
add_task(async function test_postRecovery() {
|
|
let sandbox = sinon.createSandbox();
|
|
|
|
let bookmarksBackupResource = new BookmarksBackupResource();
|
|
let recoveryPath = await IOUtils.createUniqueDirectory(
|
|
PathUtils.tempDir,
|
|
"BookmarksBackupResource-recovery-test"
|
|
);
|
|
|
|
await createTestFiles(recoveryPath, [{ path: "bookmarks.jsonlz4" }]);
|
|
|
|
let bookmarksBackupPath = PathUtils.join(recoveryPath, "bookmarks.jsonlz4");
|
|
let importStub = sandbox
|
|
.stub(BookmarkJSONUtils, "importFromFile")
|
|
.resolves(true);
|
|
|
|
await bookmarksBackupResource.postRecovery({ bookmarksBackupPath });
|
|
|
|
Assert.ok(
|
|
importStub.calledOnce,
|
|
"BookmarkJSONUtils.importFromFile should have been called once"
|
|
);
|
|
Assert.ok(
|
|
importStub.calledWith(bookmarksBackupPath, { replace: true }),
|
|
"BookmarkJSONUtils.importFromFile should have been called with the correct arguments"
|
|
);
|
|
|
|
await maybeRemovePath(recoveryPath);
|
|
|
|
sandbox.restore();
|
|
});
|
|
|
|
/**
|
|
* Test that postRecovery handles missing bookmarksBackupPath gracefully.
|
|
*/
|
|
add_task(async function test_postRecovery_no_path() {
|
|
let sandbox = sinon.createSandbox();
|
|
|
|
let bookmarksBackupResource = new BookmarksBackupResource();
|
|
let importStub = sandbox
|
|
.stub(BookmarkJSONUtils, "importFromFile")
|
|
.resolves(true);
|
|
|
|
await bookmarksBackupResource.postRecovery(null);
|
|
|
|
Assert.ok(
|
|
importStub.notCalled,
|
|
"BookmarkJSONUtils.importFromFile should not have been called with null postRecoveryEntry"
|
|
);
|
|
|
|
await bookmarksBackupResource.postRecovery({});
|
|
|
|
Assert.ok(
|
|
importStub.notCalled,
|
|
"BookmarkJSONUtils.importFromFile should not have been called with empty postRecoveryEntry"
|
|
);
|
|
|
|
sandbox.restore();
|
|
});
|