mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-20 16:54:17 +00:00
* ci(playwright): discover plugin frontend specs from node_modules + plugin_packages
Adds two new globs to the Playwright testMatch so any installed
plugin shipping specs at the conventional location is picked up
automatically:
- ../node_modules/ep_*/static/tests/frontend-new/specs/**/*.spec.ts
(covers `pnpm add -w ep_*` workspace installs, e.g. CI's
with-plugins matrix and dev-time pnpm installs)
- plugin_packages/ep_*/static/tests/frontend-new/specs/**/*.spec.ts
(covers admin-UI / live-plugin-manager installs into
src/plugin_packages)
Mirrors the equivalent backend pattern (`mocha ...
../node_modules/ep_*/static/tests/backend/specs/**`) which already
auto-discovers plugin backend specs.
This re-enables coverage that was lost in commit cc80db2d3 (2023-07)
when the legacy in-page jQuery test runner was removed without a
Playwright replacement. Until now plugin frontend tests have been
silently dead: every plugin's CI runs `pnpm run test-ui` but core's
testDir scoped only to `tests/frontend-new/`, so plugin specs at
`static/tests/frontend/specs/test.js` were never executed and their
green badges were misleading. See #7622.
doc/PLUGIN_FRONTEND_TESTS.md documents the new convention, the
import path for shared helpers (ep_etherpad-lite/tests/...), and a
mocha+helper → Playwright translation table for plugin maintainers
who want to migrate.
Existing core test discovery is unchanged (143 tests in 38 files
listed before and after).
Closes #7622.
**Change type:** patch (test infra; no production behavior change).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(playwright): split into per-project testMatch; address Qodo on #7623
Three real Qodo findings on the previous commit, all fixed:
1) test-ui's positional arg `tests/frontend-new/specs` filtered out
plugin spec paths added to testMatch — the very thing the PR was
trying to enable. Drop the positional. Discovery is now driven by
per-project testMatch.
2) The single project-wide testMatch I added excluded
tests/frontend-new/admin-spec, breaking pnpm run test-admin and the
frontend-admin-tests workflow. Split into three projects:
- chromium : core specs + plugin specs
- firefox : core specs + plugin specs
- chromium-admin : admin specs only
test-admin now runs --project=chromium-admin (no positional). Net
coverage unchanged for both workflows.
3) New code re-indented to 2 spaces per .editorconfig.
Discovery verified locally:
--project=chromium → 143 tests in 38 files (core)
--project=firefox → 143 tests in 38 files (core)
--project=chromium-admin → 11 tests in 4 files (admin)
With a plugin spec installed at the conventional path:
--project=chromium → +1 file, +N tests as expected.
**Change type:** patch (test infra; no production behavior change).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
101 lines
3.5 KiB
TypeScript
101 lines
3.5 KiB
TypeScript
import {defineConfig, devices, test} from '@playwright/test';
|
|
|
|
|
|
export const defaultExpectTimeout = process.env.CI ? 20 * 1000 : 5000
|
|
export const defaultTestTimeout = 90 * 1000
|
|
|
|
// Mirror of how tests/backend/specs picks up plugin specs from
|
|
// `../node_modules/ep_*/static/tests/backend/specs/**`. Plugins that
|
|
// ship Playwright frontend tests at the conventional location below
|
|
// are discovered automatically when the plugin is installed alongside
|
|
// core. See doc/PLUGIN_FRONTEND_TESTS.md.
|
|
const CORE_SPECS = 'tests/frontend-new/specs/**/*.spec.ts';
|
|
const ADMIN_SPECS = 'tests/frontend-new/admin-spec/**/*.spec.ts';
|
|
const PLUGIN_SPECS = [
|
|
// Plugins installed via `pnpm add -w ep_*` (CI / dev workspace).
|
|
'../node_modules/ep_*/static/tests/frontend-new/specs/**/*.spec.ts',
|
|
// Plugins installed via the admin UI / live-plugin-manager land
|
|
// here instead of node_modules.
|
|
'plugin_packages/ep_*/static/tests/frontend-new/specs/**/*.spec.ts',
|
|
];
|
|
const FRONTEND_MATCH = [CORE_SPECS, ...PLUGIN_SPECS];
|
|
|
|
/**
|
|
* See https://playwright.dev/docs/test-configuration.
|
|
*/
|
|
export default defineConfig({
|
|
// testDir is project-root for src/ so the testMatch globs reach both
|
|
// tests under src/tests/... and node_modules/ep_*/... above src/.
|
|
testDir: '.',
|
|
/* Run tests in files in parallel */
|
|
fullyParallel: true,
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: process.env.CI ? [['github'], ['list']] : 'html',
|
|
expect: { timeout: defaultExpectTimeout },
|
|
timeout: defaultTestTimeout,
|
|
retries: process.env.CI ? 2 : 0,
|
|
workers: 2,
|
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
use: {
|
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
// baseURL: 'http://127.0.0.1:3000',
|
|
baseURL: "localhost:9001",
|
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
trace: 'on-first-retry',
|
|
video: 'on-first-retry',
|
|
},
|
|
|
|
/* Configure projects for major browsers */
|
|
projects: [
|
|
// Frontend / pad-editor specs (core + plugins).
|
|
{
|
|
name: 'chromium',
|
|
testMatch: FRONTEND_MATCH,
|
|
use: { ...devices['Desktop Chrome'] },
|
|
},
|
|
{
|
|
name: 'firefox',
|
|
testMatch: FRONTEND_MATCH,
|
|
use: { ...devices['Desktop Firefox'] },
|
|
},
|
|
|
|
// Admin-UI specs are isolated from the regular frontend run so the
|
|
// existing test-admin script + frontend-admin-tests workflow keep
|
|
// their own scope (different fixtures, different server state).
|
|
{
|
|
name: 'chromium-admin',
|
|
testMatch: ADMIN_SPECS,
|
|
use: { ...devices['Desktop Chrome'] },
|
|
},
|
|
// Webkit dropped from CI — see https://github.com/ether/etherpad-lite/issues/XXXX
|
|
// Kept chromium and firefox as the supported browsers.
|
|
|
|
/* Test against mobile viewports. */
|
|
// {
|
|
// name: 'Mobile Chrome',
|
|
// use: { ...devices['Pixel 5'] },
|
|
// },
|
|
// {
|
|
// name: 'Mobile Safari',
|
|
// use: { ...devices['iPhone 12'] },
|
|
// },
|
|
|
|
/* Test against branded browsers. */
|
|
// {
|
|
// name: 'Microsoft Edge',
|
|
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
|
|
// },
|
|
// {
|
|
// name: 'Google Chrome',
|
|
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
|
|
// },
|
|
],
|
|
|
|
/* Run your local dev server before starting the tests */
|
|
// webServer: {
|
|
// command: 'npm run start',
|
|
// url: 'http://127.0.0.1:3000',
|
|
// reuseExistingServer: !process.env.CI,
|
|
// },
|
|
});
|