diff --git a/.circleci/scripts/firefox-install.sh b/.circleci/scripts/firefox-install.sh index 0c3512114..f2f9f284d 100755 --- a/.circleci/scripts/firefox-install.sh +++ b/.circleci/scripts/firefox-install.sh @@ -4,7 +4,7 @@ set -e set -u set -o pipefail -FIREFOX_VERSION='83.0' +FIREFOX_VERSION='102.0' FIREFOX_BINARY="firefox-${FIREFOX_VERSION}.tar.bz2" FIREFOX_BINARY_URL="https://ftp.mozilla.org/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/${FIREFOX_BINARY}" FIREFOX_PATH='/opt/firefox' diff --git a/test/e2e/tests/state-logs.spec.js b/test/e2e/tests/state-logs.spec.js new file mode 100644 index 000000000..6152ff01a --- /dev/null +++ b/test/e2e/tests/state-logs.spec.js @@ -0,0 +1,65 @@ +const { strict: assert } = require('assert'); +const { promises: fs } = require('fs'); +const { convertToHexValue, withFixtures } = require('../helpers'); + +const downloadsFolder = `${process.cwd()}/test-artifacts/downloads`; + +const createDownloadFolder = async () => { + await fs.rm(downloadsFolder, { recursive: true, force: true }); + await fs.mkdir(downloadsFolder, { recursive: true }); +}; + +const stateLogsExist = async () => { + try { + const stateLogs = `${downloadsFolder}/MetaMask State Logs.json`; + await fs.access(stateLogs); + return true; + } catch (e) { + return false; + } +}; + +describe('State logs', function () { + const ganacheOptions = { + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: convertToHexValue(25000000000000000000), + }, + ], + }; + it('should download state logs for the account', async function () { + await withFixtures( + { + fixtures: 'imported-account', + ganacheOptions, + title: this.test.title, + failOnConsoleError: false, + }, + async ({ driver }) => { + await createDownloadFolder(); + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + // Download State Logs + await driver.clickElement('.account-menu__icon'); + await driver.clickElement({ text: 'Settings', tag: 'div' }); + await driver.clickElement({ text: 'Advanced', tag: 'div' }); + await driver.clickElement({ + text: 'Download State Logs', + tag: 'button', + }); + + // Verify download + let fileExists; + await driver.wait(async () => { + fileExists = await stateLogsExist(); + return fileExists === true; + }, 10000); + assert.equal(fileExists, true); + }, + ); + }); +}); diff --git a/test/e2e/webdriver/chrome.js b/test/e2e/webdriver/chrome.js index 13ff00f62..a9df3e646 100644 --- a/test/e2e/webdriver/chrome.js +++ b/test/e2e/webdriver/chrome.js @@ -22,6 +22,9 @@ class ChromeDriver { const options = new chrome.Options().addArguments(args); options.setProxy(proxy.manual({ https: HTTPS_PROXY_HOST })); options.setAcceptInsecureCerts(true); + options.setUserPreferences({ + 'download.default_directory': `${process.cwd()}/test-artifacts/downloads`, + }); const builder = new Builder() .forBrowser('chrome') .setChromeOptions(options); diff --git a/test/e2e/webdriver/firefox.js b/test/e2e/webdriver/firefox.js index 71111df58..3e3dd84cd 100644 --- a/test/e2e/webdriver/firefox.js +++ b/test/e2e/webdriver/firefox.js @@ -40,6 +40,11 @@ class FirefoxDriver { const options = new firefox.Options().setProfile(templateProfile); options.setProxy(proxy.manual({ https: HTTPS_PROXY_HOST })); options.setAcceptInsecureCerts(true); + options.setPreference('browser.download.folderList', 2); + options.setPreference( + 'browser.download.dir', + `${process.cwd()}/test-artifacts/downloads`, + ); const builder = new Builder() .forBrowser('firefox') .setFirefoxOptions(options);