tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });