const { strict: assert } = require('assert'); const { Browser } = require('selenium-webdriver'); const { getGlobalProperties, testIntrinsic, } = require('../../helpers/protect-intrinsics-helpers'); const { convertToHexValue, withFixtures } = require('../helpers'); const { PAGES } = require('../webdriver/driver'); const isFirefox = process.env.SELENIUM_BROWSER === Browser.FIREFOX; /** * This script iterates over all named intrinsics and tests that they are locked * down per ses/lockdown. * * We set globalThis to window in Firefox because the test fails otherwise. * We believe this is due to some Selenium-related shenanigans. In the browser, * this behavior is not a problem. */ const lockdownTestScript = ` ${isFirefox ? 'globalThis = window;' : ''} const assert = { equal: (value, comparison, message) => { if (value !== comparison) { throw new Error(message || 'not equal'); } }, ok: (value, message) => { if (!value) { throw new Error(message || 'not ok'); } }, }; ${getGlobalProperties.toString()} ${testIntrinsic.toString()} try { getGlobalProperties().forEach((propertyName) => { console.log('Testing intrinsic:', propertyName); testIntrinsic(propertyName); }) console.log('Lockdown test successful!'); return true; } catch (error) { console.log('Lockdown test failed.', error); return false; } `; describe('lockdown', function () { const ganacheOptions = { accounts: [ { secretKey: '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', balance: convertToHexValue(25000000000000000000), }, ], }; it('the UI and background environments are locked down', async function () { await withFixtures( { // The fixtures used here is arbitrary. Any fixture would do. fixtures: 'imported-account', ganacheOptions, title: this.test.title, }, async ({ driver }) => { await driver.navigate(PAGES.HOME); assert.equal( await driver.executeScript(lockdownTestScript), true, 'The UI environment should be locked down.', ); await driver.navigate(PAGES.BACKGROUND); assert.equal( await driver.executeScript(lockdownTestScript), true, 'The background environment should be locked down.', ); }, ); }); });