1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-30 16:18:07 +01:00
metamask-extension/app/scripts/lib/seed-phrase-verifier.test.js
Mark Stacey 3ba3b330f6 Use strict assertion mode everywhere (#11012)
The `assert` module has two modes: "Legacy" and "strict". When using
strict mode, the "strict" version of each assertion method is implied.
Whereas in legacy mode, by default it will use the deprecated, "loose"
version of each assertion.

We now use strict mode everywhere. A few tests required updates where
they were asserting the wrong thing, and it was passing beforehand due
to the loose matching.
2021-06-07 10:02:39 -02:30

130 lines
4.6 KiB
JavaScript

import { strict as assert } from 'assert';
import { cloneDeep } from 'lodash';
import KeyringController from 'eth-keyring-controller';
import firstTimeState from '../first-time-state';
import mockEncryptor from '../../../test/lib/mock-encryptor';
import seedPhraseVerifier from './seed-phrase-verifier';
describe('SeedPhraseVerifier', function () {
describe('verifyAccounts', function () {
const password = 'passw0rd1';
const hdKeyTree = 'HD Key Tree';
let keyringController;
let primaryKeyring;
beforeEach(async function () {
keyringController = new KeyringController({
initState: cloneDeep(firstTimeState),
encryptor: mockEncryptor,
});
assert(keyringController);
await keyringController.createNewVaultAndKeychain(password);
primaryKeyring = keyringController.getKeyringsByType(hdKeyTree)[0];
});
it('should be able to verify created account with seed words', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
const serialized = await primaryKeyring.serialize();
const seedWords = serialized.mnemonic;
assert.notEqual(seedWords.length, 0);
await seedPhraseVerifier.verifyAccounts(createdAccounts, seedWords);
});
it('should be able to verify created account (upper case) with seed words', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
const upperCaseAccounts = [createdAccounts[0].toUpperCase()];
const serialized = await primaryKeyring.serialize();
const seedWords = serialized.mnemonic;
assert.notEqual(seedWords.length, 0);
await seedPhraseVerifier.verifyAccounts(upperCaseAccounts, seedWords);
});
it('should be able to verify created account (lower case) with seed words', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
const lowerCaseAccounts = [createdAccounts[0].toLowerCase()];
const serialized = await primaryKeyring.serialize();
const seedWords = serialized.mnemonic;
assert.notEqual(seedWords.length, 0);
await seedPhraseVerifier.verifyAccounts(lowerCaseAccounts, seedWords);
});
it('should return error with good but different seed words', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
await primaryKeyring.serialize();
const seedWords =
'debris dizzy just program just float decrease vacant alarm reduce speak stadium';
try {
await seedPhraseVerifier.verifyAccounts(createdAccounts, seedWords);
assert.fail('Should reject');
} catch (err) {
assert.ok(
err.message.indexOf('Not identical accounts!') >= 0,
'Wrong error message',
);
}
});
it('should return error with undefined existing accounts', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
await primaryKeyring.serialize();
const seedWords =
'debris dizzy just program just float decrease vacant alarm reduce speak stadium';
try {
await seedPhraseVerifier.verifyAccounts(undefined, seedWords);
assert.fail('Should reject');
} catch (err) {
assert.equal(err.message, 'No created accounts defined.');
}
});
it('should return error with empty accounts array', async function () {
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 1);
await primaryKeyring.serialize();
const seedWords =
'debris dizzy just program just float decrease vacant alarm reduce speak stadium';
try {
await seedPhraseVerifier.verifyAccounts([], seedWords);
assert.fail('Should reject');
} catch (err) {
assert.equal(err.message, 'No created accounts defined.');
}
});
it('should be able to verify more than one created account with seed words', async function () {
await keyringController.addNewAccount(primaryKeyring);
await keyringController.addNewAccount(primaryKeyring);
const createdAccounts = await primaryKeyring.getAccounts();
assert.equal(createdAccounts.length, 3);
const serialized = await primaryKeyring.serialize();
const seedWords = serialized.mnemonic;
assert.notEqual(seedWords.length, 0);
await seedPhraseVerifier.verifyAccounts(createdAccounts, seedWords);
});
});
});