UNPKG

@cliqz/autoconsent

Version:

This is a library of rules for navigating through common consent popups on the web. These rules can be run in a Firefox webextension, or in a puppeteer orchestrated headless browser. Using these rules, opt-in and opt-out options can be selected automatica

62 lines (55 loc) 2.04 kB
import fs from 'fs/promises'; import path from 'path'; import { test, expect } from '@playwright/test'; import * as autoconsent from '../dist/autoconsent.puppet'; import * as extraRules from '../rules/rules.json'; const consentomatic = extraRules.consentomatic; const rules = [ ...autoconsent.rules, ...Object.keys(consentomatic).map(name => new autoconsent.ConsentOMaticCMP(`com_${name}`, consentomatic[name])), ...extraRules.autoconsent.map(spec => autoconsent.createAutoCMP(spec)), ]; const screenshotDir = `./screenshots`; const testRegion = (process.env.REGION || 'NA').trim(); async function ensureScreenshotDir() { try { await fs.stat(screenshotDir); } catch(e) { await fs.mkdir(screenshotDir); } } type TestOptions = { testOptOut: boolean; testSelfTest: boolean; skipRegions?: string[]; } const defaultOptions: TestOptions = { testOptOut: true, testSelfTest: true, skipRegions: [], } export function generateTest(url: string, expectedCmp: string, options: TestOptions = { testOptOut: true, testSelfTest: true }) { test(`${url.split('://')[1]} .${testRegion}`, async ({ page }) => { if (options.skipRegions && options.skipRegions.indexOf(testRegion) !== -1) { test.skip(); } await page.goto(url, { waitUntil: 'commit' }); const tab = autoconsent.attachToPage(page, url, rules, 20); await tab.checked; expect(tab.getCMPName()).toBe(expectedCmp); expect(await tab.isPopupOpen(10, 100)).toBeTruthy(); if (options.testOptOut) { expect(await tab.doOptOut()).toBeTruthy(); } if (options.testSelfTest) { expect(await tab.testOptOutWorked()).toBeTruthy(); } }); } export default function generateCMPTests(cmp: string, sites: string[], options: Partial<TestOptions> = {}) { test.describe(cmp, () => { sites.forEach((url) => { generateTest(url, cmp, Object.assign({}, defaultOptions, options)); }); }) }