test_PasswordFileMigrator.js (3033B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { PasswordFileMigrator } = ChromeUtils.importESModule( 7 "resource:///modules/FileMigrators.sys.mjs" 8 ); 9 const { LoginCSVImport } = ChromeUtils.importESModule( 10 "resource://gre/modules/LoginCSVImport.sys.mjs" 11 ); 12 const { sinon } = ChromeUtils.importESModule( 13 "resource://testing-common/Sinon.sys.mjs" 14 ); 15 const { MigrationWizardConstants } = ChromeUtils.importESModule( 16 "chrome://browser/content/migration/migration-wizard-constants.mjs" 17 ); 18 19 /** 20 * Tests that the PasswordFileMigrator properly subclasses FileMigratorBase 21 * and delegates to the LoginCSVImport module. 22 */ 23 add_task(async function test_PasswordFileMigrator() { 24 let sandbox = sinon.createSandbox(); 25 registerCleanupFunction(() => { 26 sandbox.restore(); 27 }); 28 29 let migrator = new PasswordFileMigrator(); 30 Assert.ok( 31 migrator.constructor.key, 32 "PasswordFileMigrator implements static getter 'key'" 33 ); 34 Assert.ok( 35 migrator.constructor.displayNameL10nID, 36 "PasswordFileMigrator implements static getter 'displayNameL10nID'" 37 ); 38 Assert.ok( 39 await migrator.getFilePickerConfig(), 40 "PasswordFileMigrator returns something for getFilePickerConfig()" 41 ); 42 Assert.ok( 43 migrator.displayedResourceTypes, 44 "PasswordFileMigrator returns something for displayedResourceTypes" 45 ); 46 Assert.ok(migrator.enabled, "PasswordFileMigrator is enabled."); 47 48 const IMPORT_SUMMARY = [ 49 { 50 result: "added", 51 }, 52 { 53 result: "added", 54 }, 55 { 56 result: "modified", 57 }, 58 ]; 59 const EXPECTED_SUCCESS_STATE = { 60 [MigrationWizardConstants.DISPLAYED_FILE_RESOURCE_TYPES.PASSWORDS_NEW]: 61 "2 added", 62 [MigrationWizardConstants.DISPLAYED_FILE_RESOURCE_TYPES.PASSWORDS_UPDATED]: 63 "1 updated", 64 }; 65 const FAKE_PATH = "some/fake/path.csv"; 66 67 let importFromCSVStub = sandbox 68 .stub(LoginCSVImport, "importFromCSV") 69 .callsFake(somePath => { 70 Assert.equal(somePath, FAKE_PATH, "Got expected path"); 71 return Promise.resolve(IMPORT_SUMMARY); 72 }); 73 let result = await migrator.migrate(FAKE_PATH); 74 75 Assert.ok(importFromCSVStub.called, "The stub should have been called."); 76 Assert.deepEqual( 77 result, 78 EXPECTED_SUCCESS_STATE, 79 "Got back the expected success state." 80 ); 81 82 sandbox.restore(); 83 }); 84 85 /** 86 * Tests that the PasswordFileMigrator will throw an exception with a 87 * consistent error message if the LoginCSVImport function rejects. 88 */ 89 add_task(async function test_PasswordFileMigrator_exception() { 90 let sandbox = sinon.createSandbox(); 91 registerCleanupFunction(() => { 92 sandbox.restore(); 93 }); 94 95 let migrator = new PasswordFileMigrator(); 96 97 const FAKE_PATH = "some/fake/path.csv"; 98 99 sandbox.stub(LoginCSVImport, "importFromCSV").callsFake(() => { 100 return Promise.reject("Some error"); 101 }); 102 103 await Assert.rejects( 104 migrator.migrate(FAKE_PATH), 105 /The file doesn’t include any valid password data/ 106 ); 107 108 sandbox.restore(); 109 });