2021-06-24 16:19:31 +02:00
const { strict : assert } = require ( 'assert' ) ;
2022-02-23 18:27:13 +01:00
const {
convertToHexValue ,
withFixtures ,
regularDelayMs ,
completeImportSRPOnboardingFlow ,
} = require ( '../helpers' ) ;
const enLocaleMessages = require ( '../../../app/_locales/en/messages.json' ) ;
2022-10-28 10:42:12 +02:00
const FixtureBuilder = require ( '../fixture-builder' ) ;
2021-06-24 16:19:31 +02:00
describe ( 'Add account' , function ( ) {
2022-02-23 18:27:13 +01:00
const testSeedPhrase =
'forum vessel pink push lonely enact gentle tail admit parrot grunt dress' ;
const testPassword = 'correct horse battery staple' ;
2021-06-24 16:19:31 +02:00
const ganacheOptions = {
accounts : [
{
secretKey :
2022-02-23 18:27:13 +01:00
'0x53CB0AB5226EEBF4D872113D98332C1555DC304443BEE1CF759D15798D3C55A9' ,
2022-01-19 00:08:41 +01:00
balance : convertToHexValue ( 25000000000000000000 ) ,
2021-06-24 16:19:31 +02:00
} ,
] ,
} ;
2022-11-24 19:09:54 +01:00
const secondAccount = '0x3ED0eE22E0685Ebbf07b2360A8331693c413CC59' ;
const thirdAccount = '0xD38d853771Fb546bd8B18b2F3638491bC0B0E906' ;
2022-02-23 18:27:13 +01:00
2021-06-24 16:19:31 +02:00
it ( 'should display correct new account name after create' , async function ( ) {
await withFixtures (
{
2022-10-28 10:42:12 +02:00
fixtures : new FixtureBuilder ( ) . build ( ) ,
2021-06-24 16:19:31 +02:00
ganacheOptions ,
title : this . test . title ,
} ,
async ( { driver } ) => {
await driver . navigate ( ) ;
await driver . fill ( '#password' , 'correct horse battery staple' ) ;
await driver . press ( '#password' , driver . Key . ENTER ) ;
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2021-06-24 16:19:31 +02:00
await driver . fill ( '.new-account-create-form input' , '2nd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
const accountName = await driver . waitForSelector ( {
css : '.selected-account__name' ,
text : '2nd' ,
} ) ;
assert . equal ( await accountName . getText ( ) , '2nd account' ) ;
} ,
) ;
} ) ;
2022-02-23 18:27:13 +01:00
it ( 'should add the same account addresses when a secret recovery phrase is imported, the account is locked, and the same secret recovery phrase is imported again' , async function ( ) {
await withFixtures (
{
2022-10-28 10:42:12 +02:00
fixtures : new FixtureBuilder ( { onboarding : true } ) . build ( ) ,
2022-02-23 18:27:13 +01:00
ganacheOptions ,
title : this . test . title ,
failOnConsoleError : false ,
} ,
async ( { driver } ) => {
await driver . navigate ( ) ;
await completeImportSRPOnboardingFlow (
driver ,
testSeedPhrase ,
testPassword ,
) ;
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2022-02-23 18:27:13 +01:00
await driver . fill ( '.new-account-create-form input' , '2nd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
await driver . clickElement (
'[data-testid="account-options-menu__account-details"]' ,
) ;
const detailsModal = await driver . findVisibleElement ( 'span .modal' ) ;
// get the public address for the "second account"
2022-03-18 18:47:28 +01:00
await driver . waitForSelector ( '.qr-code__address' ) ;
2022-11-24 19:09:54 +01:00
const secondAccountAddress = await driver . findElement ( {
text : secondAccount ,
tag : 'div' ,
} ) ;
2022-02-23 18:27:13 +01:00
const secondAccountPublicAddress = await secondAccountAddress . getText ( ) ;
await driver . clickElement ( '.account-modal__close' ) ;
await detailsModal . waitForElementState ( 'hidden' ) ;
// generate a third accound
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2022-02-23 18:27:13 +01:00
await driver . fill ( '.new-account-create-form input' , '3rd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
await driver . clickElement (
'[data-testid="account-options-menu__account-details"]' ,
) ;
// get the public address for the "third account"
const secondDetailsModal = await driver . findVisibleElement (
'span .modal' ,
) ;
2022-03-18 18:47:28 +01:00
await driver . waitForSelector ( '.qr-code__address' ) ;
2022-11-24 19:09:54 +01:00
const thirdAccountAddress = await driver . findElement ( {
text : thirdAccount ,
tag : 'div' ,
} ) ;
2022-02-23 18:27:13 +01:00
const thirdAccountPublicAddress = await thirdAccountAddress . getText ( ) ;
await driver . clickElement ( '.account-modal__close' ) ;
await secondDetailsModal . waitForElementState ( 'hidden' ) ;
// lock account
await driver . clickElement ( '.account-menu__icon' ) ;
await driver . delay ( regularDelayMs ) ;
const lockButton = await driver . findClickableElement (
'.account-menu__lock-button' ,
) ;
await lockButton . click ( ) ;
await driver . delay ( regularDelayMs ) ;
// restore same seed phrase
const restoreSeedLink = await driver . findClickableElement (
2022-02-23 20:05:55 +01:00
'.unlock-page__link' ,
2022-02-23 18:27:13 +01:00
) ;
await restoreSeedLink . click ( ) ;
await driver . delay ( regularDelayMs ) ;
2022-03-16 22:43:21 +01:00
await driver . pasteIntoField (
2022-03-21 20:09:26 +01:00
'[data-testid="import-srp__srp-word-0"]' ,
2022-02-23 18:27:13 +01:00
testSeedPhrase ,
) ;
await driver . fill ( '#password' , 'correct horse battery staple' ) ;
await driver . fill ( '#confirm-password' , 'correct horse battery staple' ) ;
await driver . clickElement ( {
text : enLocaleMessages . restore . message ,
tag : 'button' ,
} ) ;
await driver . delay ( regularDelayMs ) ;
// recreate a "2nd account"
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2022-02-23 18:27:13 +01:00
await driver . fill ( '.new-account-create-form input' , '2nd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
await driver . clickElement (
'[data-testid="account-options-menu__account-details"]' ,
) ;
const thirdDetailsModal = await driver . findVisibleElement (
'span .modal' ,
) ;
// get the public address for the "second account"
2022-03-18 18:47:28 +01:00
await driver . waitForSelector ( '.qr-code__address' ) ;
2022-11-24 19:09:54 +01:00
const recreatedSecondAccountAddress = await driver . findElement ( {
text : secondAccount ,
tag : 'div' ,
} ) ;
2022-02-23 18:27:13 +01:00
assert . equal (
await recreatedSecondAccountAddress . getText ( ) ,
secondAccountPublicAddress ,
) ;
await driver . clickElement ( '.account-modal__close' ) ;
await thirdDetailsModal . waitForElementState ( 'hidden' ) ;
// re-generate a third accound
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2022-02-23 18:27:13 +01:00
await driver . fill ( '.new-account-create-form input' , '3rd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
await driver . clickElement (
'[data-testid="account-options-menu__account-details"]' ,
) ;
// get the public address for the "third account"
2022-11-24 19:09:54 +01:00
const recreatedThirdAccountAddress = await driver . findElement ( {
text : thirdAccount ,
tag : 'div' ,
} ) ;
2022-02-23 18:27:13 +01:00
assert . strictEqual (
await recreatedThirdAccountAddress . getText ( ) ,
thirdAccountPublicAddress ,
) ;
} ,
) ;
} ) ;
2022-02-24 17:37:37 +01:00
it ( 'It should be possible to remove an account imported with a private key, but should not be possible to remove an account generated from the SRP imported in onboarding' , async function ( ) {
const testPrivateKey =
'14abe6f4aab7f9f626fe981c864d0adeb5685f289ac9270c27b8fd790b4235d6' ;
await withFixtures (
{
2022-10-28 10:42:12 +02:00
fixtures : new FixtureBuilder ( ) . build ( ) ,
2022-02-24 17:37:37 +01:00
ganacheOptions ,
title : this . test . title ,
} ,
async ( { driver } ) => {
await driver . navigate ( ) ;
await driver . fill ( '#password' , 'correct horse battery staple' ) ;
await driver . press ( '#password' , driver . Key . ENTER ) ;
await driver . delay ( regularDelayMs ) ;
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Create account' , tag : 'div' } ) ;
2022-02-24 17:37:37 +01:00
await driver . fill ( '.new-account-create-form input' , '2nd account' ) ;
await driver . clickElement ( { text : 'Create' , tag : 'button' } ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
const menuItems = await driver . findElements ( '.menu-item' ) ;
assert . equal ( menuItems . length , 3 ) ;
// click out of menu
await driver . clickElement ( '.menu__background' ) ;
// import with private key
await driver . clickElement ( '.account-menu__icon' ) ;
2022-08-08 21:01:38 +02:00
await driver . clickElement ( { text : 'Import account' , tag : 'div' } ) ;
2022-02-24 17:37:37 +01:00
// enter private key',
await driver . fill ( '#private-key-box' , testPrivateKey ) ;
2023-03-06 18:48:28 +01:00
await driver . clickElement ( { text : 'Import' , tag : 'span' } ) ;
2022-02-24 17:37:37 +01:00
// should show the correct account name
const importedAccountName = await driver . findElement (
'.selected-account__name' ,
) ;
assert . equal ( await importedAccountName . getText ( ) , 'Account 3' ) ;
await driver . clickElement (
'[data-testid="account-options-menu-button"]' ,
) ;
const menuItems2 = await driver . findElements ( '.menu-item' ) ;
assert . equal ( menuItems2 . length , 4 ) ;
await driver . findElement (
'[data-testid="account-options-menu__remove-account"]' ,
) ;
} ,
) ;
} ) ;
2021-06-24 16:19:31 +02:00
} ) ;