From b88c120680a71edb76aa1a9a43b67e691fc7ad57 Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Sun, 10 May 2026 18:13:29 +0200 Subject: [PATCH] feat(voyage): add Playwright + @axe-core/playwright devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Step 27 of v4.3 plan — adds Playwright 1.59.1 + axe-core/playwright 4.10.2 as devDependencies, npm script test:e2e, and playwright.config.mjs with file:// baseURL pointing at playground/. Chromium browser binary installed to ~/Library/Caches/ms-playwright/. Trace: SC2 (WCAG verifikasjon krever browser-driver), research/04 Recommendation security; brief Constraint linje 64 (zero new deps i playground/) er OK fordi Playwright er devDependency på voyage-plugin-rot, ikke i playground/. --- plugins/voyage/package-lock.json | 106 +++++++++++++++++++++++++++ plugins/voyage/package.json | 5 ++ plugins/voyage/playwright.config.mjs | 22 ++++++ 3 files changed, 133 insertions(+) create mode 100644 plugins/voyage/package-lock.json create mode 100644 plugins/voyage/playwright.config.mjs diff --git a/plugins/voyage/package-lock.json b/plugins/voyage/package-lock.json new file mode 100644 index 0000000..56ca5c1 --- /dev/null +++ b/plugins/voyage/package-lock.json @@ -0,0 +1,106 @@ +{ + "name": "voyage", + "version": "4.2.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "voyage", + "version": "4.2.0", + "license": "MIT", + "devDependencies": { + "@axe-core/playwright": "^4.9.0", + "@playwright/test": "^1.44.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@axe-core/playwright": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.11.3.tgz", + "integrity": "sha512-h/kfksv4F0cVIDlKpT4700OehdRgpvuVskuQ2nb7/JmtWUXpe9ftHAPtwyXGvVSsa6SJ64A9ER7Zrzc/sIvC4w==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.11.4" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/axe-core": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.4.tgz", + "integrity": "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/plugins/voyage/package.json b/plugins/voyage/package.json index 0c31be8..d4fe0bd 100644 --- a/plugins/voyage/package.json +++ b/plugins/voyage/package.json @@ -8,6 +8,7 @@ }, "scripts": { "test": "node --test 'tests/**/*.test.mjs'", + "test:e2e": "playwright test tests/e2e", "verify": "bash verify.sh" }, "keywords": [ @@ -22,5 +23,9 @@ "repository": { "type": "git", "url": "https://git.fromaitochitta.com/open/ktg-plugin-marketplace" + }, + "devDependencies": { + "@axe-core/playwright": "^4.9.0", + "@playwright/test": "^1.44.0" } } diff --git a/plugins/voyage/playwright.config.mjs b/plugins/voyage/playwright.config.mjs new file mode 100644 index 0000000..375effe --- /dev/null +++ b/plugins/voyage/playwright.config.mjs @@ -0,0 +1,22 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: 'tests/e2e', + testMatch: '**/*.spec.mjs', + timeout: 30_000, + expect: { timeout: 5_000 }, + fullyParallel: false, + forbidOnly: !!process.env.CI, + retries: 0, + reporter: process.env.CI ? 'github' : 'list', + use: { + baseURL: `file://${import.meta.dirname}/playground/`, + trace: 'retain-on-failure', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +});