diff options
Diffstat (limited to 'browser/extensions/formautofill/test/unit/test_profileStorage.js')
-rw-r--r-- | browser/extensions/formautofill/test/unit/test_profileStorage.js | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/browser/extensions/formautofill/test/unit/test_profileStorage.js b/browser/extensions/formautofill/test/unit/test_profileStorage.js new file mode 100644 index 000000000..018adedb8 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_profileStorage.js @@ -0,0 +1,222 @@ +/** + * Tests ProfileStorage object. + */ + +/* global ProfileStorage */ + +"use strict"; + +Cu.import("resource://gre/modules/Task.jsm"); +Cu.import(Services.io.newFileURI(do_get_file("ProfileStorage.jsm")).spec); + +const TEST_STORE_FILE_NAME = "test-profile.json"; + +const TEST_PROFILE_1 = { + organization: "World Wide Web Consortium", + streetAddress: "32 Vassar Street\nMIT Room 32-G524", + addressLevel2: "Cambridge", + addressLevel1: "MA", + postalCode: "02139", + country: "US", + tel: "+1 617 253 5702", + email: "timbl@w3.org", +}; + +const TEST_PROFILE_2 = { + streetAddress: "Some Address", + country: "US", +}; + +const TEST_PROFILE_3 = { + streetAddress: "Other Address", + postalCode: "12345", +}; + +const TEST_PROFILE_WITH_INVALID_FIELD = { + streetAddress: "Another Address", + invalidField: "INVALID", +}; + +let prepareTestProfiles = Task.async(function* (path) { + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + profileStorage.add(TEST_PROFILE_1); + profileStorage.add(TEST_PROFILE_2); + yield profileStorage._saveImmediately(); +}); + +let do_check_profile_matches = (profileWithMeta, profile) => { + for (let key in profile) { + do_check_eq(profileWithMeta[key], profile[key]); + } +}; + +add_task(function* test_initialize() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + do_check_eq(profileStorage._store.data.version, 1); + do_check_eq(profileStorage._store.data.profiles.length, 0); + + let data = profileStorage._store.data; + + yield profileStorage._saveImmediately(); + + profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + Assert.deepEqual(profileStorage._store.data, data); +}); + +add_task(function* test_getAll() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + + do_check_eq(profiles.length, 2); + do_check_profile_matches(profiles[0], TEST_PROFILE_1); + do_check_profile_matches(profiles[1], TEST_PROFILE_2); + + // Modifying output shouldn't affect the storage. + profiles[0].organization = "test"; + do_check_profile_matches(profileStorage.getAll()[0], TEST_PROFILE_1); +}); + +add_task(function* test_get() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + let guid = profiles[0].guid; + + let profile = profileStorage.get(guid); + do_check_profile_matches(profile, TEST_PROFILE_1); + + // Modifying output shouldn't affect the storage. + profile.organization = "test"; + do_check_profile_matches(profileStorage.get(guid), TEST_PROFILE_1); + + Assert.throws(() => profileStorage.get("INVALID_GUID"), + /No matching profile\./); +}); + +add_task(function* test_add() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + + do_check_eq(profiles.length, 2); + + do_check_profile_matches(profiles[0], TEST_PROFILE_1); + do_check_profile_matches(profiles[1], TEST_PROFILE_2); + + do_check_neq(profiles[0].guid, undefined); + do_check_neq(profiles[0].timeCreated, undefined); + do_check_eq(profiles[0].timeLastModified, profiles[0].timeCreated); + do_check_eq(profiles[0].timeLastUsed, 0); + do_check_eq(profiles[0].timesUsed, 0); + + Assert.throws(() => profileStorage.add(TEST_PROFILE_WITH_INVALID_FIELD), + /"invalidField" is not a valid field\./); +}); + +add_task(function* test_update() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + let guid = profiles[1].guid; + let timeLastModified = profiles[1].timeLastModified; + + do_check_neq(profiles[1].country, undefined); + + profileStorage.update(guid, TEST_PROFILE_3); + yield profileStorage._saveImmediately(); + + profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profile = profileStorage.get(guid); + + do_check_eq(profile.country, undefined); + do_check_neq(profile.timeLastModified, timeLastModified); + do_check_profile_matches(profile, TEST_PROFILE_3); + + Assert.throws( + () => profileStorage.update("INVALID_GUID", TEST_PROFILE_3), + /No matching profile\./ + ); + + Assert.throws( + () => profileStorage.update(guid, TEST_PROFILE_WITH_INVALID_FIELD), + /"invalidField" is not a valid field\./ + ); +}); + +add_task(function* test_notifyUsed() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + let guid = profiles[1].guid; + let timeLastUsed = profiles[1].timeLastUsed; + let timesUsed = profiles[1].timesUsed; + + profileStorage.notifyUsed(guid); + yield profileStorage._saveImmediately(); + + profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profile = profileStorage.get(guid); + + do_check_eq(profile.timesUsed, timesUsed + 1); + do_check_neq(profile.timeLastUsed, timeLastUsed); + + Assert.throws(() => profileStorage.notifyUsed("INVALID_GUID"), + /No matching profile\./); +}); + +add_task(function* test_remove() { + let path = getTempFile(TEST_STORE_FILE_NAME).path; + yield prepareTestProfiles(path); + + let profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + let profiles = profileStorage.getAll(); + let guid = profiles[1].guid; + + do_check_eq(profiles.length, 2); + + profileStorage.remove(guid); + yield profileStorage._saveImmediately(); + + profileStorage = new ProfileStorage(path); + yield profileStorage.initialize(); + + profiles = profileStorage.getAll(); + + do_check_eq(profiles.length, 1); + + Assert.throws(() => profileStorage.get(guid), /No matching profile\./); +}); |