From c357a91ac03e5557cb3627b1fc8624407ef6d218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Luba=C5=84ski?= Date: Fri, 18 Oct 2024 17:08:15 +0200 Subject: [PATCH] chore(tests): Add e2e tests for custom filters (#1964) --- src/background/adblocker.js | 23 +++- src/background/helpers.js | 11 ++ src/pages/settings/components/checkbox.js | 28 +++-- .../settings/components/custom-filters.js | 7 +- src/pages/settings/settings.js | 2 +- src/pages/settings/views/privacy.js | 7 +- src/store/options.js | 18 ++- src/utils/engines.js | 2 +- tests/README.md | 4 +- tests/e2e/page.html | 9 ++ tests/e2e/spec/_onboarding.spec.js | 16 +-- tests/e2e/spec/advanced.spec.js | 104 ++++++++++++++++++ tests/e2e/spec/main.spec.js | 91 +++++---------- tests/e2e/utils.js | 54 +++++++-- tests/e2e/wdio.conf.js | 59 ++++++---- tests/e2e/wdio.update.conf.js | 95 +++++++++------- 16 files changed, 358 insertions(+), 172 deletions(-) create mode 100644 tests/e2e/spec/advanced.spec.js diff --git a/src/background/adblocker.js b/src/background/adblocker.js index 9452ad722..f9e90f368 100644 --- a/src/background/adblocker.js +++ b/src/background/adblocker.js @@ -92,11 +92,20 @@ async function updateEngines() { if (enabledEngines.length) { let updated = false; + // Update engines from the list of enabled engines - for (const id of enabledEngines) { - if (id === engines.CUSTOM_ENGINE) continue; - updated = (await engines.update(id).catch(() => false)) || updated; - } + await Promise.all( + enabledEngines + .filter((id) => id !== engines.CUSTOM_ENGINE) + .map((id) => + engines.update(id).then( + (v) => { + updated = updated || v; + }, + () => {}, + ), + ), + ); // Reload the main engine after all engines are updated if (updated) await reloadMainEngine(); @@ -139,14 +148,16 @@ export const setup = asyncSetup([ } if (options.filtersUpdatedAt < Date.now() - HOUR_IN_MS) { - updateEngines(); + await updateEngines(); } }), observe('experimentalFilters', async (value, lastValue) => { engines.setEnv('env_experimental', value); // Experimental filters changed to enabled - if (lastValue !== undefined && value) updateEngines(); + if (lastValue !== undefined && value) { + await updateEngines(); + } }), ]); diff --git a/src/background/helpers.js b/src/background/helpers.js index 060b824a5..68ff0976c 100644 --- a/src/background/helpers.js +++ b/src/background/helpers.js @@ -9,6 +9,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ +import { idleOptionsObservers } from '/store/options.js'; + chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { switch (msg.action) { case 'getCurrentTab': @@ -31,6 +33,15 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { case 'openPrivateWindowWithUrl': chrome.windows.create({ url: msg.url, incognito: true }); break; + // This is used only by the e2e tests to detect idle state + case 'idleOptionsObservers': { + idleOptionsObservers.then(() => { + sendResponse('done'); + console.info('[helpers] "idleOptionsObservers" response...'); + }); + + return true; + } } return false; diff --git a/src/pages/settings/components/checkbox.js b/src/pages/settings/components/checkbox.js index fe75af8eb..9b7cfa14d 100644 --- a/src/pages/settings/components/checkbox.js +++ b/src/pages/settings/components/checkbox.js @@ -11,26 +11,36 @@ import { html } from 'hybrids'; -function clickSlottedElement(host, event) { - const target = host.render().querySelector('slot').assignedElements()[0]; - if (event.target !== target) { - target.click(); +function clickInput(host, event) { + if (host.input && event.target !== host.input) { + event.stopPropagation(); + host.input.click(); } } export default { disabled: { value: false, reflect: true }, + input: (host) => host.querySelector('input'), + checked: { + value: (host) => host.input?.checked ?? false, + connect: (host, key, invalidate) => { + host.input?.addEventListener('change', invalidate); + return () => { + host.input?.removeEventListener('change', invalidate); + }; + }, + }, render: () => html` -