diff --git a/test/e2e/fixtures/custom-rpc/state.json b/test/e2e/fixtures/custom-rpc/state.json new file mode 100644 index 000000000..6954fec38 --- /dev/null +++ b/test/e2e/fixtures/custom-rpc/state.json @@ -0,0 +1,150 @@ +{ + "data": { + "AppStateController": { + "mkrMigrationReminderTimestamp": null + }, + "CachedBalancesController": { + "cachedBalances": { + "4": {} + } + }, + "CurrencyController": { + "conversionDate": 1575697244.188, + "conversionRate": 149.61, + "currentCurrency": "usd", + "nativeCurrency": "ETH" + }, + "IncomingTransactionsController": { + "incomingTransactions": {}, + "incomingTxLastFetchedBlocksByNetwork": { + "goerli": null, + "kovan": null, + "mainnet": null, + "rinkeby": 5570536 + } + }, + "KeyringController": { + "vault": "{\"data\":\"s6TpYjlUNsn7ifhEFTkuDGBUM1GyOlPrim7JSjtfIxgTt8/6MiXgiR/CtFfR4dWW2xhq85/NGIBYEeWrZThGdKGarBzeIqBfLFhw9n509jprzJ0zc2Rf+9HVFGLw+xxC4xPxgCS0IIWeAJQ+XtGcHmn0UZXriXm8Ja4kdlow6SWinB7sr/WM3R0+frYs4WgllkwggDf2/Tv6VHygvLnhtzp6hIJFyTjh+l/KnyJTyZW1TkZhDaNDzX3SCOHT\",\"iv\":\"FbeHDAW5afeWNORfNJBR0Q==\",\"salt\":\"TxZ+WbCW6891C9LK/hbMAoUsSEW1E8pyGLVBU6x5KR8=\"}" + }, + "NetworkController": { + "network": "1337", + "provider": { + "nickname": "Localhost 8545", + "rpcUrl": "http://localhost:8545", + "chainId": "0x539", + "ticker": "ETH", + "type": "rpc" + } + }, + "NotificationController": { + "notifications": { + "1": { + "isShown": true + }, + "2": { + "isShown": true + }, + "3": { + "isShown": true + } + } + }, + "OnboardingController": { + "onboardingTabs": {}, + "seedPhraseBackedUp": false + }, + "PermissionsMetadata": { + "domainMetadata": { + "metamask.github.io": { + "icon": null, + "name": "M E T A M A S K M E S H T E S T" + } + }, + "permissionsHistory": {}, + "permissionsLog": [ + { + "id": 746677923, + "method": "eth_accounts", + "methodType": "restricted", + "origin": "metamask.github.io", + "request": { + "id": 746677923, + "jsonrpc": "2.0", + "method": "eth_accounts", + "origin": "metamask.github.io", + "params": [] + }, + "requestTime": 1575697241368, + "response": { + "id": 746677923, + "jsonrpc": "2.0", + "result": [] + }, + "responseTime": 1575697241370, + "success": true + } + ] + }, + "PreferencesController": { + "frequentRpcListDetail": [ + { + "rpcUrl": "http://127.0.0.1:8545/1", + "chainId": "0x539", + "ticker": "ETH", + "nickname": "http://127.0.0.1:8545/1", + "rpcPrefs": {} + }, + { + "rpcUrl": "http://127.0.0.1:8545/2", + "chainId": "0x539", + "ticker": "ETH", + "nickname": "http://127.0.0.1:8545/2", + "rpcPrefs": {} + } + ], + "accountTokens": { + "0x5cfe73b6021e818b776b421b1c4db2474086a7e1": { + "rinkeby": [], + "ropsten": [] + } + }, + "assetImages": {}, + "completedOnboarding": true, + "currentLocale": "en", + "featureFlags": { + "showIncomingTransactions": true, + "transactionTime": false + }, + "firstTimeFlowType": "create", + "forgottenPassword": false, + "identities": { + "0x5cfe73b6021e818b776b421b1c4db2474086a7e1": { + "address": "0x5cfe73b6021e818b776b421b1c4db2474086a7e1", + "name": "Account 1" + } + }, + "knownMethodData": {}, + "lostIdentities": {}, + "metaMetricsId": null, + "metaMetricsSendCount": 0, + "participateInMetaMetrics": false, + "preferences": { + "useNativeCurrencyAsPrimaryCurrency": true + }, + "selectedAddress": "0x5cfe73b6021e818b776b421b1c4db2474086a7e1", + "suggestedTokens": {}, + "tokens": [], + "useBlockie": false, + "useNonceField": false, + "usePhishDetect": true + }, + "config": {}, + "firstTimeInfo": { + "date": 1575697234195, + "version": "7.7.0" + } + }, + "meta": { + "version": 40 + } +} diff --git a/test/e2e/metamask-ui.spec.js b/test/e2e/metamask-ui.spec.js index 92390f33f..8a8fcbf21 100644 --- a/test/e2e/metamask-ui.spec.js +++ b/test/e2e/metamask-ui.spec.js @@ -1557,110 +1557,4 @@ describe('MetaMask', function () { await driver.delay(regularDelayMs); }); }); - - describe('Stores custom RPC history', function () { - it(`creates first custom RPC entry`, async function () { - const rpcUrl = 'http://127.0.0.1:8545/1'; - const chainId = '0x539'; // Ganache default, decimal 1337 - - await driver.clickElement('.network-display'); - await driver.delay(regularDelayMs); - - await driver.clickElement({ text: 'Custom RPC', tag: 'span' }); - await driver.delay(regularDelayMs); - - await driver.findElement('.settings-page__sub-header-text'); - - const customRpcInputs = await driver.findElements('input[type="text"]'); - const rpcUrlInput = customRpcInputs[1]; - const chainIdInput = customRpcInputs[2]; - - await rpcUrlInput.clear(); - await rpcUrlInput.sendKeys(rpcUrl); - - await chainIdInput.clear(); - await chainIdInput.sendKeys(chainId); - - await driver.clickElement('.network-form__footer .btn-secondary'); - await driver.findElement({ text: rpcUrl, tag: 'div' }); - }); - - it(`creates second custom RPC entry`, async function () { - const rpcUrl = 'http://127.0.0.1:8545/2'; - const chainId = '0x539'; // Ganache default, decimal 1337 - - await driver.clickElement('.network-display'); - await driver.delay(regularDelayMs); - - await driver.clickElement({ text: 'Custom RPC', tag: 'span' }); - await driver.delay(regularDelayMs); - - await driver.findElement('.settings-page__sub-header-text'); - - const customRpcInputs = await driver.findElements('input[type="text"]'); - const rpcUrlInput = customRpcInputs[1]; - const chainIdInput = customRpcInputs[2]; - - await rpcUrlInput.clear(); - await rpcUrlInput.sendKeys(rpcUrl); - - await chainIdInput.clear(); - await chainIdInput.sendKeys(chainId); - - await driver.clickElement('.network-form__footer .btn-secondary'); - await driver.findElement({ text: rpcUrl, tag: 'div' }); - }); - - it('selects another provider', async function () { - await driver.clickElement('.network-display'); - await driver.delay(regularDelayMs); - - await driver.clickElement({ text: 'Ethereum Mainnet', tag: 'span' }); - await driver.delay(largeDelayMs * 2); - }); - - it('finds all recent RPCs in history', async function () { - await driver.clickElement('.network-display'); - await driver.delay(regularDelayMs); - - // only recent 3 are found and in correct order (most recent at the top) - const customRpcs = await driver.findElements({ - text: 'http://127.0.0.1:8545/', - tag: 'span', - }); - - // click Mainnet to dismiss network dropdown - await driver.clickElement({ text: 'Ethereum Mainnet', tag: 'span' }); - - assert.equal(customRpcs.length, 2); - }); - - it('deletes a custom RPC', async function () { - const networkListItems = await driver.findClickableElements( - '.networks-tab__networks-list-name', - ); - const lastNetworkListItem = networkListItems[networkListItems.length - 1]; - await lastNetworkListItem.click(); - await driver.delay(100); - - await driver.clickElement('.btn-danger'); - await driver.delay(regularDelayMs); - - // wait for confirm delete modal to be visible - const confirmDeleteModal = await driver.findVisibleElement('span .modal'); - - await driver.clickElement( - '.button.btn-danger.modal-container__footer-button', - ); - - // wait for confirm delete modal to be removed from DOM. - await confirmDeleteModal.waitForElementState('hidden'); - - const newNetworkListItems = await driver.findElements( - '.networks-tab__networks-list-name', - ); - - assert.equal(networkListItems.length - 1, newNetworkListItems.length); - }); - }); }); diff --git a/test/e2e/tests/custom-rpc-history.spec.js b/test/e2e/tests/custom-rpc-history.spec.js new file mode 100644 index 000000000..a827ada2d --- /dev/null +++ b/test/e2e/tests/custom-rpc-history.spec.js @@ -0,0 +1,146 @@ +const { strict: assert } = require('assert'); +const { withFixtures } = require('../helpers'); + +describe('Stores custom RPC history', function () { + const ganacheOptions = { + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: 25000000000000000000, + }, + ], + }; + it(`creates first custom RPC entry`, async function () { + await withFixtures( + { + fixtures: 'imported-account', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + const rpcUrl = 'http://127.0.0.1:8545/1'; + const chainId = '0x539'; // Ganache default, decimal 1337 + + await driver.clickElement('.network-display'); + + await driver.clickElement({ text: 'Custom RPC', tag: 'span' }); + + await driver.findElement('.settings-page__sub-header-text'); + + const customRpcInputs = await driver.findElements('input[type="text"]'); + const rpcUrlInput = customRpcInputs[1]; + const chainIdInput = customRpcInputs[2]; + + await rpcUrlInput.clear(); + await rpcUrlInput.sendKeys(rpcUrl); + + await chainIdInput.clear(); + await chainIdInput.sendKeys(chainId); + + await driver.clickElement('.network-form__footer .btn-secondary'); + await driver.findElement({ text: rpcUrl, tag: 'div' }); + }, + ); + }); + + it('selects another provider', async function () { + await withFixtures( + { + fixtures: 'imported-account', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + await driver.clickElement('.network-display'); + + await driver.clickElement({ text: 'Ethereum Mainnet', tag: 'span' }); + }, + ); + }); + + it('finds all recent RPCs in history', async function () { + await withFixtures( + { + fixtures: 'custom-rpc', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + await driver.clickElement('.network-display'); + + // only recent 3 are found and in correct order (most recent at the top) + const customRpcs = await driver.findElements({ + text: 'http://127.0.0.1:8545/', + tag: 'span', + }); + + // click Mainnet to dismiss network dropdown + await driver.clickElement({ text: 'Ethereum Mainnet', tag: 'span' }); + + assert.equal(customRpcs.length, 2); + }, + ); + }); + + it('deletes a custom RPC', async function () { + await withFixtures( + { + fixtures: 'custom-rpc', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + await driver.clickElement('.network-display'); + + await driver.clickElement({ text: 'Custom RPC', tag: 'span' }); + + // cancel new custom rpc + await driver.clickElement('.network-form__footer button.btn-default'); + + const networkListItems = await driver.findClickableElements( + '.networks-tab__networks-list-name', + ); + const lastNetworkListItem = + networkListItems[networkListItems.length - 1]; + await lastNetworkListItem.click(); + + await driver.clickElement('.btn-danger'); + + // wait for confirm delete modal to be visible + const confirmDeleteModal = await driver.findVisibleElement( + 'span .modal', + ); + + await driver.clickElement( + '.button.btn-danger.modal-container__footer-button', + ); + + // wait for confirm delete modal to be removed from DOM. + await confirmDeleteModal.waitForElementState('hidden'); + + const newNetworkListItems = await driver.findElements( + '.networks-tab__networks-list-name', + ); + + assert.equal(networkListItems.length - 1, newNetworkListItems.length); + }, + ); + }); +});