/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
const { PasswordValidator } = ChromeUtils.importESModule(
"resource://services-sync/engines/passwords.sys.mjs"
);
function getDummyServerAndClient() {
return {
server: [
{
id:
"11111",
guid:
"11111",
hostname:
"https://www.11111.com",
formSubmitURL:
"https://www.11111.com",
password:
"qwerty123",
passwordField:
"pass",
username:
"foobar",
usernameField:
"user",
httpRealm:
null,
},
{
id:
"22222",
guid:
"22222",
hostname:
"https://www.22222.org",
formSubmitURL:
"https://www.22222.org",
password:
"hunter2",
passwordField:
"passwd",
username:
"baz12345",
usernameField:
"user",
httpRealm:
null,
},
{
id:
"33333",
guid:
"33333",
hostname:
"https://www.33333.com",
formSubmitURL:
"https://www.33333.com",
password:
"p4ssw0rd",
passwordField:
"passwad",
username:
"quux",
usernameField:
"user",
httpRealm:
null,
},
],
client: [
{
id:
"11111",
guid:
"11111",
hostname:
"https://www.11111.com",
formSubmitURL:
"https://www.11111.com",
password:
"qwerty123",
passwordField:
"pass",
username:
"foobar",
usernameField:
"user",
httpRealm:
null,
},
{
id:
"22222",
guid:
"22222",
hostname:
"https://www.22222.org",
formSubmitURL:
"https://www.22222.org",
password:
"hunter2",
passwordField:
"passwd",
username:
"baz12345",
usernameField:
"user",
httpRealm:
null,
},
{
id:
"33333",
guid:
"33333",
hostname:
"https://www.33333.com",
formSubmitURL:
"https://www.33333.com",
password:
"p4ssw0rd",
passwordField:
"passwad",
username:
"quux",
usernameField:
"user",
httpRealm:
null,
},
],
};
}
add_task(async
function test_valid() {
let { server, client } = getDummyServerAndClient();
let validator =
new PasswordValidator();
let { problemData, clientRecords, records, deletedRecords } =
await validator.compareClientWithServer(client, server);
equal(clientRecords.length, 3);
equal(records.length, 3);
equal(deletedRecords.length, 0);
deepEqual(problemData, validator.emptyProblemData());
});
add_task(async
function test_missing() {
let validator =
new PasswordValidator();
{
let { server, client } = getDummyServerAndClient();
client.pop();
let { problemData, clientRecords, records, deletedRecords } =
await validator.compareClientWithServer(client, server);
equal(clientRecords.length, 2);
equal(records.length, 3);
equal(deletedRecords.length, 0);
let expected = validator.emptyProblemData();
expected.clientMissing.push(
"33333");
deepEqual(problemData, expected);
}
{
let { server, client } = getDummyServerAndClient();
server.pop();
let { problemData, clientRecords, records, deletedRecords } =
await validator.compareClientWithServer(client, server);
equal(clientRecords.length, 3);
equal(records.length, 2);
equal(deletedRecords.length, 0);
let expected = validator.emptyProblemData();
expected.serverMissing.push(
"33333");
deepEqual(problemData, expected);
}
});
add_task(async
function test_deleted() {
let { server, client } = getDummyServerAndClient();
let deletionRecord = { id:
"444444", guid:
"444444", deleted:
true };
server.push(deletionRecord);
let validator =
new PasswordValidator();
let { problemData, clientRecords, records, deletedRecords } =
await validator.compareClientWithServer(client, server);
equal(clientRecords.length, 3);
equal(records.length, 4);
deepEqual(deletedRecords, [deletionRecord]);
let expected = validator.emptyProblemData();
deepEqual(problemData, expected);
});
add_task(async
function test_duplicates() {
let validator =
new PasswordValidator();
{
let { server, client } = getDummyServerAndClient();
client.push(Cu.cloneInto(client[0], {}));
let { problemData } = await validator.compareClientWithServer(
client,
server
);
let expected = validator.emptyProblemData();
expected.clientDuplicates.push(
"11111");
deepEqual(problemData, expected);
}
{
let { server, client } = getDummyServerAndClient();
server.push(Cu.cloneInto(server[server.length - 1], {}));
let { problemData } = await validator.compareClientWithServer(
client,
server
);
let expected = validator.emptyProblemData();
expected.duplicates.push(
"33333");
deepEqual(problemData, expected);
}
});