Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
add_task(async function test_highWaterMark() {
let buf = await openMirror("highWaterMark");
strictEqual(
await buf.getCollectionHighWaterMark(),
0,
"High water mark should be 0 without items"
);
await buf.setCollectionLastModified(123.45);
equal(
await buf.getCollectionHighWaterMark(),
123.45,
"High water mark should be last modified time without items"
);
await storeRecords(buf, [
{
id: "menu",
parentid: "places",
type: "folder",
children: [],
modified: 50,
},
{
id: "toolbar",
parentid: "places",
type: "folder",
children: [],
modified: 123.95,
},
]);
equal(
await buf.getCollectionHighWaterMark(),
123.45,
"High water mark should be last modified time if items are older"
);
await storeRecords(buf, [
{
id: "unfiled",
parentid: "places",
type: "folder",
children: [],
modified: 125.45,
},
]);
equal(
await buf.getCollectionHighWaterMark(),
124.45,
"High water mark should be modified time - 1s of newest record if exists"
);
await buf.finalize();
});
add_task(async function test_ensureCurrentSyncId() {
let buf = await openMirror("ensureCurrentSyncId");
await buf.ensureCurrentSyncId("syncIdAAAAAA");
equal(
await buf.getCollectionHighWaterMark(),
0,
"High water mark should be 0 after setting sync ID"
);
info("Insert items and set collection last modified");
await storeRecords(
buf,
[
{
id: "menu",
parentid: "places",
type: "folder",
children: ["folderAAAAAA"],
modified: 125.45,
},
{
id: "folderAAAAAA",
parentid: "menu",
type: "folder",
children: [],
},
],
{ needsMerge: false }
);
await buf.setCollectionLastModified(123.45);
info("Set matching sync ID");
await buf.ensureCurrentSyncId("syncIdAAAAAA");
{
equal(
await buf.getSyncId(),
"syncIdAAAAAA",
"Should return existing sync ID"
);
strictEqual(
await buf.getCollectionHighWaterMark(),
124.45,
"Different sync ID should reset high water mark"
);
let itemRows = await buf.db.execute(`
SELECT guid, needsMerge FROM items
ORDER BY guid`);
let itemInfos = itemRows.map(row => ({
guid: row.getResultByName("guid"),
needsMerge: !!row.getResultByName("needsMerge"),
}));
deepEqual(
itemInfos,
[
{
guid: "folderAAAAAA",
needsMerge: false,
},
{
guid: PlacesUtils.bookmarks.menuGuid,
needsMerge: false,
},
{
guid: PlacesUtils.bookmarks.mobileGuid,
needsMerge: true,
},
{
guid: PlacesUtils.bookmarks.rootGuid,
needsMerge: false,
},
{
guid: PlacesUtils.bookmarks.toolbarGuid,
needsMerge: true,
},
{
guid: PlacesUtils.bookmarks.unfiledGuid,
needsMerge: true,
},
],
"Matching sync ID should not reset items"
);
}
info("Set different sync ID");
await buf.ensureCurrentSyncId("syncIdBBBBBB");
{
equal(
await buf.getSyncId(),
"syncIdBBBBBB",
"Should replace existing sync ID"
);
strictEqual(
await buf.getCollectionHighWaterMark(),
0,
"Different sync ID should reset high water mark"
);
let itemRows = await buf.db.execute(`
SELECT guid, needsMerge FROM items
ORDER BY guid`);
let itemInfos = itemRows.map(row => ({
guid: row.getResultByName("guid"),
needsMerge: !!row.getResultByName("needsMerge"),
}));
deepEqual(
itemInfos,
[
{
guid: PlacesUtils.bookmarks.menuGuid,
needsMerge: true,
},
{
guid: PlacesUtils.bookmarks.mobileGuid,
needsMerge: true,
},
{
guid: PlacesUtils.bookmarks.rootGuid,
needsMerge: false,
},
{
guid: PlacesUtils.bookmarks.toolbarGuid,
needsMerge: true,
},
{
guid: PlacesUtils.bookmarks.unfiledGuid,
needsMerge: true,
},
],
"Different sync ID should reset items"
);
}
});