const { strict: assert } = require('assert'); const FixtureBuilder = require('../fixture-builder'); const { withFixtures, openDapp, defaultGanacheOptions, assertAccountBalanceForDOM, SERVICE_WORKER_URL, regularDelayMs, WALLET_PASSWORD, unlockWallet, terminateServiceWorker, } = require('../helpers'); const { setupPhishingDetectionMocks, BlockProvider, } = require('../tests/phishing-controller/helpers'); describe('Phishing warning page', function () { const driverOptions = { openDevToolsForTabs: true }; it('should restore the transaction when service worker restarts', async function () { let windowHandles; await withFixtures( { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.title, driverOptions, testSpecificMock: async (mockServer) => { return setupPhishingDetectionMocks(mockServer, { blockProvider: BlockProvider.MetaMask, blocklist: ['127.0.0.1'], }); }, dapp: true, }, async ({ driver, ganacheServer }) => { await driver.navigate(); await unlockWallet(driver, WALLET_PASSWORD); // DAPP is detected as phishing page await openDapp(driver); const phishingPageHeader = await driver.findElements({ text: 'Deceptive site ahead', tag: 'h1', }); assert.ok(phishingPageHeader.length, 1); // Restart service worker await driver.openNewPage(SERVICE_WORKER_URL); await terminateServiceWorker(driver); await driver.delay(regularDelayMs); // wait until extension is reloaded windowHandles = await driver.getAllWindowHandles(); const extension = windowHandles[0]; await driver.switchToWindow(extension); await assertAccountBalanceForDOM(driver, ganacheServer); // Open the dapp site and extension detect it as phishing warning page await openDapp(driver); // - extension, dapp, service worker and new dapp await driver.waitUntilXWindowHandles(4); const newPhishingPageHeader = await driver.findElements({ text: 'Deceptive site ahead', tag: 'h1', }); assert.ok(newPhishingPageHeader.length, 1); }, ); }); });