From f9f6be488aa99710a498bf73cc123b35d6297aa5 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 18:57:45 +0200 Subject: [PATCH 01/52] feat: use metamask@10 by default Signed-off-by: Jakub Mucha --- plugins/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/index.js b/plugins/index.js index f5eceef25..0a486f8c3 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -36,7 +36,7 @@ module.exports = (on, config) => { if (!process.env.SKIP_METAMASK_INSTALL) { // NOTE: extensions cannot be loaded in headless Chrome const metamaskPath = await helpers.prepareMetamask( - process.env.METAMASK_VERSION || '9.7.1', + process.env.METAMASK_VERSION || '10.20.0', ); arguments_.extensions.push(metamaskPath); } From 88f7111e40c194a3ac82faf7f6ca3e5d0bd3a3f9 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 20:40:10 +0200 Subject: [PATCH 02/52] po: add tippy-tooltip Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index ea27646fa..547d675b9 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -12,6 +12,12 @@ const popup = { background: '.popover-bg', }; +const tippyTooltipSelector = '.tippy-popper'; +const tippyTooltip = { + container: tippyTooltipSelector, + closeButton: `${tippyTooltipSelector} button`, +}; + const accountMenu = { button: '.account-menu__icon', accountButton: number => `.account-menu__account:nth-child(${number})`, @@ -60,6 +66,7 @@ module.exports.mainPageElements = { networkSwitcher, walletOverview, popup, + tippyTooltip, accountMenu, optionsMenu, connectedSites, From 0802c852527f86fcd1c8395f784a4ba5394bedbf Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 20:40:26 +0200 Subject: [PATCH 03/52] po: update for importwallet flow Signed-off-by: Jakub Mucha --- pages/metamask/first-time-flow-page.js | 45 ++++++++++++++------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/pages/metamask/first-time-flow-page.js b/pages/metamask/first-time-flow-page.js index d01521060..2b00cab93 100644 --- a/pages/metamask/first-time-flow-page.js +++ b/pages/metamask/first-time-flow-page.js @@ -7,15 +7,6 @@ module.exports.welcomePageElements = { confirmButton, }; -const firstTimeFlowPage = '.first-time-flow'; -const importWalletButton = `${firstTimeFlowPage} .select-action__select-button:nth-child(1) .first-time-flow__button`; -const createWalletButton = `${firstTimeFlowPage} .select-action__select-button:nth-child(2) .first-time-flow__button`; -module.exports.firstTimeFlowPageElements = { - firstTimeFlowPage, - importWalletButton, - createWalletButton, -}; - const metametricsPage = '.metametrics-opt-in'; const optOutAnalyticsButton = `${metametricsPage} [data-testid="page-container-footer-cancel"]`; module.exports.metametricsPageElements = { @@ -23,17 +14,29 @@ module.exports.metametricsPageElements = { optOutAnalyticsButton, }; -const firstTimeFlowFormPage = '.first-time-flow__form'; -const secretWordsInput = `${firstTimeFlowFormPage} .first-time-flow__seedphrase input`; -const passwordInput = `${firstTimeFlowFormPage} #password`; -const confirmPasswordInput = `${firstTimeFlowFormPage} #confirm-password`; -const termsCheckbox = `${firstTimeFlowFormPage} .first-time-flow__terms`; -const importButton = `${firstTimeFlowFormPage} .first-time-flow__button`; -const newPasswordInput = `${firstTimeFlowFormPage} #create-password`; -const newSignupCheckbox = `${firstTimeFlowFormPage} .first-time-flow__checkbox`; +const firstTimeFlowPage = '.first-time-flow'; +const importWalletButton = `${firstTimeFlowPage} [data-testid="import-wallet-button"]`; +const createWalletButton = `${firstTimeFlowPage} [data-testid="create-wallet-button"]`; +module.exports.firstTimeFlowPageElements = { + firstTimeFlowPage, + importWalletButton, + createWalletButton, +}; + +const firstTimeFlowImportPage = '.first-time-flow__import'; +const newVaultForm = `${firstTimeFlowImportPage} .create-new-vault__form`; +const secretWordsInput = number => + `${newVaultForm} [data-testid="import-srp__srp-word-${number}"]`; +const passwordInput = `${newVaultForm} #password`; +const confirmPasswordInput = `${newVaultForm} #confirm-password`; +const termsCheckbox = `${newVaultForm} [data-testid="create-new-vault__terms-checkbox"]`; +const importButton = `${newVaultForm} .create-new-vault__submit-button`; +const newPasswordInput = `${newVaultForm} #create-password`; +const newSignupCheckbox = `${newVaultForm} .first-time-flow__checkbox`; -module.exports.firstTimeFlowFormPageElements = { - firstTimeFlowFormPage, +module.exports.firstTimeFlowImportPageElements = { + firstTimeFlowImportPage, + newVaultForm, secretWordsInput, passwordInput, confirmPasswordInput, @@ -50,8 +53,8 @@ module.exports.secureYourWalletPageElements = { nextButton, }; -const endOfFlowPage = '.end-of-flow'; -const allDoneButton = `${endOfFlowPage} .first-time-flow__button`; +const endOfFlowPage = '[data-testid="end-of-flow"]'; +const allDoneButton = `${endOfFlowPage} [data-testid="EOF-complete-button"]`; module.exports.endOfFlowPageElements = { endOfFlowPage, allDoneButton, From 1b0d551f49b4b534b8b0455137bc44c3f201f306 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 20:40:51 +0200 Subject: [PATCH 04/52] feat: importwallet flow updated Signed-off-by: Jakub Mucha --- commands/metamask.js | 70 +++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 3ae4e881f..306ba43ae 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -4,7 +4,7 @@ const { welcomePageElements, firstTimeFlowPageElements, metametricsPageElements, - firstTimeFlowFormPageElements, + firstTimeFlowImportPageElements, secureYourWalletPageElements, revealSeedPageElements, endOfFlowPageElements, @@ -136,7 +136,7 @@ module.exports = { ); return true; }, - closePopup: async () => { + closePopupAndTooltips: async () => { // note: this is required for fast execution of e2e tests to avoid flakiness // otherwise popup may not be detected properly and not closed await playwright.metamaskWindow().waitForTimeout(1000); @@ -153,6 +153,13 @@ module.exports = { .metamaskWindow() .mouse.click(popupBackgroundBox.x + 1, popupBackgroundBox.y + 1); } + if ( + (await playwright + .metamaskWindow() + .$(mainPageElements.tippyTooltip.container)) !== null + ) { + await playwright.waitAndClick(mainPageElements.tippyTooltip.closeButton); + } return true; }, closeModal: async () => { @@ -180,39 +187,48 @@ module.exports = { waitForEvent: 'navi', }, ); - await module.exports.closePopup(); + await module.exports.closePopupAndTooltips(); return true; }, - importWallet: async (secretWords, password) => { + optOutAnalytics: async () => { await playwright.waitAndClick( - firstTimeFlowPageElements.importWalletButton, + metametricsPageElements.optOutAnalyticsButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', }, ); + return true; + }, + importWallet: async (secretWords, password) => { + module.exports.optOutAnalytics(); await playwright.waitAndClick( - metametricsPageElements.optOutAnalyticsButton, + firstTimeFlowPageElements.importWalletButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', }, ); + // todo: add support for more secret words (15/18/21/24) + for (const [index, word] of secretWords.split(' ').entries()) { + await playwright.waitAndType( + firstTimeFlowImportPageElements.secretWordsInput(index), + word, + ); + } await playwright.waitAndType( - firstTimeFlowFormPageElements.secretWordsInput, - secretWords, - ); - await playwright.waitAndType( - firstTimeFlowFormPageElements.passwordInput, + firstTimeFlowImportPageElements.passwordInput, password, ); await playwright.waitAndType( - firstTimeFlowFormPageElements.confirmPasswordInput, + firstTimeFlowImportPageElements.confirmPasswordInput, password, ); - await playwright.waitAndClick(firstTimeFlowFormPageElements.termsCheckbox); await playwright.waitAndClick( - firstTimeFlowFormPageElements.importButton, + firstTimeFlowImportPageElements.termsCheckbox, + ); + await playwright.waitAndClick( + firstTimeFlowImportPageElements.importButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', @@ -225,10 +241,11 @@ module.exports = { waitForEvent: 'navi', }, ); - await module.exports.closePopup(); + await module.exports.closePopupAndTooltips(); return true; }, createWallet: async password => { + module.exports.optOutAnalytics(); await playwright.waitAndClick( firstTimeFlowPageElements.createWalletButton, await playwright.metamaskWindow(), @@ -236,26 +253,19 @@ module.exports = { waitForEvent: 'navi', }, ); - await playwright.waitAndClick( - metametricsPageElements.optOutAnalyticsButton, - await playwright.metamaskWindow(), - { - waitForEvent: 'navi', - }, - ); await playwright.waitAndType( - firstTimeFlowFormPageElements.newPasswordInput, + firstTimeFlowImportPageElements.newPasswordInput, password, ); await playwright.waitAndType( - firstTimeFlowFormPageElements.confirmPasswordInput, + firstTimeFlowImportPageElements.confirmPasswordInput, password, ); await playwright.waitAndClick( - firstTimeFlowFormPageElements.newSignupCheckbox, + firstTimeFlowImportPageElements.newSignupCheckbox, ); await playwright.waitAndClick( - firstTimeFlowFormPageElements.importButton, + firstTimeFlowImportPageElements.importButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', @@ -275,7 +285,7 @@ module.exports = { waitForEvent: 'navi', }, ); - await module.exports.closePopup(); + await module.exports.closePopupAndTooltips(); return true; }, importAccount: async privateKey => { @@ -312,9 +322,9 @@ module.exports = { } await switchToMetamaskIfNotActive(); - // note: closePopup() is required after changing createAccount() to use direct urls (popup started appearing) - // ^ this change also introduced 500ms delay for closePopup() function - await module.exports.closePopup(); + // note: closePopupAndTooltips() is required after changing createAccount() to use direct urls (popup started appearing) + // ^ this change also introduced 500ms delay for closePopupAndTooltips() function + await module.exports.closePopupAndTooltips(); await playwright.waitAndClick(mainPageElements.accountMenu.button); if (typeof accountNameOrAccountNumber === 'number') { From bbea1284c8d6b25bca5d102fae72ee6d9af218f3 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 20:42:04 +0200 Subject: [PATCH 05/52] refactor: changeNetwork Signed-off-by: Jakub Mucha --- commands/metamask.js | 54 ++++++++------------------------------------ 1 file changed, 9 insertions(+), 45 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 306ba43ae..ed56b6cef 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -343,66 +343,30 @@ module.exports = { }, changeNetwork: async network => { await switchToMetamaskIfNotActive(); - + await playwright.waitAndClick(mainPageElements.networkSwitcher.button); if (typeof network === 'string') { network = network.toLowerCase(); - } else if (typeof network === 'object') { - network.networkName = network.networkName.toLowerCase(); - } - - await playwright.waitAndClick(mainPageElements.networkSwitcher.button); - if (network === 'main' || network === 'mainnet') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(0), - ); - } else if (network === 'ropsten') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(1), - ); - } else if (network === 'kovan') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(2), - ); - } else if (network === 'rinkeby') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(3), - ); - } else if (network === 'goerli') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(4), - ); - } else if (network === 'localhost') { - await playwright.waitAndClick( - mainPageElements.networkSwitcher.networkButton(5), - ); - } else if (typeof network === 'object') { - await playwright.waitAndClickByText( - mainPageElements.networkSwitcher.dropdownMenuItem, - network.networkName, - ); - } else { await playwright.waitAndClickByText( mainPageElements.networkSwitcher.dropdownMenuItem, network, ); - } - - setNetwork(network); - - if (typeof network === 'object') { await playwright.waitForText( mainPageElements.networkSwitcher.networkName, + network, + ); + } else if (typeof network === 'object') { + network.networkName = network.networkName.toLowerCase(); + await playwright.waitAndClickByText( + mainPageElements.networkSwitcher.dropdownMenuItem, network.networkName, ); - } else { await playwright.waitForText( mainPageElements.networkSwitcher.networkName, - network, + network.networkName, ); } - + setNetwork(network); await switchToCypressIfNotActive(); - return true; }, addNetwork: async network => { From 8f51eb8f6b4253a4e12f8e4bd4c37207530a57ad Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 21:36:09 +0200 Subject: [PATCH 06/52] po: createWallet improvements Signed-off-by: Jakub Mucha --- pages/metamask/first-time-flow-page.js | 29 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/pages/metamask/first-time-flow-page.js b/pages/metamask/first-time-flow-page.js index 2b00cab93..781a5e527 100644 --- a/pages/metamask/first-time-flow-page.js +++ b/pages/metamask/first-time-flow-page.js @@ -31,8 +31,6 @@ const passwordInput = `${newVaultForm} #password`; const confirmPasswordInput = `${newVaultForm} #confirm-password`; const termsCheckbox = `${newVaultForm} [data-testid="create-new-vault__terms-checkbox"]`; const importButton = `${newVaultForm} .create-new-vault__submit-button`; -const newPasswordInput = `${newVaultForm} #create-password`; -const newSignupCheckbox = `${newVaultForm} .first-time-flow__checkbox`; module.exports.firstTimeFlowImportPageElements = { firstTimeFlowImportPage, @@ -42,27 +40,38 @@ module.exports.firstTimeFlowImportPageElements = { confirmPasswordInput, termsCheckbox, importButton, +}; + +const firstTimeFlowCreatePage = '.first-time-flow'; +const newPasswordInput = `${firstTimeFlowCreatePage} [data-testid="create-password"]`; +const confirmNewPasswordInput = `${firstTimeFlowCreatePage} [data-testid="confirm-password"]`; +const newSignupCheckbox = `${firstTimeFlowCreatePage} .first-time-flow__checkbox`; +const createButton = `${firstTimeFlowCreatePage} .first-time-flow__button`; +module.exports.firstTimeFlowCreatePagePageElements = { + firstTimeFlowCreatePage, newPasswordInput, + confirmNewPasswordInput, newSignupCheckbox, + createButton, }; -const secureYourWalletPage = '.seed-phrase-intro'; +const secureYourWalletPage = '[data-testid="seed-phrase-intro"]'; const nextButton = `${secureYourWalletPage} button`; module.exports.secureYourWalletPageElements = { secureYourWalletPage, nextButton, }; +const revealSeedPage = '[data-testid="reveal-seed-phrase"]'; +const remindLaterButton = `${revealSeedPage} .first-time-flow__button`; +module.exports.revealSeedPageElements = { + revealSeedPage, + remindLaterButton, +}; + const endOfFlowPage = '[data-testid="end-of-flow"]'; const allDoneButton = `${endOfFlowPage} [data-testid="EOF-complete-button"]`; module.exports.endOfFlowPageElements = { endOfFlowPage, allDoneButton, }; - -const revealSeedPage = '.reveal-seed-phrase'; -const remindLaterButton = `${revealSeedPage} .first-time-flow__button`; -module.exports.revealSeedPageElements = { - revealSeedPage, - remindLaterButton, -}; From 913a30558d40d003efdb8df1af846db168b8b20d Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sun, 16 Oct 2022 21:36:21 +0200 Subject: [PATCH 07/52] feat: createWallet update Signed-off-by: Jakub Mucha --- commands/metamask.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index ed56b6cef..4adcc6f42 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -5,6 +5,7 @@ const { firstTimeFlowPageElements, metametricsPageElements, firstTimeFlowImportPageElements, + firstTimeFlowCreatePagePageElements, secureYourWalletPageElements, revealSeedPageElements, endOfFlowPageElements, @@ -254,18 +255,18 @@ module.exports = { }, ); await playwright.waitAndType( - firstTimeFlowImportPageElements.newPasswordInput, + firstTimeFlowCreatePagePageElements.newPasswordInput, password, ); await playwright.waitAndType( - firstTimeFlowImportPageElements.confirmPasswordInput, + firstTimeFlowCreatePagePageElements.confirmNewPasswordInput, password, ); await playwright.waitAndClick( - firstTimeFlowImportPageElements.newSignupCheckbox, + firstTimeFlowCreatePagePageElements.newSignupCheckbox, ); await playwright.waitAndClick( - firstTimeFlowImportPageElements.importButton, + firstTimeFlowCreatePagePageElements.createButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', From 58a697391397de34cba9bcfaaa07f619848b2f40 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Mon, 17 Oct 2022 18:06:07 +0200 Subject: [PATCH 08/52] fix: importAccount goto triggered too fast Signed-off-by: Jakub Mucha --- commands/metamask.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/commands/metamask.js b/commands/metamask.js index 3ae4e881f..a3ff3b286 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -285,7 +285,13 @@ module.exports = { mainPageElements.importAccount.input, privateKey, ); - await playwright.waitAndClick(mainPageElements.importAccount.importButton); + await playwright.waitAndClick( + mainPageElements.importAccount.importButton, + await playwright.metamaskWindow(), + { + waitForEvent: 'navi', + }, + ); await switchToCypressIfNotActive(); return true; }, From 1f17ea3a6b596c3f43e247987acb49aac4a5805f Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 06:19:53 +0200 Subject: [PATCH 09/52] po: add toggles from adv settings Signed-off-by: Jakub Mucha --- pages/metamask/settings-page.js | 42 ++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index ea7dc9051..6b0156fbd 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -9,16 +9,52 @@ module.exports.settingsPageElements = { closeButton, }; +const resetAccountButton = + '[data-testid="advanced-setting-reset-account"] button'; +const advancedGasControlToggleOn = + '[data-testid="advanced-setting-advanced-gas-inline"] .toggle-button--on'; +const advancedGasControlToggleOff = + '[data-testid="advanced-setting-advanced-gas-inline"] .toggle-button--off'; +const enhancedTokenDetectionToggleOn = + '[data-testid="advanced-setting-token-detection"] .toggle-button--on'; +const enhancedTokenDetectionToggleOff = + '[data-testid="advanced-setting-token-detection"] .toggle-button--off'; +const showHexDataToggleOn = + '[data-testid="advanced-setting-hex-data"] .toggle-button--on'; +const showHexDataToggleOff = + '[data-testid="advanced-setting-hex-data"] .toggle-button--off'; +const showTestnetConversionOn = + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--on'; +const showTestnetConversionOff = + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--off'; +const showTestnetNetworksOn = + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(9) .toggle-button--on'; +const showTestnetNetworksOff = + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(9) .toggle-button--off'; const customNonceToggleOn = '[data-testid="advanced-setting-custom-nonce"] .toggle-button--on'; const customNonceToggleOff = '[data-testid="advanced-setting-custom-nonce"] .toggle-button--off'; -const resetAccountButton = - '[data-testid="advanced-setting-reset-account"] button'; +const dismissBackupReminderOn = + '[data-testid="advanced-setting-dismiss-reminder"] .toggle-button--on'; +const dismissBackupReminderOff = + '[data-testid="advanced-setting-dismiss-reminder"] .toggle-button--off'; module.exports.advancedPageElements = { + resetAccountButton, + advancedGasControlToggleOn, + advancedGasControlToggleOff, + enhancedTokenDetectionToggleOn, + enhancedTokenDetectionToggleOff, + showHexDataToggleOn, + showHexDataToggleOff, + showTestnetConversionOn, + showTestnetConversionOff, + showTestnetNetworksOn, + showTestnetNetworksOff, + dismissBackupReminderOn, + dismissBackupReminderOff, customNonceToggleOn, customNonceToggleOff, - resetAccountButton, }; const nevermindButton = '.modal-container button:nth-child(1)'; From 66dbac05716e39eb31b5875de44e5cfafa3c330b Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 06:29:43 +0200 Subject: [PATCH 10/52] refactor: activateCustomNonce Signed-off-by: Jakub Mucha --- commands/metamask.js | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 4adcc6f42..8dc857fec 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -502,24 +502,11 @@ module.exports = { return true; }, activateCustomNonce: async () => { - await switchToMetamaskIfNotActive(); - await module.exports.goToAdvancedSettings(); - if ( - (await playwright - .metamaskWindow() - .$(advancedPageElements.customNonceToggleOn)) === null - ) { - await playwright.waitAndClick(advancedPageElements.customNonceToggleOff); - } - await playwright.waitAndClick( - settingsPageElements.closeButton, - await playwright.metamaskWindow(), - { - waitForEvent: 'navi', - }, + const activated = await activateAdvancedSetting( + advancedPageElements.customNonceToggleOn, + advancedPageElements.customNonceToggleOff, ); - await switchToCypressIfNotActive(); - return true; + return activated; }, resetAccount: async () => { await switchToMetamaskIfNotActive(); @@ -791,6 +778,9 @@ module.exports = { await module.exports.createWallet(password); await module.exports.importAccount(secretWordsOrPrivateKey); } + + // todo: pre-setup!!! + if (isCustomNetwork) { await module.exports.addNetwork(network); } else { @@ -841,3 +831,20 @@ async function switchToCypressIfNotActive() { } return switchBackToCypressWindow; } + +async function activateAdvancedSetting(toggleOn, toggleOff) { + await switchToMetamaskIfNotActive(); + await module.exports.goToAdvancedSettings(); + if ((await playwright.metamaskWindow().$(toggleOn)) === null) { + await playwright.waitAndClick(toggleOff); + } + await playwright.waitAndClick( + settingsPageElements.closeButton, + await playwright.metamaskWindow(), + { + waitForEvent: 'navi', + }, + ); + await switchToCypressIfNotActive(); + return true; +} From 2fc1423e80b988767ee7b3675afc3b507e6ec271 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 06:58:21 +0200 Subject: [PATCH 11/52] linting Signed-off-by: Jakub Mucha --- commands/playwright.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands/playwright.js b/commands/playwright.js index 11e031f8e..48c258153 100644 --- a/commands/playwright.js +++ b/commands/playwright.js @@ -122,7 +122,8 @@ module.exports = { await sleep(200); if (retries < 50) { retries++; - return await module.exports.switchToMetamaskNotification(); + await module.exports.switchToMetamaskNotification(); + return; } else if (retries >= 50) { retries = 0; throw new Error( From d1c7ad87f5186a87b06fc177a97e9f0d52df942e Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 06:59:36 +0200 Subject: [PATCH 12/52] feat: add bunch of new command for advanced settings Signed-off-by: Jakub Mucha --- commands/metamask.js | 46 ++++++++++++++++++++++++++++++-- plugins/index.js | 24 +++++++++++++++++ support/commands.js | 24 +++++++++++++++++ support/index.d.ts | 36 +++++++++++++++++++++++++ tests/e2e/specs/metamask-spec.js | 1 + 5 files changed, 129 insertions(+), 2 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 8dc857fec..a6cc75903 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -501,12 +501,54 @@ module.exports = { await switchToCypressIfNotActive(); return true; }, + activateAdvancedGasControl: async () => { + await activateAdvancedSetting( + advancedPageElements.advancedGasControlToggleOn, + advancedPageElements.advancedGasControlToggleOff, + ); + return; + }, + activateEnhancedTokenDetection: async () => { + await activateAdvancedSetting( + advancedPageElements.enhancedTokenDetectionToggleOn, + advancedPageElements.enhancedTokenDetectionToggleOff, + ); + return; + }, + activateShowHexData: async () => { + await activateAdvancedSetting( + advancedPageElements.showHexDataToggleOn, + advancedPageElements.showHexDataToggleOff, + ); + return; + }, + activateTestnetConversion: async () => { + await activateAdvancedSetting( + advancedPageElements.showTestnetConversionOn, + advancedPageElements.showTestnetConversionOff, + ); + return; + }, + activateShowTestnetNetworks: async () => { + await activateAdvancedSetting( + advancedPageElements.showTestnetNetworksOn, + advancedPageElements.showTestnetNetworksOff, + ); + return; + }, activateCustomNonce: async () => { - const activated = await activateAdvancedSetting( + await activateAdvancedSetting( advancedPageElements.customNonceToggleOn, advancedPageElements.customNonceToggleOff, ); - return activated; + return; + }, + activateDismissBackupReminder: async () => { + await activateAdvancedSetting( + advancedPageElements.dismissBackupReminderOn, + advancedPageElements.dismissBackupReminderOff, + ); + return; }, resetAccount: async () => { await switchToMetamaskIfNotActive(); diff --git a/plugins/index.js b/plugins/index.js index 0a486f8c3..d9a38d7f9 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -123,10 +123,34 @@ module.exports = (on, config) => { const networkChanged = await metamask.changeNetwork(network); return networkChanged; }, + activateAdvancedGasControlInMetamask: async () => { + const activated = await metamask.activateAdvancedGasControl(); + return activated; + }, + activateEnhancedTokenDetectionInMetamask: async () => { + const activated = await metamask.activateEnhancedTokenDetection(); + return activated; + }, + activateShowHexDataInMetamask: async () => { + const activated = await metamask.activateShowHexData(); + return activated; + }, + activateTestnetConversionInMetamask: async () => { + const activated = await metamask.activateTestnetConversion(); + return activated; + }, + activateShowTestnetNetworksInMetamask: async () => { + const activated = await metamask.activateShowTestnetNetworks(); + return activated; + }, activateCustomNonceInMetamask: async () => { const activated = await metamask.activateCustomNonce(); return activated; }, + activateDismissBackupReminderInMetamask: async () => { + const activated = await metamask.activateDismissBackupReminder(); + return activated; + }, resetMetamaskAccount: async () => { const resetted = await metamask.resetAccount(); return resetted; diff --git a/support/commands.js b/support/commands.js index f59f8f99b..84696f64a 100644 --- a/support/commands.js +++ b/support/commands.js @@ -63,10 +63,34 @@ Cypress.Commands.add('getMetamaskWalletAddress', () => { }); }); +Cypress.Commands.add('activateAdvancedGasControlInMetamask', () => { + return cy.task('activateAdvancedGasControlInMetamask'); +}); + +Cypress.Commands.add('activateEnhancedTokenDetectionInMetamask', () => { + return cy.task('activateEnhancedTokenDetectionInMetamask'); +}); + +Cypress.Commands.add('activateShowHexDataInMetamask', () => { + return cy.task('activateShowHexDataInMetamask'); +}); + +Cypress.Commands.add('activateTestnetConversionInMetamask', () => { + return cy.task('activateTestnetConversionInMetamask'); +}); + +Cypress.Commands.add('activateShowTestnetNetworksInMetamask', () => { + return cy.task('activateShowTestnetNetworksInMetamask'); +}); + Cypress.Commands.add('activateCustomNonceInMetamask', () => { return cy.task('activateCustomNonceInMetamask'); }); +Cypress.Commands.add('activateDismissBackupReminderInMetamask', () => { + return cy.task('activateDismissBackupReminderInMetamask'); +}); + Cypress.Commands.add('resetMetamaskAccount', () => { return cy.task('resetMetamaskAccount'); }); diff --git a/support/index.d.ts b/support/index.d.ts index 3c708438c..bd614f8a6 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -97,12 +97,48 @@ declare namespace Cypress { * cy.getMetamaskWalletAddress().then(address => cy.log(address)) */ getMetamaskWalletAddress(): Chainable; + /** + * Activate ability (in metamask settings) to specify custom gas price and limit while doing transactions in metamask + * @example + * cy.activateAdvancedGasControlInMetamask() + */ + activateAdvancedGasControlInMetamask(): Chainable; + /** + * Activate ability (in metamask settings) to detect custom tokens using ConsenSys API in metamask + * @example + * cy.activateEnhancedTokenDetectionInMetamask() + */ + activateEnhancedTokenDetectionInMetamask(): Chainable; + /** + * Activate ability (in metamask settings) to show hex data while doing transaction in metamask + * @example + * cy.activateShowHexDataInMetamask() + */ + activateShowHexDataInMetamask(): Chainable; + /** + * Activate ability (in metamask settings) to show fiat conversions on testnets in metamask + * @example + * cy.activateTestnetConversionInMetamask() + */ + activateTestnetConversionInMetamask(): Chainable; + /** + * Activate ability (in metamask settings) to show testnet networks in metamask + * @example + * cy.activateShowTestnetNetworksInMetamask() + */ + activateShowTestnetNetworksInMetamask(): Chainable; /** * Activate ability (in metamask settings) to specify custom nonce while doing transactions in metamask * @example * cy.activateCustomNonceInMetamask() */ activateCustomNonceInMetamask(): Chainable; + /** + * Activate ability (in metamask settings) to dismiss secret recovery phrase reminder in metamask + * @example + * cy.activateDismissBackupReminderInMetamask() + */ + activateDismissBackupReminderInMetamask(): Chainable; /** * Reset metamask account state in settings * @example diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index 027d799b5..5e1a9b4cd 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -134,6 +134,7 @@ describe('Metamask', () => { expect(activated).to.be.true; }); }); + // todo: add tests for advanced settings it(`resetMetamaskAccount should reset current account`, () => { cy.resetMetamaskAccount().then(resetted => { expect(resetted).to.be.true; From 1cc7c840666bc46bd31c53844fcf1a2f0a303a38 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:08:45 +0200 Subject: [PATCH 13/52] e2e: use new setupMetamask setting Signed-off-by: Jakub Mucha --- tests/e2e/specs/metamask-spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index 5e1a9b4cd..47de1a977 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -7,6 +7,7 @@ describe('Metamask', () => { 'shuffle stay hair student wagon senior problem drama parrot creek enact pluck', 'goerli', 'Tester@1234', + false, ).then(setupFinished => { expect(setupFinished).to.be.true; }); From 2f246b3d4e0869b6ee1c71c5a68d8e75e1c7f093 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:09:09 +0200 Subject: [PATCH 14/52] feat: add new adv settings Signed-off-by: Jakub Mucha --- commands/metamask.js | 56 ++++++++++++++++++++++++++++++++++---------- plugins/index.js | 6 +++-- support/index.d.ts | 36 ++++++++++++++++++++-------- 3 files changed, 74 insertions(+), 24 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index a6cc75903..4a006e987 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -501,52 +501,59 @@ module.exports = { await switchToCypressIfNotActive(); return true; }, - activateAdvancedGasControl: async () => { + activateAdvancedGasControl: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.advancedGasControlToggleOn, advancedPageElements.advancedGasControlToggleOff, + skipPrePostSetup, ); return; }, - activateEnhancedTokenDetection: async () => { + activateEnhancedTokenDetection: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.enhancedTokenDetectionToggleOn, advancedPageElements.enhancedTokenDetectionToggleOff, + skipPrePostSetup, ); return; }, - activateShowHexData: async () => { + activateShowHexData: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.showHexDataToggleOn, advancedPageElements.showHexDataToggleOff, + skipPrePostSetup, ); return; }, - activateTestnetConversion: async () => { + activateTestnetConversion: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.showTestnetConversionOn, advancedPageElements.showTestnetConversionOff, + skipPrePostSetup, ); return; }, - activateShowTestnetNetworks: async () => { + activateShowTestnetNetworks: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.showTestnetNetworksOn, advancedPageElements.showTestnetNetworksOff, + skipPrePostSetup, ); return; }, - activateCustomNonce: async () => { + activateCustomNonce: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.customNonceToggleOn, advancedPageElements.customNonceToggleOff, + skipPrePostSetup, ); return; }, - activateDismissBackupReminder: async () => { + activateDismissBackupReminder: async (skipPrePostSetup = false) => { await activateAdvancedSetting( advancedPageElements.dismissBackupReminderOn, advancedPageElements.dismissBackupReminderOff, + skipPrePostSetup, ); return; }, @@ -794,7 +801,12 @@ module.exports = { return walletAddress; }, - initialSetup: async ({ secretWordsOrPrivateKey, network, password }) => { + initialSetup: async ({ + secretWordsOrPrivateKey, + network, + password, + enableAdvancedSettings, + }) => { const isCustomNetwork = (process.env.NETWORK_NAME && process.env.RPC_URL && @@ -821,7 +833,9 @@ module.exports = { await module.exports.importAccount(secretWordsOrPrivateKey); } - // todo: pre-setup!!! + if (enableAdvancedSettings) { + await setupAdvancedSettings(); + } if (isCustomNetwork) { await module.exports.addNetwork(network); @@ -874,9 +888,11 @@ async function switchToCypressIfNotActive() { return switchBackToCypressWindow; } -async function activateAdvancedSetting(toggleOn, toggleOff) { - await switchToMetamaskIfNotActive(); - await module.exports.goToAdvancedSettings(); +async function activateAdvancedSetting(toggleOn, toggleOff, skipPrePostSetup) { + if (!skipPrePostSetup) { + await switchToMetamaskIfNotActive(); + await module.exports.goToAdvancedSettings(); + } if ((await playwright.metamaskWindow().$(toggleOn)) === null) { await playwright.waitAndClick(toggleOff); } @@ -887,6 +903,22 @@ async function activateAdvancedSetting(toggleOn, toggleOff) { waitForEvent: 'navi', }, ); + if (!skipPrePostSetup) { + await switchToCypressIfNotActive(); + } + return true; +} + +async function setupAdvancedSettings() { + await switchToMetamaskIfNotActive(); + await module.exports.goToAdvancedSettings(); + module.exports.activateAdvancedGasControl(true); + module.exports.activateEnhancedTokenDetection(true); + module.exports.activateShowHexData(true); + module.exports.activateTestnetConversion(true); + module.exports.activateShowTestnetNetworks(true); + module.exports.activateCustomNonce(true); + module.exports.activateDismissBackupReminder(true); await switchToCypressIfNotActive(); return true; } diff --git a/plugins/index.js b/plugins/index.js index d9a38d7f9..99c36d2e3 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -118,7 +118,7 @@ module.exports = (on, config) => { if (process.env.NETWORK_NAME && !network) { network = process.env.NETWORK_NAME; } else if (!network) { - network = 'kovan'; + network = 'goerli'; } const networkChanged = await metamask.changeNetwork(network); return networkChanged; @@ -244,8 +244,9 @@ module.exports = (on, config) => { }, setupMetamask: async ({ secretWordsOrPrivateKey, - network = 'kovan', + network = 'goerli', password, + enableAdvancedSettings = true, }) => { if (process.env.NETWORK_NAME) { network = process.env.NETWORK_NAME; @@ -260,6 +261,7 @@ module.exports = (on, config) => { secretWordsOrPrivateKey, network, password, + enableAdvancedSettings, }); return true; }, diff --git a/support/index.d.ts b/support/index.d.ts index bd614f8a6..202be48cc 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -64,7 +64,7 @@ declare namespace Cypress { /** * Change network in metamask * @example - * cy.changeMetamaskNetwork('kovan') + * cy.changeMetamaskNetwork('goerli') * cy.changeMetamaskNetwork('custom network') * cy.changeMetamaskNetwork({networkName: 'name'}) */ @@ -102,43 +102,57 @@ declare namespace Cypress { * @example * cy.activateAdvancedGasControlInMetamask() */ - activateAdvancedGasControlInMetamask(): Chainable; + activateAdvancedGasControlInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to detect custom tokens using ConsenSys API in metamask * @example * cy.activateEnhancedTokenDetectionInMetamask() */ - activateEnhancedTokenDetectionInMetamask(): Chainable; + activateEnhancedTokenDetectionInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to show hex data while doing transaction in metamask * @example * cy.activateShowHexDataInMetamask() */ - activateShowHexDataInMetamask(): Chainable; + activateShowHexDataInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to show fiat conversions on testnets in metamask * @example * cy.activateTestnetConversionInMetamask() */ - activateTestnetConversionInMetamask(): Chainable; + activateTestnetConversionInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to show testnet networks in metamask * @example * cy.activateShowTestnetNetworksInMetamask() */ - activateShowTestnetNetworksInMetamask(): Chainable; + activateShowTestnetNetworksInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to specify custom nonce while doing transactions in metamask * @example * cy.activateCustomNonceInMetamask() */ - activateCustomNonceInMetamask(): Chainable; + activateCustomNonceInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Activate ability (in metamask settings) to dismiss secret recovery phrase reminder in metamask * @example * cy.activateDismissBackupReminderInMetamask() */ - activateDismissBackupReminderInMetamask(): Chainable; + activateDismissBackupReminderInMetamask( + skipPrePostSetup?: boolean, + ): Chainable; /** * Reset metamask account state in settings * @example @@ -283,15 +297,17 @@ declare namespace Cypress { /** * Run the flow for metamask setup * @example - * cy.setupMetamask('secret, words, ...', 'kovan', 'password for metamask') + * cy.setupMetamask('secret, words, ...', 'goerli', 'password for metamask') + * cy.setupMetamask('secret, words, ...', 'goerli', 'password for metamask', true) // enables advanced settings * cy.setupMetamask('secret, words, ...', {networkName: 'name', rpcUrl: 'https://url', chainId: 1, symbol: 'ETH', blockExplorer: 'https://url', isTestnet: true}, 'password for metamask') - * cy.setupMetamask('private_key', 'kovan', 'password for metamask') + * cy.setupMetamask('private_key', 'goerli', 'password for metamask') * cy.setupMetamask('private_key', {networkName: 'name', rpcUrl: 'https://url', chainId: 1, symbol: 'ETH', blockExplorer: 'https://url', isTestnet: true}, 'password for metamask') */ setupMetamask( secretWordsOrPrivateKey: string, network: string | object, password: string, + enableAdvancedSettings?: boolean, ): Chainable; /** * Execute settle on Exchanger contract From 35c6c38849525a2ae48ffa3489059dc206449d25 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:35:49 +0200 Subject: [PATCH 15/52] feat: improve waitandget(input)value Signed-off-by: Jakub Mucha --- commands/playwright.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/commands/playwright.js b/commands/playwright.js index 48c258153..ed2d08e3f 100644 --- a/commands/playwright.js +++ b/commands/playwright.js @@ -189,6 +189,11 @@ module.exports = { await element.type(value); }, waitAndGetValue: async (selector, page = metamaskWindow) => { + const element = await module.exports.waitFor(selector, page); + const value = await element.innerText(); + return value; + }, + waitAndGetInputValue: async (selector, page = metamaskWindow) => { const element = await module.exports.waitFor(selector, page); const value = await element.inputValue(); return value; From 2438cbcb56e23014ce27924be93de049e12ac04b Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:36:04 +0200 Subject: [PATCH 16/52] po: fix adv settings selectors Signed-off-by: Jakub Mucha --- pages/metamask/settings-page.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index 6b0156fbd..8eed3b6ce 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -1,7 +1,7 @@ const settingsPage = '.settings-page'; const advancedButton = `${settingsPage} button:nth-child(2)`; const networksButton = `${settingsPage} button:nth-child(6)`; -const closeButton = `${settingsPage} .settings-page__close-button`; +const closeButton = `${settingsPage} .settings-page__header__title-container__close-button`; module.exports.settingsPageElements = { settingsPage, advancedButton, @@ -24,13 +24,13 @@ const showHexDataToggleOn = const showHexDataToggleOff = '[data-testid="advanced-setting-hex-data"] .toggle-button--off'; const showTestnetConversionOn = - '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--on'; + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(7) .toggle-button--on'; const showTestnetConversionOff = - '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--off'; + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(7) .toggle-button--off'; const showTestnetNetworksOn = - '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(9) .toggle-button--on'; + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--on'; const showTestnetNetworksOff = - '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(9) .toggle-button--off'; + '[data-testid="advanced-setting-show-testnet-conversion"]:nth-child(8) .toggle-button--off'; const customNonceToggleOn = '[data-testid="advanced-setting-custom-nonce"] .toggle-button--on'; const customNonceToggleOff = From aac81bafba859be32b2c72f5235446d39d21ef6a Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:36:22 +0200 Subject: [PATCH 17/52] po: fix import account selectors Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index 547d675b9..98598294a 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -43,7 +43,7 @@ const connectedSites = { }; const accountModal = { - walletAddressInput: '.account-modal input', + walletAddressInput: '.account-modal .qr-code__address', closeButton: '.account-modal__close', }; @@ -51,8 +51,8 @@ const importAccountSelector = '.new-account'; const importAccount = { page: importAccountSelector, input: `${importAccountSelector} #private-key-box`, - cancelButton: `${importAccountSelector} .btn-default`, - importButton: `${importAccountSelector} .btn-secondary`, + cancelButton: `${importAccountSelector} .new-account-create-form__button:nth-child(1)`, + importButton: `${importAccountSelector} .new-account-create-form__button:nth-child(2)`, }; const createAccount = { From 81bbfc267d86d67a9578a0994db22dbe73522430 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:36:42 +0200 Subject: [PATCH 18/52] fix: importaccount navi Signed-off-by: Jakub Mucha --- commands/metamask.js | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 4a006e987..0bd04f764 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -296,7 +296,13 @@ module.exports = { mainPageElements.importAccount.input, privateKey, ); - await playwright.waitAndClick(mainPageElements.importAccount.importButton); + await playwright.waitAndClick( + mainPageElements.importAccount.importButton, + await playwright.metamaskWindow(), + { + waitForEvent: 'navi', + }, + ); await switchToCypressIfNotActive(); return true; }, @@ -787,7 +793,6 @@ module.exports = { }, getWalletAddress: async () => { await switchToMetamaskIfNotActive(); - await playwright.waitAndClick(mainPageElements.optionsMenu.button); await playwright.waitAndClick( mainPageElements.optionsMenu.accountDetailsButton, @@ -796,9 +801,7 @@ module.exports = { mainPageElements.accountModal.walletAddressInput, ); await playwright.waitAndClick(mainPageElements.accountModal.closeButton); - await switchToCypressIfNotActive(); - return walletAddress; }, initialSetup: async ({ @@ -896,14 +899,14 @@ async function activateAdvancedSetting(toggleOn, toggleOff, skipPrePostSetup) { if ((await playwright.metamaskWindow().$(toggleOn)) === null) { await playwright.waitAndClick(toggleOff); } - await playwright.waitAndClick( - settingsPageElements.closeButton, - await playwright.metamaskWindow(), - { - waitForEvent: 'navi', - }, - ); if (!skipPrePostSetup) { + await playwright.waitAndClick( + settingsPageElements.closeButton, + await playwright.metamaskWindow(), + { + waitForEvent: 'navi', + }, + ); await switchToCypressIfNotActive(); } return true; @@ -912,13 +915,20 @@ async function activateAdvancedSetting(toggleOn, toggleOff, skipPrePostSetup) { async function setupAdvancedSettings() { await switchToMetamaskIfNotActive(); await module.exports.goToAdvancedSettings(); - module.exports.activateAdvancedGasControl(true); - module.exports.activateEnhancedTokenDetection(true); - module.exports.activateShowHexData(true); - module.exports.activateTestnetConversion(true); - module.exports.activateShowTestnetNetworks(true); - module.exports.activateCustomNonce(true); - module.exports.activateDismissBackupReminder(true); + await module.exports.activateAdvancedGasControl(true); + await module.exports.activateEnhancedTokenDetection(true); + await module.exports.activateShowHexData(true); + await module.exports.activateTestnetConversion(true); + await module.exports.activateShowTestnetNetworks(true); + await module.exports.activateCustomNonce(true); + await module.exports.activateDismissBackupReminder(true); + await playwright.waitAndClick( + settingsPageElements.closeButton, + await playwright.metamaskWindow(), + { + waitForEvent: 'navi', + }, + ); await switchToCypressIfNotActive(); return true; } From 96a1779ab7a6c4ec22fc8ea3eedbd33185d5a0ec Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:40:58 +0200 Subject: [PATCH 19/52] po: fix createaccount Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index 98598294a..1ff9bfdeb 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -58,8 +58,8 @@ const importAccount = { const createAccount = { page: importAccountSelector, input: `${importAccountSelector} .new-account-create-form__input`, - cancelButton: `${importAccountSelector} .btn-default`, - createButton: `${importAccountSelector} .btn-secondary`, + cancelButton: `${importAccountSelector} .new-account-create-form__button:nth-child(1)`, + createButton: `${importAccountSelector} .new-account-create-form__button:nth-child(2)`, }; module.exports.mainPageElements = { From 6b6ba2839346d0aa84d504ed43e61c8f9d5989cb Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 09:53:18 +0200 Subject: [PATCH 20/52] fix: required parameters Signed-off-by: Jakub Mucha --- plugins/index.js | 4 ++-- support/commands.js | 8 +++++++- support/index.d.ts | 7 +++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/plugins/index.js b/plugins/index.js index 99c36d2e3..f8e3958d5 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -244,9 +244,9 @@ module.exports = (on, config) => { }, setupMetamask: async ({ secretWordsOrPrivateKey, - network = 'goerli', + network, password, - enableAdvancedSettings = true, + enableAdvancedSettings, }) => { if (process.env.NETWORK_NAME) { network = process.env.NETWORK_NAME; diff --git a/support/commands.js b/support/commands.js index 84696f64a..302a36179 100644 --- a/support/commands.js +++ b/support/commands.js @@ -187,11 +187,17 @@ Cypress.Commands.add('fetchMetamaskWalletAddress', () => { Cypress.Commands.add( 'setupMetamask', - (secretWordsOrPrivateKey, network, password = 'Tester@1234') => { + ( + secretWordsOrPrivateKey = 'test test test test test test test test test test test junk', + network = 'goerli', + password = 'Tester@1234', + enableAdvancedSettings = true, + ) => { return cy.task('setupMetamask', { secretWordsOrPrivateKey, network, password, + enableAdvancedSettings, }); }, ); diff --git a/support/index.d.ts b/support/index.d.ts index 202be48cc..b45d24f30 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -298,15 +298,14 @@ declare namespace Cypress { * Run the flow for metamask setup * @example * cy.setupMetamask('secret, words, ...', 'goerli', 'password for metamask') - * cy.setupMetamask('secret, words, ...', 'goerli', 'password for metamask', true) // enables advanced settings * cy.setupMetamask('secret, words, ...', {networkName: 'name', rpcUrl: 'https://url', chainId: 1, symbol: 'ETH', blockExplorer: 'https://url', isTestnet: true}, 'password for metamask') * cy.setupMetamask('private_key', 'goerli', 'password for metamask') * cy.setupMetamask('private_key', {networkName: 'name', rpcUrl: 'https://url', chainId: 1, symbol: 'ETH', blockExplorer: 'https://url', isTestnet: true}, 'password for metamask') */ setupMetamask( - secretWordsOrPrivateKey: string, - network: string | object, - password: string, + secretWordsOrPrivateKey?: string, + network?: string | object, + password?: string, enableAdvancedSettings?: boolean, ): Chainable; /** From acb322abe9a8ce5c5aa2ad3ad0cf0adfd6f57380 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 10:00:58 +0200 Subject: [PATCH 21/52] chore: naming changes Signed-off-by: Jakub Mucha --- commands/metamask.js | 46 ++++++++++++++++---------------- support/index.d.ts | 19 ++++++------- tests/e2e/specs/metamask-spec.js | 7 +---- 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 0bd04f764..027613133 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -507,59 +507,59 @@ module.exports = { await switchToCypressIfNotActive(); return true; }, - activateAdvancedGasControl: async (skipPrePostSetup = false) => { + activateAdvancedGasControl: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.advancedGasControlToggleOn, advancedPageElements.advancedGasControlToggleOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateEnhancedTokenDetection: async (skipPrePostSetup = false) => { + activateEnhancedTokenDetection: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.enhancedTokenDetectionToggleOn, advancedPageElements.enhancedTokenDetectionToggleOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateShowHexData: async (skipPrePostSetup = false) => { + activateShowHexData: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.showHexDataToggleOn, advancedPageElements.showHexDataToggleOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateTestnetConversion: async (skipPrePostSetup = false) => { + activateTestnetConversion: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.showTestnetConversionOn, advancedPageElements.showTestnetConversionOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateShowTestnetNetworks: async (skipPrePostSetup = false) => { + activateShowTestnetNetworks: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.showTestnetNetworksOn, advancedPageElements.showTestnetNetworksOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateCustomNonce: async (skipPrePostSetup = false) => { + activateCustomNonce: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.customNonceToggleOn, advancedPageElements.customNonceToggleOff, - skipPrePostSetup, + skipSetup, ); return; }, - activateDismissBackupReminder: async (skipPrePostSetup = false) => { + activateDismissBackupReminder: async (skipSetup = false) => { await activateAdvancedSetting( advancedPageElements.dismissBackupReminderOn, advancedPageElements.dismissBackupReminderOff, - skipPrePostSetup, + skipSetup, ); return; }, @@ -836,9 +836,7 @@ module.exports = { await module.exports.importAccount(secretWordsOrPrivateKey); } - if (enableAdvancedSettings) { - await setupAdvancedSettings(); - } + await setupSettings(enableAdvancedSettings); if (isCustomNetwork) { await module.exports.addNetwork(network); @@ -891,15 +889,15 @@ async function switchToCypressIfNotActive() { return switchBackToCypressWindow; } -async function activateAdvancedSetting(toggleOn, toggleOff, skipPrePostSetup) { - if (!skipPrePostSetup) { +async function activateAdvancedSetting(toggleOn, toggleOff, skipSetup) { + if (!skipSetup) { await switchToMetamaskIfNotActive(); await module.exports.goToAdvancedSettings(); } if ((await playwright.metamaskWindow().$(toggleOn)) === null) { await playwright.waitAndClick(toggleOff); } - if (!skipPrePostSetup) { + if (!skipSetup) { await playwright.waitAndClick( settingsPageElements.closeButton, await playwright.metamaskWindow(), @@ -912,16 +910,18 @@ async function activateAdvancedSetting(toggleOn, toggleOff, skipPrePostSetup) { return true; } -async function setupAdvancedSettings() { +async function setupSettings(enableAdvancedSettings) { await switchToMetamaskIfNotActive(); await module.exports.goToAdvancedSettings(); await module.exports.activateAdvancedGasControl(true); - await module.exports.activateEnhancedTokenDetection(true); await module.exports.activateShowHexData(true); - await module.exports.activateTestnetConversion(true); await module.exports.activateShowTestnetNetworks(true); await module.exports.activateCustomNonce(true); await module.exports.activateDismissBackupReminder(true); + if (enableAdvancedSettings) { + await module.exports.activateEnhancedTokenDetection(true); + await module.exports.activateTestnetConversion(true); + } await playwright.waitAndClick( settingsPageElements.closeButton, await playwright.metamaskWindow(), diff --git a/support/index.d.ts b/support/index.d.ts index b45d24f30..79f75b77e 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -103,7 +103,7 @@ declare namespace Cypress { * cy.activateAdvancedGasControlInMetamask() */ activateAdvancedGasControlInMetamask( - skipPrePostSetup?: boolean, + skipSetup?: boolean, ): Chainable; /** * Activate ability (in metamask settings) to detect custom tokens using ConsenSys API in metamask @@ -111,23 +111,21 @@ declare namespace Cypress { * cy.activateEnhancedTokenDetectionInMetamask() */ activateEnhancedTokenDetectionInMetamask( - skipPrePostSetup?: boolean, + skipSetup?: boolean, ): Chainable; /** * Activate ability (in metamask settings) to show hex data while doing transaction in metamask * @example * cy.activateShowHexDataInMetamask() */ - activateShowHexDataInMetamask( - skipPrePostSetup?: boolean, - ): Chainable; + activateShowHexDataInMetamask(skipSetup?: boolean): Chainable; /** * Activate ability (in metamask settings) to show fiat conversions on testnets in metamask * @example * cy.activateTestnetConversionInMetamask() */ activateTestnetConversionInMetamask( - skipPrePostSetup?: boolean, + skipSetup?: boolean, ): Chainable; /** * Activate ability (in metamask settings) to show testnet networks in metamask @@ -135,23 +133,21 @@ declare namespace Cypress { * cy.activateShowTestnetNetworksInMetamask() */ activateShowTestnetNetworksInMetamask( - skipPrePostSetup?: boolean, + skipSetup?: boolean, ): Chainable; /** * Activate ability (in metamask settings) to specify custom nonce while doing transactions in metamask * @example * cy.activateCustomNonceInMetamask() */ - activateCustomNonceInMetamask( - skipPrePostSetup?: boolean, - ): Chainable; + activateCustomNonceInMetamask(skipSetup?: boolean): Chainable; /** * Activate ability (in metamask settings) to dismiss secret recovery phrase reminder in metamask * @example * cy.activateDismissBackupReminderInMetamask() */ activateDismissBackupReminderInMetamask( - skipPrePostSetup?: boolean, + skipSetup?: boolean, ): Chainable; /** * Reset metamask account state in settings @@ -297,6 +293,7 @@ declare namespace Cypress { /** * Run the flow for metamask setup * @example + * cy.setupMetamask() // will use defaults * cy.setupMetamask('secret, words, ...', 'goerli', 'password for metamask') * cy.setupMetamask('secret, words, ...', {networkName: 'name', rpcUrl: 'https://url', chainId: 1, symbol: 'ETH', blockExplorer: 'https://url', isTestnet: true}, 'password for metamask') * cy.setupMetamask('private_key', 'goerli', 'password for metamask') diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index 47de1a977..df88660f6 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -3,12 +3,7 @@ describe('Metamask', () => { context('Test commands', () => { // todo: clear the state of extension and test different combinations of setupMetamask with private key & custom network it(`setupMetamask should finish metamask setup using secret words`, () => { - cy.setupMetamask( - 'shuffle stay hair student wagon senior problem drama parrot creek enact pluck', - 'goerli', - 'Tester@1234', - false, - ).then(setupFinished => { + cy.setupMetamask().then(setupFinished => { expect(setupFinished).to.be.true; }); }); From 56b36256ba836b1636e318e747a6ca21267e39d6 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 11:29:56 +0200 Subject: [PATCH 22/52] po: update mainpage Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index 1ff9bfdeb..09ab940a4 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -1,8 +1,13 @@ +const networkSwitcherButtonSelector = '.network-display'; const networkSwitcher = { - button: '.network-display', - networkName: '.typography', - dropdownMenuItem: '.dropdown-menu-item', - networkButton: number => `.dropdown-menu-item:nth-child(${3 + number})`, + button: networkSwitcherButtonSelector, + networkName: `${networkSwitcherButtonSelector} .typography`, + dropdownMenu: '[data-testid="network-droppo"]', + dropdownMenuItem: `[data-testid="network-droppo"] .dropdown-menu-item`, + networkButton: number => + `[data-testid="network-droppo"] .dropdown-menu-item:nth-child(${ + 3 + number + })`, }; const walletOverview = '.wallet-overview'; @@ -36,7 +41,7 @@ const optionsMenu = { const connectedSitesSelector = '.connected-sites'; const connectedSites = { modal: connectedSitesSelector, - trashButton: `${connectedSitesSelector} .connected-sites-list__trash`, + disconnectLabel: `${connectedSitesSelector} .connected-sites-list__content-row-link-button`, cancelButton: `${connectedSitesSelector} .btn-secondary`, disconnectButton: `${connectedSitesSelector} .btn-primary`, closeButton: `${connectedSitesSelector} [data-testid="popover-close"]`, From fe0b6aefb779ef49c85b0c6fabf1b3f0177d306a Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 11:30:06 +0200 Subject: [PATCH 23/52] e2e: update wallets for testing Signed-off-by: Jakub Mucha --- tests/e2e/specs/metamask-spec.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index df88660f6..da836b828 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -26,7 +26,7 @@ describe('Metamask', () => { cy.get('#network').contains('5'); cy.get('#chainId').contains('0x5'); cy.get('#accounts').contains( - '0x352e559b06e9c6c72edbf5af2bf52c61f088db71', + '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', ); }); it(`getNetwork should return network by default`, () => { @@ -81,14 +81,14 @@ describe('Metamask', () => { }); it(`importMetamaskAccount should import new account using private key`, () => { cy.importMetamaskAccount( - '69270203c33d9d54ffd9cfcd9be01a12259a6efe968db9f1d5728717a9ab9a17', + '0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6', ).then(imported => { expect(imported).to.be.true; }); cy.get('#requestPermissions').click(); cy.acceptMetamaskAccess(); cy.get('#accounts').contains( - '0x210b7af5962af8ab4ac55d5800ef42e0b0c09e62', + '0xa0ee7a142d267c1f36714e4a8f75612f20a79720', ); }); it(`createMetamaskAccount should create new account with default name`, () => { @@ -109,7 +109,7 @@ describe('Metamask', () => { it(`getMetamaskWalletAddress should return wallet address of current metamask account`, () => { cy.getMetamaskWalletAddress().then(address => { expect(address).to.be.equal( - '0x210B7af5962af8Ab4ac55D5800Ef42e0B0c09e62', + '0xa0ee7a142d267c1f36714e4a8f75612f20a79720', ); }); }); @@ -121,7 +121,7 @@ describe('Metamask', () => { it(`getMetamaskWalletAddress should return valid wallet address of metamask account after changing an account`, () => { cy.getMetamaskWalletAddress().then(address => { expect(address).to.be.equal( - '0x352e559B06e9C6c72edbF5af2bF52C61F088Db71', + '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', ); }); }); @@ -159,7 +159,7 @@ describe('Metamask', () => { }); cy.get('#personalSignVerify').click(); cy.get('#personalSignVerifySigUtilResult').contains( - '0x352e559b06e9c6c72edbf5af2bf52c61f088db71', + '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', ); }); it(`confirmMetamaskSignatureRequest should confirm data signature request`, () => { From 289d45c499da3bab31b43e682b4d6f0430b041b2 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 11:30:16 +0200 Subject: [PATCH 24/52] fix: adv settings false as default Signed-off-by: Jakub Mucha --- support/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/commands.js b/support/commands.js index 302a36179..3381e6632 100644 --- a/support/commands.js +++ b/support/commands.js @@ -191,7 +191,7 @@ Cypress.Commands.add( secretWordsOrPrivateKey = 'test test test test test test test test test test test junk', network = 'goerli', password = 'Tester@1234', - enableAdvancedSettings = true, + enableAdvancedSettings = false, ) => { return cy.task('setupMetamask', { secretWordsOrPrivateKey, From 83f229363a685d061551fde74025747041b42ac3 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 11:30:25 +0200 Subject: [PATCH 25/52] refactor: trashbutton => label Signed-off-by: Jakub Mucha --- commands/metamask.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 027613133..de89ab932 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -454,15 +454,15 @@ module.exports = { await playwright.waitAndClick( mainPageElements.optionsMenu.connectedSitesButton, ); - const trashButton = await playwright + const disconnectLabel = await playwright .metamaskWindow() - .$(mainPageElements.connectedSites.trashButton); - if (trashButton) { + .$(mainPageElements.connectedSites.disconnectLabel); + if (disconnectLabel) { console.log( '[disconnectWalletFromDapp] Wallet is connected to a dapp, disconnecting..', ); await playwright.waitAndClick( - mainPageElements.connectedSites.trashButton, + mainPageElements.connectedSites.disconnectLabel, ); await playwright.waitAndClick( mainPageElements.connectedSites.disconnectButton, @@ -482,17 +482,17 @@ module.exports = { await playwright.waitAndClick( mainPageElements.optionsMenu.connectedSitesButton, ); - const trashButtons = await playwright + const disconnectLabels = await playwright .metamaskWindow() - .$$(mainPageElements.connectedSites.trashButton); - if (trashButtons.length) { + .$$(mainPageElements.connectedSites.disconnectLabel); + if (disconnectLabels.length) { console.log( '[disconnectWalletFromAllDapps] Wallet is connected to dapps, disconnecting..', ); // eslint-disable-next-line no-unused-vars - for (const trashButton of trashButtons) { + for (const disconnectLabel of disconnectLabels) { await playwright.waitAndClick( - mainPageElements.connectedSites.trashButton, + mainPageElements.connectedSites.disconnectLabel, ); await playwright.waitAndClick( mainPageElements.connectedSites.disconnectButton, From 38cefe8717cb5cb3a44f2a8bbcbd6cfa42a2800b Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 12:15:03 +0200 Subject: [PATCH 26/52] po: unlockpage update Signed-off-by: Jakub Mucha --- pages/metamask/unlock-page.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/metamask/unlock-page.js b/pages/metamask/unlock-page.js index c41956728..69e65f4ab 100644 --- a/pages/metamask/unlock-page.js +++ b/pages/metamask/unlock-page.js @@ -1,6 +1,6 @@ -const unlockPage = '.unlock-page'; +const unlockPage = '[data-testid="unlock-page"]'; const passwordInput = `${unlockPage} #password`; -const unlockButton = `${unlockPage} button`; +const unlockButton = `${unlockPage} .btn-default`; module.exports.unlockPageElements = { unlockPage, From 506c7504a632f6d1fd4094b2ee1977624c2650dd Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 12:15:13 +0200 Subject: [PATCH 27/52] po: settingspage update Signed-off-by: Jakub Mucha --- pages/metamask/settings-page.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index 8eed3b6ce..8968c3064 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -57,8 +57,8 @@ module.exports.advancedPageElements = { customNonceToggleOff, }; -const nevermindButton = '.modal-container button:nth-child(1)'; -const resetButton = '.modal-container button:nth-child(2)'; +const nevermindButton = '.modal-container .btn-secondary'; +const resetButton = '.modal-container .btn-danger-primary'; module.exports.resetAccountModalElements = { nevermindButton, resetButton, @@ -67,13 +67,15 @@ module.exports.resetAccountModalElements = { const addNetworkButton = '.networks-tab__body button'; module.exports.networksPageElements = { addNetworkButton }; -const networkNameInput = '#network-name'; -const rpcUrlInput = '#rpc-url'; -const chainIdInput = '#chainId'; -const symbolInput = '#network-ticker'; -const blockExplorerInput = '#block-explorer-url'; -const saveButton = '.network-form__footer button:nth-child(2)'; +const addNetworkForm = '.networks-tab__add-network-form-body'; +const networkNameInput = `${addNetworkForm} .form-field:nth-child(1)`; +const rpcUrlInput = `${addNetworkForm} .form-field:nth-child(2)`; +const chainIdInput = `${addNetworkForm} .form-field:nth-child(3)`; +const symbolInput = `${addNetworkForm} .form-field:nth-child(4)`; +const blockExplorerInput = `${addNetworkForm} .form-field:nth-child(5)`; +const saveButton = '.networks-tab__add-network-form-footer .btn-primary'; module.exports.addNetworkPageElements = { + addNetworkForm, networkNameInput, rpcUrlInput, chainIdInput, From fa5b7f2cefc5afff6604f7c1e204f02f83b8c23e Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 12:15:18 +0200 Subject: [PATCH 28/52] po: mainpage update Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index 09ab940a4..92c45ae37 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -23,6 +23,12 @@ const tippyTooltip = { closeButton: `${tippyTooltipSelector} button`, }; +const actionableMessageSelector = '.actionable-message'; +const actionableMessage = { + container: actionableMessageSelector, + closeButton: `${actionableMessageSelector} button`, +}; + const accountMenu = { button: '.account-menu__icon', accountButton: number => `.account-menu__account:nth-child(${number})`, @@ -72,6 +78,7 @@ module.exports.mainPageElements = { walletOverview, popup, tippyTooltip, + actionableMessage, accountMenu, optionsMenu, connectedSites, From 88bd310e060c5195934bec24c4f175882b4e225e Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 12:15:32 +0200 Subject: [PATCH 29/52] feat: update metamask commands with latest po's Signed-off-by: Jakub Mucha --- commands/metamask.js | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index de89ab932..3d799cc39 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -25,7 +25,6 @@ const { settingsPageElements, advancedPageElements, resetAccountModalElements, - networksPageElements, addNetworkPageElements, } = require('../pages/metamask/settings-page'); const { @@ -161,6 +160,15 @@ module.exports = { ) { await playwright.waitAndClick(mainPageElements.tippyTooltip.closeButton); } + if ( + (await playwright + .metamaskWindow() + .$(mainPageElements.actionableMessage.container)) !== null + ) { + await playwright.waitAndClick( + mainPageElements.actionableMessage.closeButton, + ); + } return true; }, closeModal: async () => { @@ -202,7 +210,7 @@ module.exports = { return true; }, importWallet: async (secretWords, password) => { - module.exports.optOutAnalytics(); + await module.exports.optOutAnalytics(); await playwright.waitAndClick( firstTimeFlowPageElements.importWalletButton, await playwright.metamaskWindow(), @@ -246,7 +254,7 @@ module.exports = { return true; }, createWallet: async password => { - module.exports.optOutAnalytics(); + await module.exports.optOutAnalytics(); await playwright.waitAndClick( firstTimeFlowPageElements.createWalletButton, await playwright.metamaskWindow(), @@ -310,7 +318,6 @@ module.exports = { if (accountName) { accountName = accountName.toLowerCase(); } - await switchToMetamaskIfNotActive(); await module.exports.goToNewAccount(); if (accountName) { @@ -327,13 +334,11 @@ module.exports = { if (typeof accountNameOrAccountNumber === 'string') { accountNameOrAccountNumber = accountNameOrAccountNumber.toLowerCase(); } - await switchToMetamaskIfNotActive(); // note: closePopupAndTooltips() is required after changing createAccount() to use direct urls (popup started appearing) // ^ this change also introduced 500ms delay for closePopupAndTooltips() function await module.exports.closePopupAndTooltips(); await playwright.waitAndClick(mainPageElements.accountMenu.button); - if (typeof accountNameOrAccountNumber === 'number') { await playwright.waitAndClick( mainPageElements.accountMenu.accountButton(accountNameOrAccountNumber), @@ -344,7 +349,6 @@ module.exports = { accountNameOrAccountNumber, ); } - await switchToCypressIfNotActive(); return true; }, @@ -378,7 +382,6 @@ module.exports = { }, addNetwork: async network => { await switchToMetamaskIfNotActive(); - if ( process.env.NETWORK_NAME && process.env.RPC_URL && @@ -393,15 +396,12 @@ module.exports = { isTestnet: process.env.IS_TESTNET, }; } - if (typeof network === 'string') { network = network.toLowerCase(); } else if (typeof network === 'object') { network.networkName = network.networkName.toLowerCase(); } - await module.exports.goToAddNetwork(); - await playwright.waitAndClick(networksPageElements.addNetworkButton); await playwright.waitAndType( addNetworkPageElements.networkNameInput, network.networkName, @@ -414,37 +414,31 @@ module.exports = { addNetworkPageElements.chainIdInput, network.chainId, ); - if (network.symbol) { await playwright.waitAndType( addNetworkPageElements.symbolInput, network.symbol, ); } - if (network.blockExplorer) { await playwright.waitAndType( addNetworkPageElements.blockExplorerInput, network.blockExplorer, ); } - - await playwright.waitAndClick(addNetworkPageElements.saveButton); await playwright.waitAndClick( - settingsPageElements.closeButton, + addNetworkPageElements.saveButton, await playwright.metamaskWindow(), { waitForEvent: 'navi', }, ); - + await module.exports.closePopupAndTooltips(); setNetwork(network); - await playwright.waitForText( mainPageElements.networkSwitcher.networkName, network.networkName, ); - await switchToCypressIfNotActive(); return true; }, @@ -580,7 +574,6 @@ module.exports = { }, confirmSignatureRequest: async () => { const notificationPage = await playwright.switchToMetamaskNotification(); - playwright.waitAndClick( signaturePageElements.confirmSignatureRequestButton, notificationPage, From 3561a5beb676080304237bab72185a50b9f01bcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 17:06:35 +0000 Subject: [PATCH 30/52] chore(deps): Bump github/codeql-action from 2.1.27 to 2.1.28 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.27 to 2.1.28. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/807578363a7869ca324a79039e6db9c843e0e100...cc7986c02bac29104a72998e67239bb5ee2ee110) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/audit_and_lint.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/audit_and_lint.yml b/.github/workflows/audit_and_lint.yml index bba0d0547..d8e5c840d 100644 --- a/.github/workflows/audit_and_lint.yml +++ b/.github/workflows/audit_and_lint.yml @@ -76,7 +76,7 @@ jobs: if: always() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request') - uses: github/codeql-action/upload-sarif@807578363a7869ca324a79039e6db9c843e0e100 # pin@codeql-bundle-20210517 + uses: github/codeql-action/upload-sarif@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20210517 with: sarif_file: lint-results.sarif continue-on-error: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b320cfb33..eec20ee5f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -17,10 +17,10 @@ jobs: uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v2 - name: Initialize CodeQL - uses: github/codeql-action/init@807578363a7869ca324a79039e6db9c843e0e100 + uses: github/codeql-action/init@cc7986c02bac29104a72998e67239bb5ee2ee110 with: queries: security-and-quality languages: javascript - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@807578363a7869ca324a79039e6db9c843e0e100 + uses: github/codeql-action/analyze@cc7986c02bac29104a72998e67239bb5ee2ee110 From 7a9caa1a4aa2b71d23603c6c78354e9083e2e8f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 17:06:40 +0000 Subject: [PATCH 31/52] chore(deps): Bump docker/setup-buildx-action from 2.1.0 to 2.2.1 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.1.0 to 2.2.1. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/95cb08cb2672c73d4ffd2f422e6d11953d2a9c70...8c0edbc76e98fa90f69d9a2c020dcb50019dc325) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/audit_and_lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/audit_and_lint.yml b/.github/workflows/audit_and_lint.yml index bba0d0547..751c94d70 100644 --- a/.github/workflows/audit_and_lint.yml +++ b/.github/workflows/audit_and_lint.yml @@ -104,7 +104,7 @@ jobs: uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # pin@v1 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@95cb08cb2672c73d4ffd2f422e6d11953d2a9c70 # pin@v1 + uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # pin@v1 - name: Cache Docker layers uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # pin@v2 From f9270a96a165809e11d5003f41ebd2915af4485d Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 22:25:17 +0200 Subject: [PATCH 32/52] po: update notification window Signed-off-by: Jakub Mucha --- commands/metamask.js | 19 +++++++++++++++++-- pages/metamask/notification-page.js | 15 +++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 3d799cc39..ebf948c4a 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -574,6 +574,14 @@ module.exports = { }, confirmSignatureRequest: async () => { const notificationPage = await playwright.switchToMetamaskNotification(); + const scrollDownButton = await playwright + .metamaskWindow() + .$(signaturePageElements.signatureRequestScrollDownButton); + if (scrollDownButton) { + await playwright.waitAndClick( + signaturePageElements.signatureRequestScrollDownButton, + ); + } playwright.waitAndClick( signaturePageElements.confirmSignatureRequestButton, notificationPage, @@ -583,6 +591,14 @@ module.exports = { }, confirmDataSignatureRequest: async () => { const notificationPage = await playwright.switchToMetamaskNotification(); + const scrollDownButton = await playwright + .metamaskWindow() + .$(signaturePageElements.signatureRequestScrollDownButton); + if (scrollDownButton) { + await playwright.waitAndClick( + signaturePageElements.signatureRequestScrollDownButton, + ); + } await playwright.waitAndClick( dataSignaturePageElements.confirmDataSignatureRequestButton, notificationPage, @@ -628,10 +644,9 @@ module.exports = { }, acceptAccess: async allAccounts => { const notificationPage = await playwright.switchToMetamaskNotification(); - // todo: allAccounts doesn't work? - waitAndClick has .first() if (allAccounts === true) { await playwright.waitAndClick( - notificationPageElements.selectAllCheck, + notificationPageElements.selectAllCheckbox, notificationPage, ); } diff --git a/pages/metamask/notification-page.js b/pages/metamask/notification-page.js index 876aba27d..79188aaf8 100644 --- a/pages/metamask/notification-page.js +++ b/pages/metamask/notification-page.js @@ -1,32 +1,35 @@ const notificationPage = '.notification'; -const nextButton = `${notificationPage} .permissions-connect-choose-account__bottom-buttons button:nth-child(2)`; +const nextButton = `${notificationPage} .permissions-connect-choose-account__bottom-buttons .btn-primary`; const allowToSpendButton = `${notificationPage} [data-testid="page-container-footer-next"]`; const rejectToSpendButton = `${notificationPage} [data-testid="page-container-footer-cancel"]`; -const selectAllCheck = `${notificationPage} .permissions-connect-choose-account__header-check-box`; +const selectAllCheckbox = `${notificationPage} .choose-account-list__header-check-box`; module.exports.notificationPageElements = { notificationPage, nextButton, allowToSpendButton, rejectToSpendButton, - selectAllCheck, + selectAllCheckbox, }; const confirmSignatureRequestButton = `${notificationPage} .request-signature__footer__sign-button`; const rejectSignatureRequestButton = `${notificationPage} .request-signature__footer__cancel-button`; +const signatureRequestScrollDownButton = `${notificationPage} [data-testid="signature-request-scroll-button"]`; module.exports.signaturePageElements = { confirmSignatureRequestButton, rejectSignatureRequestButton, + signatureRequestScrollDownButton, }; -const confirmDataSignatureRequestButton = `.btn-primary`; -const rejectDataSignatureRequestButton = `.btn-default`; +const confirmDataSignatureRequestButton = `${notificationPage} [data-testid="signature-sign-button"]`; +const rejectDataSignatureRequestButton = `${notificationPage} [data-testid="signature-cancel-button"]`; module.exports.dataSignaturePageElements = { confirmDataSignatureRequestButton, rejectDataSignatureRequestButton, + signatureRequestScrollDownButton, }; const permissionsPage = '.permissions-connect'; -const connectButton = `${permissionsPage} .permission-approval-container__footers button:nth-child(2)`; +const connectButton = `${permissionsPage} .permission-approval-container__footers .btn-primary`; module.exports.permissionsPageElements = { permissionsPage, connectButton, From bb94a5ba11738fdcc8098160d5cfd098de25f8db Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 22:48:24 +0200 Subject: [PATCH 33/52] chore: add experimental settings url Signed-off-by: Jakub Mucha --- commands/metamask.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/commands/metamask.js b/commands/metamask.js index ebf948c4a..5bbecf1ea 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -37,6 +37,7 @@ let extensionId; let extensionHomeUrl; let extensionSettingsUrl; let extensionAdvancedSettingsUrl; +let extensionExperimentalSettingsUrl; let extensionAddNetworkUrl; let extensionNewAccountUrl; let extensionImportAccountUrl; @@ -53,6 +54,7 @@ module.exports = { extensionHomeUrl, extensionSettingsUrl, extensionAdvancedSettingsUrl, + extensionExperimentalSettingsUrl, extensionAddNetworkUrl, extensionNewAccountUrl, extensionImportAccountUrl, @@ -73,6 +75,12 @@ module.exports = { playwright.metamaskWindow().goto(extensionAdvancedSettingsUrl), ]); }, + goToExperimentalSettings: async () => { + await Promise.all([ + playwright.metamaskWindow().waitForNavigation(), + playwright.metamaskWindow().goto(extensionExperimentalSettingsUrl), + ]); + }, goToAddNetwork: async () => { await Promise.all([ playwright.metamaskWindow().waitForNavigation(), @@ -97,6 +105,7 @@ module.exports = { extensionHomeUrl = `chrome-extension://${extensionId}/home.html`; extensionSettingsUrl = `${extensionHomeUrl}#settings`; extensionAdvancedSettingsUrl = `${extensionSettingsUrl}/advanced`; + extensionExperimentalSettingsUrl = `${extensionSettingsUrl}/experimental`; extensionAddNetworkUrl = `${extensionSettingsUrl}/networks/add-network`; extensionNewAccountUrl = `${extensionHomeUrl}#new-account`; extensionImportAccountUrl = `${extensionNewAccountUrl}/import`; @@ -106,6 +115,7 @@ module.exports = { extensionId, extensionSettingsUrl, extensionAdvancedSettingsUrl, + extensionExperimentalSettingsUrl, extensionAddNetworkUrl, extensionNewAccountUrl, extensionImportAccountUrl, From 2fee5e6d77aeb7fbaaf3bcde16890dd61f0448b2 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 22:55:07 +0200 Subject: [PATCH 34/52] po: add experimentalsettingspage Signed-off-by: Jakub Mucha --- pages/metamask/settings-page.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index 8968c3064..b4064189e 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -57,6 +57,21 @@ module.exports.advancedPageElements = { customNonceToggleOff, }; +const enhancedGasFeeUIToggleOn = + '.settings-page__content-row:nth-child(1) .toggle-button--on'; +const enhancedGasFeeUIToggleOff = + '.settings-page__content-row:nth-child(1) .toggle-button--off'; +const showCustomNetworkListToggleOn = + 'settings-page__content-row:nth-child(3) .toggle-button--on'; +const showCustomNetworkListToggleOff = + 'settings-page__content-row:nth-child(3) .toggle-button--off'; +module.exports.experimentalSettingsPageElements = { + enhancedGasFeeUIToggleOn, + enhancedGasFeeUIToggleOff, + showCustomNetworkListToggleOn, + showCustomNetworkListToggleOff, +}; + const nevermindButton = '.modal-container .btn-secondary'; const resetButton = '.modal-container .btn-danger-primary'; module.exports.resetAccountModalElements = { From 8ad233545650f646b2351854db3c17aaf10008c4 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 23:16:21 +0200 Subject: [PATCH 35/52] feat: add experimental settings Signed-off-by: Jakub Mucha --- commands/metamask.js | 49 ++++++++++++++++++++++++++------ plugins/index.js | 38 ++++++++++++++++--------- support/commands.js | 67 +++++++++++++++++++++++++++++++------------- support/index.d.ts | 14 +++++++++ 4 files changed, 126 insertions(+), 42 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 5bbecf1ea..491c0a832 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -24,6 +24,7 @@ const { const { settingsPageElements, advancedPageElements, + experimentalSettingsPageElements, resetAccountModalElements, addNetworkPageElements, } = require('../pages/metamask/settings-page'); @@ -511,7 +512,7 @@ module.exports = { await switchToCypressIfNotActive(); return true; }, - activateAdvancedGasControl: async (skipSetup = false) => { + activateAdvancedGasControl: async skipSetup => { await activateAdvancedSetting( advancedPageElements.advancedGasControlToggleOn, advancedPageElements.advancedGasControlToggleOff, @@ -519,7 +520,7 @@ module.exports = { ); return; }, - activateEnhancedTokenDetection: async (skipSetup = false) => { + activateEnhancedTokenDetection: async skipSetup => { await activateAdvancedSetting( advancedPageElements.enhancedTokenDetectionToggleOn, advancedPageElements.enhancedTokenDetectionToggleOff, @@ -527,7 +528,7 @@ module.exports = { ); return; }, - activateShowHexData: async (skipSetup = false) => { + activateShowHexData: async skipSetup => { await activateAdvancedSetting( advancedPageElements.showHexDataToggleOn, advancedPageElements.showHexDataToggleOff, @@ -535,7 +536,7 @@ module.exports = { ); return; }, - activateTestnetConversion: async (skipSetup = false) => { + activateTestnetConversion: async skipSetup => { await activateAdvancedSetting( advancedPageElements.showTestnetConversionOn, advancedPageElements.showTestnetConversionOff, @@ -543,7 +544,7 @@ module.exports = { ); return; }, - activateShowTestnetNetworks: async (skipSetup = false) => { + activateShowTestnetNetworks: async skipSetup => { await activateAdvancedSetting( advancedPageElements.showTestnetNetworksOn, advancedPageElements.showTestnetNetworksOff, @@ -551,7 +552,7 @@ module.exports = { ); return; }, - activateCustomNonce: async (skipSetup = false) => { + activateCustomNonce: async skipSetup => { await activateAdvancedSetting( advancedPageElements.customNonceToggleOn, advancedPageElements.customNonceToggleOff, @@ -559,7 +560,7 @@ module.exports = { ); return; }, - activateDismissBackupReminder: async (skipSetup = false) => { + activateDismissBackupReminder: async skipSetup => { await activateAdvancedSetting( advancedPageElements.dismissBackupReminderOn, advancedPageElements.dismissBackupReminderOff, @@ -567,6 +568,24 @@ module.exports = { ); return; }, + activateEnhancedGasFeeUI: async skipSetup => { + await activateAdvancedSetting( + experimentalSettingsPageElements.enhancedGasFeeUIToggleOn, + experimentalSettingsPageElements.enhancedGasFeeUIToggleOff, + skipSetup, + true, + ); + return; + }, + activateShowCustomNetworkList: async skipSetup => { + await activateAdvancedSetting( + experimentalSettingsPageElements.showCustomNetworkListToggleOn, + experimentalSettingsPageElements.showCustomNetworkListToggleOff, + skipSetup, + true, + ); + return; + }, resetAccount: async () => { await switchToMetamaskIfNotActive(); await module.exports.goToAdvancedSettings(); @@ -907,10 +926,19 @@ async function switchToCypressIfNotActive() { return switchBackToCypressWindow; } -async function activateAdvancedSetting(toggleOn, toggleOff, skipSetup) { +async function activateAdvancedSetting( + toggleOn, + toggleOff, + skipSetup, + experimental, +) { if (!skipSetup) { await switchToMetamaskIfNotActive(); - await module.exports.goToAdvancedSettings(); + if (experimental) { + await module.exports.goToExperimentalSettings(); + } else { + await module.exports.goToAdvancedSettings(); + } } if ((await playwright.metamaskWindow().$(toggleOn)) === null) { await playwright.waitAndClick(toggleOff); @@ -940,6 +968,9 @@ async function setupSettings(enableAdvancedSettings) { await module.exports.activateEnhancedTokenDetection(true); await module.exports.activateTestnetConversion(true); } + await module.exports.goToExperimentalSettings(); + await module.exports.activateEnhancedGasFeeUI(true); + await module.exports.activateShowCustomNetworkList(true); await playwright.waitAndClick( settingsPageElements.closeButton, await playwright.metamaskWindow(), diff --git a/plugins/index.js b/plugins/index.js index f8e3958d5..e22aaa34c 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -123,32 +123,42 @@ module.exports = (on, config) => { const networkChanged = await metamask.changeNetwork(network); return networkChanged; }, - activateAdvancedGasControlInMetamask: async () => { - const activated = await metamask.activateAdvancedGasControl(); + activateAdvancedGasControlInMetamask: async skipSetup => { + const activated = await metamask.activateAdvancedGasControl(skipSetup); return activated; }, - activateEnhancedTokenDetectionInMetamask: async () => { - const activated = await metamask.activateEnhancedTokenDetection(); + activateEnhancedTokenDetectionInMetamask: async skipSetup => { + const activated = await metamask.activateEnhancedTokenDetection( + skipSetup, + ); + return activated; + }, + activateShowHexDataInMetamask: async skipSetup => { + const activated = await metamask.activateShowHexData(skipSetup); + return activated; + }, + activateTestnetConversionInMetamask: async skipSetup => { + const activated = await metamask.activateTestnetConversion(skipSetup); return activated; }, - activateShowHexDataInMetamask: async () => { - const activated = await metamask.activateShowHexData(); + activateShowTestnetNetworksInMetamask: async skipSetup => { + const activated = await metamask.activateShowTestnetNetworks(skipSetup); return activated; }, - activateTestnetConversionInMetamask: async () => { - const activated = await metamask.activateTestnetConversion(); + activateCustomNonceInMetamask: async skipSetup => { + const activated = await metamask.activateCustomNonce(skipSetup); return activated; }, - activateShowTestnetNetworksInMetamask: async () => { - const activated = await metamask.activateShowTestnetNetworks(); + activateDismissBackupReminderInMetamask: async skipSetup => { + const activated = await metamask.activateDismissBackupReminder(skipSetup); return activated; }, - activateCustomNonceInMetamask: async () => { - const activated = await metamask.activateCustomNonce(); + activateEnhancedGasFeeUIInMetamask: async skipSetup => { + const activated = await metamask.activateEnhancedGasFeeUI(skipSetup); return activated; }, - activateDismissBackupReminderInMetamask: async () => { - const activated = await metamask.activateDismissBackupReminder(); + activateShowCustomNetworkListInMetamask: async skipSetup => { + const activated = await metamask.activateShowCustomNetworkList(skipSetup); return activated; }, resetMetamaskAccount: async () => { diff --git a/support/commands.js b/support/commands.js index 3381e6632..d52c7844f 100644 --- a/support/commands.js +++ b/support/commands.js @@ -63,33 +63,62 @@ Cypress.Commands.add('getMetamaskWalletAddress', () => { }); }); -Cypress.Commands.add('activateAdvancedGasControlInMetamask', () => { - return cy.task('activateAdvancedGasControlInMetamask'); -}); +Cypress.Commands.add( + 'activateAdvancedGasControlInMetamask', + (skipSetup = false) => { + return cy.task('activateAdvancedGasControlInMetamask', skipSetup); + }, +); -Cypress.Commands.add('activateEnhancedTokenDetectionInMetamask', () => { - return cy.task('activateEnhancedTokenDetectionInMetamask'); -}); +Cypress.Commands.add( + 'activateEnhancedTokenDetectionInMetamask', + (skipSetup = false) => { + return cy.task('activateEnhancedTokenDetectionInMetamask', skipSetup); + }, +); -Cypress.Commands.add('activateShowHexDataInMetamask', () => { - return cy.task('activateShowHexDataInMetamask'); +Cypress.Commands.add('activateShowHexDataInMetamask', (skipSetup = false) => { + return cy.task('activateShowHexDataInMetamask', skipSetup); }); -Cypress.Commands.add('activateTestnetConversionInMetamask', () => { - return cy.task('activateTestnetConversionInMetamask'); -}); +Cypress.Commands.add( + 'activateTestnetConversionInMetamask', + (skipSetup = false) => { + return cy.task('activateTestnetConversionInMetamask', skipSetup); + }, +); -Cypress.Commands.add('activateShowTestnetNetworksInMetamask', () => { - return cy.task('activateShowTestnetNetworksInMetamask'); -}); +Cypress.Commands.add( + 'activateShowTestnetNetworksInMetamask', + (skipSetup = false) => { + return cy.task('activateShowTestnetNetworksInMetamask', skipSetup); + }, +); -Cypress.Commands.add('activateCustomNonceInMetamask', () => { - return cy.task('activateCustomNonceInMetamask'); +Cypress.Commands.add('activateCustomNonceInMetamask', (skipSetup = false) => { + return cy.task('activateCustomNonceInMetamask', skipSetup); }); -Cypress.Commands.add('activateDismissBackupReminderInMetamask', () => { - return cy.task('activateDismissBackupReminderInMetamask'); -}); +Cypress.Commands.add( + 'activateDismissBackupReminderInMetamask', + (skipSetup = false) => { + return cy.task('activateDismissBackupReminderInMetamask', skipSetup); + }, +); + +Cypress.Commands.add( + 'activateEnhancedGasFeeUIInMetamask', + (skipSetup = false) => { + return cy.task('activateEnhancedGasFeeUIInMetamask', skipSetup); + }, +); + +Cypress.Commands.add( + 'activateShowCustomNetworkListInMetamask', + (skipSetup = false) => { + return cy.task('activateShowCustomNetworkListInMetamask', skipSetup); + }, +); Cypress.Commands.add('resetMetamaskAccount', () => { return cy.task('resetMetamaskAccount'); diff --git a/support/index.d.ts b/support/index.d.ts index 79f75b77e..12d00a2d1 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -149,6 +149,20 @@ declare namespace Cypress { activateDismissBackupReminderInMetamask( skipSetup?: boolean, ): Chainable; + /** + * Activate enhanced gas fee UI in metamask settings + * @example + * cy.activateEnhancedGasFeeUIInMetamask() + */ + activateEnhancedGasFeeUIInMetamask(skipSetup?: boolean): Chainable; + /** + * Activate showing of custom network list in metamask settings + * @example + * cy.activateShowCustomNetworkListInMetamask() + */ + activateShowCustomNetworkListInMetamask( + skipSetup?: boolean, + ): Chainable; /** * Reset metamask account state in settings * @example From 03a99da02ae2b842b515073a53b9d2b9b44af357 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Tue, 18 Oct 2022 23:33:39 +0200 Subject: [PATCH 36/52] po: fix for notification page tx confirmation Signed-off-by: Jakub Mucha --- pages/metamask/notification-page.js | 38 +++++++++++++++++------------ 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/pages/metamask/notification-page.js b/pages/metamask/notification-page.js index 79188aaf8..8b49398f2 100644 --- a/pages/metamask/notification-page.js +++ b/pages/metamask/notification-page.js @@ -37,29 +37,35 @@ module.exports.permissionsPageElements = { const confirmPageHeader = `${notificationPage} .confirm-page-container-header`; const confirmPageContent = `${notificationPage} .confirm-page-container-content`; -const confirmPageGasFeeSection = `${confirmPageContent} .confirm-page-container-content__gas-fee`; -const gasFeeLabel = `${confirmPageGasFeeSection} .currency-display-component__text`; -const gasFeeInput = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(1) .advanced-gas-inputs__gas-edit-row__input`; -const gasFeeArrowUpButton = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(1) .advanced-gas-inputs__gas-edit-row__input-arrows__i-wrap:nth-child(1)`; -const gasFeeArrowDownButton = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(1) .advanced-gas-inputs__gas-edit-row__input-arrows__i-wrap:nth-child(2)`; -const gasLimitInput = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(2) .advanced-gas-inputs__gas-edit-row__input`; -const gasLimitArrowUpButton = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(2) .advanced-gas-inputs__gas-edit-row__input-arrows__i-wrap:nth-child(1)`; -const gasLimitArrowDownButton = `${confirmPageGasFeeSection} .advanced-gas-inputs__gas-edit-row:nth-child(2) .advanced-gas-inputs__gas-edit-row__input-arrows__i-wrap:nth-child(2)`; -const totalLabel = `${confirmPageContent} div:nth-child(2) > .confirm-detail-row .currency-display-component__text`; +const editGasFeeButton = `${notificationPage} [data-testid="edit-gas-fee-button"]`; +const gasOptionLowButton = `${notificationPage} [data-testid="edit-gas-fee-item-low"]`; +const gasOptionMediumButton = `${notificationPage} [data-testid="edit-gas-fee-item-medium"]`; +const gasOptionHighButton = `${notificationPage} [data-testid="edit-gas-fee-item-high"]`; +const gasOptionDappSuggestedButton = `${notificationPage} [data-testid="edit-gas-fee-item-dapp-suggested"]`; +const gasOptionCustomButton = `${notificationPage} [data-testid="edit-gas-fee-item-custom"]`; +const baseFeeInput = `${notificationPage} [data-testid="base-fee-input"]`; +const priorityFeeInput = `${notificationPage} [data-testid="priority-fee-input"]`; +const editGasLimitButton = `${notificationPage} [data-testid="advanced-gas-fee-edit"]`; +const gasLimitInput = `${notificationPage} [data-testid="gas-limit-input"]`; +const saveCustomGasFeeButton = `${notificationPage} .popover-container .btn-primary`; +const totalLabel = `${confirmPageContent} .transaction-detail-item:nth-child(2) .transaction-detail-item__detail-values h6:nth-child(2)`; // todo: fix const rejectButton = `${confirmPageContent} [data-testid="page-container-footer-cancel"]`; const confirmButton = `${confirmPageContent} [data-testid="page-container-footer-next"]`; module.exports.confirmPageElements = { notificationPage, confirmPageHeader, confirmPageContent, - confirmPageGasFeeSection, - gasFeeLabel, - gasFeeInput, - gasFeeArrowUpButton, - gasFeeArrowDownButton, + editGasFeeButton, + gasOptionLowButton, + gasOptionMediumButton, + gasOptionHighButton, + gasOptionDappSuggestedButton, + gasOptionCustomButton, + baseFeeInput, + priorityFeeInput, + editGasLimitButton, gasLimitInput, - gasLimitArrowUpButton, - gasLimitArrowDownButton, + saveCustomGasFeeButton, totalLabel, rejectButton, confirmButton, From 43cc393b5fcacf02d122286b5f586322ca824f7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 17:45:19 +0000 Subject: [PATCH 37/52] chore(deps): Bump actions/upload-artifact from 3.1.0 to 3.1.1 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/3cea5372237819ed00197afe530f5a7ea3e805c8...83fd05a356d7e2593de66fc9913b3002723633cb) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/audit_and_lint.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/audit_and_lint.yml b/.github/workflows/audit_and_lint.yml index a896ad568..005170bcb 100644 --- a/.github/workflows/audit_and_lint.yml +++ b/.github/workflows/audit_and_lint.yml @@ -130,7 +130,7 @@ jobs: continue-on-error: true - name: Archive e2e artifacts (low res) - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # pin@v2 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # pin@v2 if: always() with: name: e2e-artifacts-low-res @@ -156,7 +156,7 @@ jobs: continue-on-error: true - name: Archive e2e artifacts (high res) - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # pin@v2 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # pin@v2 if: always() with: name: e2e-artifacts-high-res From 192d387913dd8e076dc6d42c2b3069af2f851b84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 17:05:15 +0000 Subject: [PATCH 38/52] chore(deps): Bump github/codeql-action from 2.1.28 to 2.1.29 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.28 to 2.1.29. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/cc7986c02bac29104a72998e67239bb5ee2ee110...ec3cf9c605b848da5f1e41e8452719eb1ccfb9a6) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/audit_and_lint.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/audit_and_lint.yml b/.github/workflows/audit_and_lint.yml index 005170bcb..6764f3983 100644 --- a/.github/workflows/audit_and_lint.yml +++ b/.github/workflows/audit_and_lint.yml @@ -76,7 +76,7 @@ jobs: if: always() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request') - uses: github/codeql-action/upload-sarif@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20210517 + uses: github/codeql-action/upload-sarif@ec3cf9c605b848da5f1e41e8452719eb1ccfb9a6 # pin@codeql-bundle-20210517 with: sarif_file: lint-results.sarif continue-on-error: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index eec20ee5f..535d78422 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -17,10 +17,10 @@ jobs: uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v2 - name: Initialize CodeQL - uses: github/codeql-action/init@cc7986c02bac29104a72998e67239bb5ee2ee110 + uses: github/codeql-action/init@ec3cf9c605b848da5f1e41e8452719eb1ccfb9a6 with: queries: security-and-quality languages: javascript - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@cc7986c02bac29104a72998e67239bb5ee2ee110 + uses: github/codeql-action/analyze@ec3cf9c605b848da5f1e41e8452719eb1ccfb9a6 From e62799ffd670978a47b2958929c0bfef7f805fb6 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 13:02:51 +0100 Subject: [PATCH 39/52] e2e: define secret words for setupmetamask Signed-off-by: Jakub Mucha --- tests/e2e/specs/metamask-spec.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index da836b828..e768f95f7 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -3,7 +3,11 @@ describe('Metamask', () => { context('Test commands', () => { // todo: clear the state of extension and test different combinations of setupMetamask with private key & custom network it(`setupMetamask should finish metamask setup using secret words`, () => { - cy.setupMetamask().then(setupFinished => { + cy.setupMetamask( + 'test test test test test test test test test test test junk', + 'goerli', + 'Tester@1234', + ).then(setupFinished => { expect(setupFinished).to.be.true; }); }); From c72e39a67f3a598435be33adbc6b22ee1866174a Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 13:03:29 +0100 Subject: [PATCH 40/52] feat: update confirmtx + fixes Signed-off-by: Jakub Mucha --- commands/metamask.js | 88 ++++++++++++++------------------- commands/playwright.js | 3 +- pages/metamask/settings-page.js | 14 +++--- support/index.d.ts | 2 +- 4 files changed, 46 insertions(+), 61 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 491c0a832..fd17b4d37 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -31,7 +31,7 @@ const { const { confirmationPageElements, } = require('../pages/metamask/confirmation-page'); -const { setNetwork, getNetwork } = require('../helpers'); +const { setNetwork } = require('../helpers'); let extensionInitialUrl; let extensionId; @@ -513,78 +513,69 @@ module.exports = { return true; }, activateAdvancedGasControl: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.advancedGasControlToggleOn, advancedPageElements.advancedGasControlToggleOff, skipSetup, ); - return; }, activateEnhancedTokenDetection: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.enhancedTokenDetectionToggleOn, advancedPageElements.enhancedTokenDetectionToggleOff, skipSetup, ); - return; }, activateShowHexData: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.showHexDataToggleOn, advancedPageElements.showHexDataToggleOff, skipSetup, ); - return; }, activateTestnetConversion: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.showTestnetConversionOn, advancedPageElements.showTestnetConversionOff, skipSetup, ); - return; }, activateShowTestnetNetworks: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.showTestnetNetworksOn, advancedPageElements.showTestnetNetworksOff, skipSetup, ); - return; }, activateCustomNonce: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.customNonceToggleOn, advancedPageElements.customNonceToggleOff, skipSetup, ); - return; }, activateDismissBackupReminder: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( advancedPageElements.dismissBackupReminderOn, advancedPageElements.dismissBackupReminderOff, skipSetup, ); - return; }, activateEnhancedGasFeeUI: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( experimentalSettingsPageElements.enhancedGasFeeUIToggleOn, experimentalSettingsPageElements.enhancedGasFeeUIToggleOff, skipSetup, true, ); - return; }, activateShowCustomNetworkList: async skipSetup => { - await activateAdvancedSetting( + return await activateAdvancedSetting( experimentalSettingsPageElements.showCustomNetworkListToggleOn, experimentalSettingsPageElements.showCustomNetworkListToggleOff, skipSetup, true, ); - return; }, resetAccount: async () => { await switchToMetamaskIfNotActive(); @@ -693,40 +684,35 @@ module.exports = { }, confirmTransaction: async gasConfig => { const notificationPage = await playwright.switchToMetamaskNotification(); - if (gasConfig && gasConfig.gasFee) { - await playwright.waitAndSetValue( - gasConfig.gasFee.toString(), - confirmPageElements.gasFeeInput, - notificationPage, - ); - } else if (getNetwork().isTestnet) { - await playwright.waitAndClick( - confirmPageElements.gasFeeArrowUpButton, - notificationPage, - 1, - ); - } else { - await playwright.waitAndClick( - confirmPageElements.gasFeeArrowUpButton, - notificationPage, - 10, - ); - } - if (gasConfig && gasConfig.gasLimit) { - await playwright.waitAndSetValue( - gasConfig.gasLimit.toString(), - confirmPageElements.gasLimitInput, - notificationPage, - ); + if (gasConfig) { + await playwright.waitAndClick(confirmPageElements.editGasFeeButton); + await playwright.waitAndClick(confirmPageElements.gasOptionCustomButton); + if (gasConfig.gasLimit) { + await playwright.waitAndClick(confirmPageElements.editGasLimitButton); + await playwright.waitAndSetValue( + gasConfig.gasLimit.toString(), + confirmPageElements.gasLimitInput, + notificationPage, + ); + } + if (gasConfig.baseFee) { + await playwright.waitAndSetValue( + gasConfig.baseFee.toString(), + confirmPageElements.baseFeeInput, + notificationPage, + ); + } + if (gasConfig.priorityFee) { + await playwright.waitAndSetValue( + gasConfig.priorityFee.toString(), + confirmPageElements.priorityFeeInput, + notificationPage, + ); + } + await playwright.waitAndClick(confirmPageElements.saveCustomGasFeeButton); } - const gasLimitInput = confirmPageElements.gasLimitInput; - await notificationPage.waitForFunction( - gasLimitInput => document.querySelector(gasLimitInput).value != '0', - gasLimitInput, - ); - await playwright.waitAndClick( confirmPageElements.confirmButton, notificationPage, @@ -752,8 +738,8 @@ module.exports = { ); return true; }, - rejectEncryptionPublicKeyRequest: async () => { + // todo: continue here const notificationPage = await playwright.switchToMetamaskNotification(); await playwright.waitAndClick( encryptionPublicKeyPageElements.rejectEncryptionPublicKeyButton, diff --git a/commands/playwright.js b/commands/playwright.js index ed2d08e3f..f38111ef1 100644 --- a/commands/playwright.js +++ b/commands/playwright.js @@ -122,8 +122,7 @@ module.exports = { await sleep(200); if (retries < 50) { retries++; - await module.exports.switchToMetamaskNotification(); - return; + return await module.exports.switchToMetamaskNotification(); } else if (retries >= 50) { retries = 0; throw new Error( diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index b4064189e..ea44fa35f 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -62,9 +62,9 @@ const enhancedGasFeeUIToggleOn = const enhancedGasFeeUIToggleOff = '.settings-page__content-row:nth-child(1) .toggle-button--off'; const showCustomNetworkListToggleOn = - 'settings-page__content-row:nth-child(3) .toggle-button--on'; + '.settings-page__content-row:nth-child(3) .toggle-button--on'; const showCustomNetworkListToggleOff = - 'settings-page__content-row:nth-child(3) .toggle-button--off'; + '.settings-page__content-row:nth-child(3) .toggle-button--off'; module.exports.experimentalSettingsPageElements = { enhancedGasFeeUIToggleOn, enhancedGasFeeUIToggleOff, @@ -83,11 +83,11 @@ const addNetworkButton = '.networks-tab__body button'; module.exports.networksPageElements = { addNetworkButton }; const addNetworkForm = '.networks-tab__add-network-form-body'; -const networkNameInput = `${addNetworkForm} .form-field:nth-child(1)`; -const rpcUrlInput = `${addNetworkForm} .form-field:nth-child(2)`; -const chainIdInput = `${addNetworkForm} .form-field:nth-child(3)`; -const symbolInput = `${addNetworkForm} .form-field:nth-child(4)`; -const blockExplorerInput = `${addNetworkForm} .form-field:nth-child(5)`; +const networkNameInput = `${addNetworkForm} .form-field:nth-child(1) input`; +const rpcUrlInput = `${addNetworkForm} .form-field:nth-child(2) input`; +const chainIdInput = `${addNetworkForm} .form-field:nth-child(3) input`; +const symbolInput = `${addNetworkForm} .form-field:nth-child(4) input`; +const blockExplorerInput = `${addNetworkForm} .form-field:nth-child(5) input`; const saveButton = '.networks-tab__add-network-form-footer .btn-primary'; module.exports.addNetworkPageElements = { addNetworkForm, diff --git a/support/index.d.ts b/support/index.d.ts index 12d00a2d1..c9d4a4586 100644 --- a/support/index.d.ts +++ b/support/index.d.ts @@ -252,7 +252,7 @@ declare namespace Cypress { * Confirm metamask atransaction * @example * cy.confirmMetamaskTransaction() - * cy.confirmMetamaskTransaction({gasFee: 10, gasLimit: 1000000}) + * cy.confirmMetamaskTransaction({gasLimit: 1000000, baseFee: 20, priorityFee: 20}) */ confirmMetamaskTransaction(gasConfig?: object): Chainable; /** From 05d99416cca528adf0b5f5269aa2ba9e1ab6d683 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 18:34:18 +0100 Subject: [PATCH 41/52] deps: add ethers Signed-off-by: Jakub Mucha --- package.json | 1 + yarn.lock | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/package.json b/package.json index 3f4bc8e06..5ef685b67 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "eslint-plugin-testing-library": "^5.7.2", "eslint-plugin-ui-testing": "^2.0.1", "eslint-plugin-unicorn": "^44.0.2", + "ethers": "^5.7.2", "etherscan-api": "^10.2.0", "find-config": "^1.0.0", "node-fetch": "^2.6.1", diff --git a/yarn.lock b/yarn.lock index 8a763d32b..5fe595253 100644 --- a/yarn.lock +++ b/yarn.lock @@ -616,6 +616,13 @@ dependencies: "@ethersproject/logger" "^5.7.0" +"@ethersproject/networks@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" @@ -657,6 +664,32 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.7.0", "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" @@ -771,6 +804,17 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" @@ -6116,6 +6160,42 @@ ethers@^5.0.13: "@ethersproject/web" "5.7.0" "@ethersproject/wordlists" "5.7.0" +ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + etherscan-api@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/etherscan-api/-/etherscan-api-10.2.0.tgz#62f53dfadcea4bc3994a0a74ae0211a3a9b8da88" From 7f34515ccd1f7b1be15ac12aab2a87fb75aa83c5 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 18:34:29 +0100 Subject: [PATCH 42/52] po: add networkitems Signed-off-by: Jakub Mucha --- pages/metamask/main-page.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/metamask/main-page.js b/pages/metamask/main-page.js index 92c45ae37..0e45cfdde 100644 --- a/pages/metamask/main-page.js +++ b/pages/metamask/main-page.js @@ -4,6 +4,10 @@ const networkSwitcher = { networkName: `${networkSwitcherButtonSelector} .typography`, dropdownMenu: '[data-testid="network-droppo"]', dropdownMenuItem: `[data-testid="network-droppo"] .dropdown-menu-item`, + mainnetNetworkItem: `[data-testid="network-droppo"] [data-testid="mainnet-network-item"]`, + goerliNetworkItem: `[data-testid="network-droppo"] [data-testid="goerli-network-item"]`, + sepoliaNetworkItem: `[data-testid="network-droppo"] [data-testid="sepolia-network-item"]`, + localhostNetworkItem: `[data-testid="network-droppo"] [data-testid="Localhost 8545-network-item"]`, networkButton: number => `[data-testid="network-droppo"] .dropdown-menu-item:nth-child(${ 3 + number From 7050dbfc89dc057113b8f02e5db04b4c87949edb Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 18:36:38 +0100 Subject: [PATCH 43/52] feat: update setnetwork Signed-off-by: Jakub Mucha --- commands/metamask.js | 30 ++++++++++++++++++++++++------ helpers.js | 27 ++++++++++++++------------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index fd17b4d37..35df56101 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -368,10 +368,28 @@ module.exports = { await playwright.waitAndClick(mainPageElements.networkSwitcher.button); if (typeof network === 'string') { network = network.toLowerCase(); - await playwright.waitAndClickByText( - mainPageElements.networkSwitcher.dropdownMenuItem, - network, - ); + if (network === 'mainnet') { + await playwright.waitAndClick( + mainPageElements.networkSwitcher.mainnetNetworkItem, + ); + } else if (network === 'goerli') { + await playwright.waitAndClick( + mainPageElements.networkSwitcher.goerliNetworkItem, + ); + } else if (network === 'sepolia') { + await playwright.waitAndClick( + mainPageElements.networkSwitcher.sepoliaNetworkItem, + ); + } else if (network === 'localhost') { + await playwright.waitAndClick( + mainPageElements.networkSwitcher.localhostNetworkItem, + ); + } else { + await playwright.waitAndClickByText( + mainPageElements.networkSwitcher.dropdownMenuItem, + network, + ); + } await playwright.waitForText( mainPageElements.networkSwitcher.networkName, network, @@ -387,7 +405,7 @@ module.exports = { network.networkName, ); } - setNetwork(network); + await setNetwork(network); await switchToCypressIfNotActive(); return true; }, @@ -445,7 +463,7 @@ module.exports = { }, ); await module.exports.closePopupAndTooltips(); - setNetwork(network); + await setNetwork(network); await playwright.waitForText( mainPageElements.networkSwitcher.networkName, network.networkName, diff --git a/helpers.js b/helpers.js index 93c0c9660..abe060e1d 100644 --- a/helpers.js +++ b/helpers.js @@ -2,6 +2,7 @@ const log = require('debug')('synpress:helpers'); const axios = require('axios'); const fs = require('fs').promises; const path = require('path'); +const { ethers } = require('ethers'); const download = require('download'); const packageJson = require('./package.json'); @@ -10,7 +11,7 @@ let networkId = 1; let isTestnet = false; module.exports = { - setNetwork: network => { + setNetwork: async network => { typeof network === 'object' ? log(`Setting network to ${JSON.stringify(network)}`) : log(`Setting network to ${network}`); @@ -19,22 +20,22 @@ module.exports = { networkName = 'mainnet'; networkId = 1; isTestnet = false; - } else if (network === 'ropsten') { - networkName = 'ropsten'; - networkId = 3; - isTestnet = true; - } else if (network === 'kovan') { - networkName = 'kovan'; - networkId = 42; - isTestnet = true; - } else if (network === 'rinkeby') { - networkName = 'rinkeby'; - networkId = 4; - isTestnet = true; } else if (network === 'goerli') { networkName = 'goerli'; networkId = 5; isTestnet = true; + } else if (network === 'sepolia') { + networkName = 'sepolia'; + networkId = 11155111; + isTestnet = true; + } else if (network === 'localhost') { + const provider = new ethers.providers.JsonRpcProvider( + 'http://127.0.0.1:8545', + ); + const { chainId, name } = await provider.getNetwork(); + networkName = name; + networkId = chainId; + isTestnet = true; } else if (typeof network === 'object') { networkName = network.networkName; networkId = Number(network.chainId); From a84d455f246553adb84b2c754c2f16341b806a0f Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 19:47:06 +0100 Subject: [PATCH 44/52] fixes: selectors, popups, pages Signed-off-by: Jakub Mucha --- commands/metamask.js | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/commands/metamask.js b/commands/metamask.js index 35df56101..0875c6750 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -167,14 +167,14 @@ module.exports = { if ( (await playwright .metamaskWindow() - .$(mainPageElements.tippyTooltip.container)) !== null + .$(mainPageElements.tippyTooltip.closeButton)) !== null ) { await playwright.waitAndClick(mainPageElements.tippyTooltip.closeButton); } if ( (await playwright .metamaskWindow() - .$(mainPageElements.actionableMessage.container)) !== null + .$(mainPageElements.actionableMessage.closeButton)) !== null ) { await playwright.waitAndClick( mainPageElements.actionableMessage.closeButton, @@ -322,6 +322,7 @@ module.exports = { waitForEvent: 'navi', }, ); + await module.exports.closePopupAndTooltips(); await switchToCypressIfNotActive(); return true; }, @@ -338,6 +339,7 @@ module.exports = { ); } await playwright.waitAndClick(mainPageElements.createAccount.createButton); + await module.exports.closePopupAndTooltips(); await switchToCypressIfNotActive(); return true; }, @@ -360,6 +362,7 @@ module.exports = { accountNameOrAccountNumber, ); } + await module.exports.closePopupAndTooltips(); await switchToCypressIfNotActive(); return true; }, @@ -405,6 +408,7 @@ module.exports = { network.networkName, ); } + await module.exports.closePopupAndTooltips(); await setNetwork(network); await switchToCypressIfNotActive(); return true; @@ -613,11 +617,12 @@ module.exports = { confirmSignatureRequest: async () => { const notificationPage = await playwright.switchToMetamaskNotification(); const scrollDownButton = await playwright - .metamaskWindow() + .metamaskNotificationWindow() .$(signaturePageElements.signatureRequestScrollDownButton); if (scrollDownButton) { await playwright.waitAndClick( signaturePageElements.signatureRequestScrollDownButton, + notificationPage, ); } playwright.waitAndClick( @@ -630,11 +635,12 @@ module.exports = { confirmDataSignatureRequest: async () => { const notificationPage = await playwright.switchToMetamaskNotification(); const scrollDownButton = await playwright - .metamaskWindow() + .metamaskNotificationWindow() .$(signaturePageElements.signatureRequestScrollDownButton); if (scrollDownButton) { await playwright.waitAndClick( signaturePageElements.signatureRequestScrollDownButton, + notificationPage, ); } await playwright.waitAndClick( @@ -704,10 +710,19 @@ module.exports = { const notificationPage = await playwright.switchToMetamaskNotification(); if (gasConfig) { - await playwright.waitAndClick(confirmPageElements.editGasFeeButton); - await playwright.waitAndClick(confirmPageElements.gasOptionCustomButton); + await playwright.waitAndClick( + confirmPageElements.editGasFeeButton, + notificationPage, + ); + await playwright.waitAndClick( + confirmPageElements.gasOptionCustomButton, + notificationPage, + ); if (gasConfig.gasLimit) { - await playwright.waitAndClick(confirmPageElements.editGasLimitButton); + await playwright.waitAndClick( + confirmPageElements.editGasLimitButton, + notificationPage, + ); await playwright.waitAndSetValue( gasConfig.gasLimit.toString(), confirmPageElements.gasLimitInput, @@ -728,7 +743,10 @@ module.exports = { notificationPage, ); } - await playwright.waitAndClick(confirmPageElements.saveCustomGasFeeButton); + await playwright.waitAndClick( + confirmPageElements.saveCustomGasFeeButton, + notificationPage, + ); } await playwright.waitAndClick( From 2a02d3367f08c91d1a26931f9475ef88cf1804c4 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 19:51:48 +0100 Subject: [PATCH 45/52] e2e: update wallet addresses Signed-off-by: Jakub Mucha --- tests/e2e/specs/metamask-spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index e768f95f7..78acb5743 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -30,7 +30,7 @@ describe('Metamask', () => { cy.get('#network').contains('5'); cy.get('#chainId').contains('0x5'); cy.get('#accounts').contains( - '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', + '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', ); }); it(`getNetwork should return network by default`, () => { @@ -113,7 +113,7 @@ describe('Metamask', () => { it(`getMetamaskWalletAddress should return wallet address of current metamask account`, () => { cy.getMetamaskWalletAddress().then(address => { expect(address).to.be.equal( - '0xa0ee7a142d267c1f36714e4a8f75612f20a79720', + '0x70997970C51812dc3A010C7d01b50e0d17dc79C8', ); }); }); @@ -125,7 +125,7 @@ describe('Metamask', () => { it(`getMetamaskWalletAddress should return valid wallet address of metamask account after changing an account`, () => { cy.getMetamaskWalletAddress().then(address => { expect(address).to.be.equal( - '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', + '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', ); }); }); @@ -163,7 +163,7 @@ describe('Metamask', () => { }); cy.get('#personalSignVerify').click(); cy.get('#personalSignVerifySigUtilResult').contains( - '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', + '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', ); }); it(`confirmMetamaskSignatureRequest should confirm data signature request`, () => { From eda6ebb15012579484a244bb6e9d2634a980092c Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:06:51 +0100 Subject: [PATCH 46/52] e2e: updates related to wallet change Signed-off-by: Jakub Mucha --- tests/e2e/specs/metamask-spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/e2e/specs/metamask-spec.js b/tests/e2e/specs/metamask-spec.js index 78acb5743..51371909d 100644 --- a/tests/e2e/specs/metamask-spec.js +++ b/tests/e2e/specs/metamask-spec.js @@ -30,7 +30,7 @@ describe('Metamask', () => { cy.get('#network').contains('5'); cy.get('#chainId').contains('0x5'); cy.get('#accounts').contains( - '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', + '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', ); }); it(`getNetwork should return network by default`, () => { @@ -163,7 +163,7 @@ describe('Metamask', () => { }); cy.get('#personalSignVerify').click(); cy.get('#personalSignVerifySigUtilResult').contains( - '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', + '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', ); }); it(`confirmMetamaskSignatureRequest should confirm data signature request`, () => { @@ -189,7 +189,7 @@ describe('Metamask', () => { expect(confirmed).to.be.true; }); cy.get('#encryptionKeyDisplay').contains( - 'PF4wuX6QqcIKdCzructa1JlY/LninxRWFdMThIDIJEU=', + 'mtrHp1WHZM9rxF2Ilot9Hie5XmQcKCf7oDQ1DpGkTSI=', ); }); it(`confirmMetamaskDecryptionRequest should confirm request to decrypt message with private key`, () => { From 73607b974d1e1e2970003c9831c404ccca0592c9 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:07:45 +0100 Subject: [PATCH 47/52] chore: trunk upgrade Signed-off-by: Jakub Mucha --- .trunk/trunk.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index faf52383e..a74b4dc96 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -13,21 +13,21 @@ plugins: ref: v0.0.5 uri: https://github.com/trunk-io/plugins cli: - version: 0.18.1-beta + version: 1.0.1 sha256: - darwin_arm64: c25df7ef6d68a2bd8648d93830659d1675043db03d9f49182534f28e417dfda6 - darwin_x86_64: 6a7a4f9c5d0ad7d3d5ea45e6a1cf11a668ea68c36f01ebe31ef95f99560a6824 - linux_x86_64: d875fe70c221d6449a9cd09598ab278133c5513f52dbf6af0fca3161d7a39d46 + darwin_arm64: 364c5c1bca52644369f3a415c67d22db6bbf5c3b036f155ed871e0735c4fb40d + darwin_x86_64: 5c36d503c13dd165f172f48f98405c40872d4c001ad675ad26f052c0e04b28c4 + linux_x86_64: f8e27a2f7650757180457c51db27d35f9c8b99b1098c0d41eaee4cfbbbe2b3d0 lint: enabled: - dotenv-linter@3.2.0 - hadolint@2.10.0 - shellcheck@0.8.0 - shfmt@3.5.0 - - actionlint@1.6.20 - - eslint@8.24.0 + - actionlint@1.6.21 + - eslint@8.26.0 - git-diff-check@SYSTEM - - gitleaks@8.13.0 + - gitleaks@8.15.0 - markdownlint@0.32.2 - prettier@2.7.1 ignore: From 7cc9ec85899ea19f43e2c8aab42a8506991787d3 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:08:17 +0100 Subject: [PATCH 48/52] chore: linting Signed-off-by: Jakub Mucha --- README.md | 4 ++-- commands/metamask.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a30cefd3d..7b188212e 100644 --- a/README.md +++ b/README.md @@ -226,8 +226,8 @@ use `STABLE_MODE=true` (which will introduce delays only between main actions, 300ms by default) / `STABLE_MODE=` or `SLOW_MODE=true` (which will introduce delay between every action, 50ms by default) / `SLOW_MODE=`. -`DEBUG=synpress:*` is very useful while debugging your tests. It enables following -features: +`DEBUG=synpress:*` is very useful while debugging your tests. It enables +following features: - improved logging - [cypress debugger](https://docs.cypress.io/guides/guides/debugging) diff --git a/commands/metamask.js b/commands/metamask.js index 0875c6750..8840bec29 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -775,7 +775,6 @@ module.exports = { return true; }, rejectEncryptionPublicKeyRequest: async () => { - // todo: continue here const notificationPage = await playwright.switchToMetamaskNotification(); await playwright.waitAndClick( encryptionPublicKeyPageElements.rejectEncryptionPublicKeyButton, From 1e1edc1e09b44c6d2815cb1ecaa679ff2b52ea0f Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:11:34 +0100 Subject: [PATCH 49/52] feat: metamask@10.21.0 Signed-off-by: Jakub Mucha --- plugins/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/index.js b/plugins/index.js index e22aaa34c..32e493d6c 100644 --- a/plugins/index.js +++ b/plugins/index.js @@ -36,7 +36,7 @@ module.exports = (on, config) => { if (!process.env.SKIP_METAMASK_INSTALL) { // NOTE: extensions cannot be loaded in headless Chrome const metamaskPath = await helpers.prepareMetamask( - process.env.METAMASK_VERSION || '10.20.0', + process.env.METAMASK_VERSION || '10.21.0', ); arguments_.extensions.push(metamaskPath); } From 26eeae8c16db2743bb6c4945352ff389a329240e Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:11:39 +0100 Subject: [PATCH 50/52] chore: readme update Signed-off-by: Jakub Mucha --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7b188212e..5491be07e 100644 --- a/README.md +++ b/README.md @@ -168,19 +168,18 @@ which runs metamask setup before all tests: - passes welcome page - imports wallet -- changes network (defaults to `kovan`) or creates custom network and changes to - it (depending on your setup) +- changes network (defaults to `goerli`) or creates custom network and changes + to it (depending on your setup) - switches back to Cypress window and starts testing It requires environmental variable called `SECRET_WORDS` to be present in following format => `'word1, word2, etc..'` or private key in an environmental variable called `PRIVATE_KEY`. -To change default network (`kovan`), you can use `NETWORK_NAME` environmental -variable, for example: `NETWORK_NAME=rinkeby`. +To change default network (`goerli`), you can use `NETWORK_NAME` environmental +variable, for example: `NETWORK_NAME=sepolia`. -Available choices are: `mainnet`, `ropsten`, `kovan`, `rinkeby`, `goerli` and -`localhost`. +Available choices are: `mainnet`, `goerli`, `sepolia` and `localhost`. To create and switch to custom network at metamask setup phase, use these: @@ -195,7 +194,7 @@ Metamask version is hardcoded and frequently updated under supervision to avoid a case when e2e tests break because of CSS classes changes in new version, so all you need is to keep synpress updated in your project. However, you can still override metamask with `METAMASK_VERSION` environmental variable, for example: -`METAMASK_VERSION=9.3.0` or `METAMASK_VERSION=latest`. +`METAMASK_VERSION=10.21.0` or `METAMASK_VERSION=latest`. If you don't want to use environmental variables, you can modify [`setupMetamask()`](https://github.com/synthetixio/synpress/blob/dev/support/index.js#L29) From 66badd7e6a4111df9782e161dcc8e014cacca475 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:20:20 +0100 Subject: [PATCH 51/52] po: remove showcustomnetwork Signed-off-by: Jakub Mucha --- pages/metamask/settings-page.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pages/metamask/settings-page.js b/pages/metamask/settings-page.js index ea44fa35f..bcaee5b88 100644 --- a/pages/metamask/settings-page.js +++ b/pages/metamask/settings-page.js @@ -61,15 +61,9 @@ const enhancedGasFeeUIToggleOn = '.settings-page__content-row:nth-child(1) .toggle-button--on'; const enhancedGasFeeUIToggleOff = '.settings-page__content-row:nth-child(1) .toggle-button--off'; -const showCustomNetworkListToggleOn = - '.settings-page__content-row:nth-child(3) .toggle-button--on'; -const showCustomNetworkListToggleOff = - '.settings-page__content-row:nth-child(3) .toggle-button--off'; module.exports.experimentalSettingsPageElements = { enhancedGasFeeUIToggleOn, enhancedGasFeeUIToggleOff, - showCustomNetworkListToggleOn, - showCustomNetworkListToggleOff, }; const nevermindButton = '.modal-container .btn-secondary'; From c7b0566047b8eb3da2ad6486bad408ffdef73437 Mon Sep 17 00:00:00 2001 From: Jakub Mucha Date: Sat, 29 Oct 2022 20:20:34 +0100 Subject: [PATCH 52/52] chore: remove activateShowCustomNetworkList Signed-off-by: Jakub Mucha --- commands/metamask.js | 1 - 1 file changed, 1 deletion(-) diff --git a/commands/metamask.js b/commands/metamask.js index 8840bec29..e488c9ad6 100644 --- a/commands/metamask.js +++ b/commands/metamask.js @@ -991,7 +991,6 @@ async function setupSettings(enableAdvancedSettings) { } await module.exports.goToExperimentalSettings(); await module.exports.activateEnhancedGasFeeUI(true); - await module.exports.activateShowCustomNetworkList(true); await playwright.waitAndClick( settingsPageElements.closeButton, await playwright.metamaskWindow(),