test(e2e): update suite for shipped features + gate Chromium-only perms
The running test container had been built from an older tree; rebuilding it to pick up current app code surfaced several tests that predated shipped security/UX features: - file-upload-attacks / rate-limit: assert the magic-byte rejection wording and upload a real decodable JPEG (a zero-buffer is now rejected at the boundary). - ddos: open SSE via the single-use /stream/ticket flow, not the dead ?token=. - recover-page / join: the PIN field auto-submits on the 4th digit, so don't race an explicit submit click against the ensuing navigation. - gestures-doubletap / sheet-escape: target the lightbox by aria-labelledby and anchor the radio accessible-name match at the start (gated dialog semantics). playwright.config: camera/mic/clipboard are Chromium-only permissions (they threw "Unknown permission: camera" on firefox/webkit and failed the test at context creation); grant them per-Chromium-project. firefox-android drops the unsupported isMobile flag. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,12 @@ import { defineConfig, devices } from '@playwright/test';
|
||||
* engine-level divergences. The rest of the suite only runs against
|
||||
* `chromium-desktop` to keep the wall-clock reasonable.
|
||||
*/
|
||||
// camera/microphone/clipboard are Chromium-only permissions; passing them to
|
||||
// firefox/webkit projects throws "Unknown permission: camera" and fails the
|
||||
// whole test before it runs. Granted per-Chromium-project below instead of in
|
||||
// the global `use` block.
|
||||
const CHROMIUM_PERMISSIONS = ['camera', 'microphone', 'clipboard-read', 'clipboard-write'];
|
||||
|
||||
export default defineConfig({
|
||||
testDir: './specs',
|
||||
outputDir: './test-results',
|
||||
@@ -35,9 +41,8 @@ export default defineConfig({
|
||||
video: 'retain-on-failure',
|
||||
actionTimeout: 10_000,
|
||||
navigationTimeout: 30_000,
|
||||
// Camera/mic permissions granted by default; the fake-media launch args
|
||||
// (set per-project below for Chromium) supply the actual stream.
|
||||
permissions: ['camera', 'microphone', 'clipboard-read', 'clipboard-write'],
|
||||
// No camera/mic/clipboard here — those are Chromium-only and are granted on
|
||||
// the Chromium projects below (see CHROMIUM_PERMISSIONS).
|
||||
},
|
||||
|
||||
projects: [
|
||||
@@ -49,6 +54,7 @@ export default defineConfig({
|
||||
testIgnore: ['**/09-mobile/**'],
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
permissions: CHROMIUM_PERMISSIONS,
|
||||
launchOptions: {
|
||||
args: [
|
||||
'--use-fake-ui-for-media-stream',
|
||||
@@ -68,13 +74,13 @@ export default defineConfig({
|
||||
{
|
||||
name: 'chromium-mobile',
|
||||
testMatch: ['**/09-mobile/**/*.spec.ts'],
|
||||
use: { ...devices['Pixel 7'] },
|
||||
use: { ...devices['Pixel 7'], permissions: CHROMIUM_PERMISSIONS },
|
||||
},
|
||||
|
||||
// ── Mobile UA smoke matrix (runs only @smoke specs in CI) ────────────
|
||||
{
|
||||
name: 'chromium-pixel7',
|
||||
use: { ...devices['Pixel 7'] },
|
||||
use: { ...devices['Pixel 7'], permissions: CHROMIUM_PERMISSIONS },
|
||||
grep: /@smoke/,
|
||||
},
|
||||
{
|
||||
@@ -84,6 +90,7 @@ export default defineConfig({
|
||||
viewport: { width: 360, height: 780 },
|
||||
userAgent:
|
||||
'Mozilla/5.0 (Linux; Android 14; SM-S911B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36',
|
||||
permissions: CHROMIUM_PERMISSIONS,
|
||||
},
|
||||
grep: /@smoke/,
|
||||
},
|
||||
@@ -94,6 +101,7 @@ export default defineConfig({
|
||||
viewport: { width: 360, height: 780 },
|
||||
userAgent:
|
||||
'Mozilla/5.0 (Linux; Android 14; SM-S911B) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/24.0 Chrome/124.0.0.0 Mobile Safari/537.36',
|
||||
permissions: CHROMIUM_PERMISSIONS,
|
||||
},
|
||||
grep: /@smoke/,
|
||||
},
|
||||
@@ -103,6 +111,7 @@ export default defineConfig({
|
||||
...devices['Pixel 7'],
|
||||
userAgent:
|
||||
'Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36 EdgA/124.0.0.0',
|
||||
permissions: CHROMIUM_PERMISSIONS,
|
||||
},
|
||||
grep: /@smoke/,
|
||||
},
|
||||
@@ -125,6 +134,9 @@ export default defineConfig({
|
||||
use: {
|
||||
...devices['Pixel 7'],
|
||||
defaultBrowserType: 'firefox',
|
||||
// Firefox rejects `isMobile` (Chromium-only). Keep the phone viewport +
|
||||
// Android UA for coverage, but drop the unsupported flag.
|
||||
isMobile: false,
|
||||
userAgent:
|
||||
'Mozilla/5.0 (Android 14; Mobile; rv:124.0) Gecko/124.0 Firefox/124.0',
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user