@futdevpro/dynamo-e2e 1.18.15 → 1.18.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +40 -0
- package/bin/dye2e.js +13 -0
- package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/cli-runner.util.js +17 -0
- package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -1
- package/build/_modules/presets/_collections/ci-timeout.util.d.ts +21 -0
- package/build/_modules/presets/_collections/ci-timeout.util.d.ts.map +1 -0
- package/build/_modules/presets/_collections/ci-timeout.util.js +34 -0
- package/build/_modules/presets/_collections/ci-timeout.util.js.map +1 -0
- package/build/_modules/presets/_collections/global-setup.factory.d.ts +11 -0
- package/build/_modules/presets/_collections/global-setup.factory.d.ts.map +1 -1
- package/build/_modules/presets/_collections/global-setup.factory.js +54 -9
- package/build/_modules/presets/_collections/global-setup.factory.js.map +1 -1
- package/build/_modules/presets/_collections/playwright-config.factory.d.ts.map +1 -1
- package/build/_modules/presets/_collections/playwright-config.factory.js +9 -4
- package/build/_modules/presets/_collections/playwright-config.factory.js.map +1 -1
- package/build/_modules/presets/_models/interfaces/global-setup-options.interface.d.ts +10 -0
- package/build/_modules/presets/_models/interfaces/global-setup-options.interface.d.ts.map +1 -1
- package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.d.ts +20 -1
- package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.d.ts.map +1 -1
- package/build/_modules/presets/index.d.ts +2 -1
- package/build/_modules/presets/index.d.ts.map +1 -1
- package/build/_modules/presets/index.js +6 -1
- package/build/_modules/presets/index.js.map +1 -1
- package/build/_modules/runtime/_collections/notification-detector-page-script.const.d.ts +3 -1
- package/build/_modules/runtime/_collections/notification-detector-page-script.const.d.ts.map +1 -1
- package/build/_modules/runtime/_collections/notification-detector-page-script.const.js +8 -1
- package/build/_modules/runtime/_collections/notification-detector-page-script.const.js.map +1 -1
- package/build/_modules/runtime/_collections/notification-detector.util.d.ts.map +1 -1
- package/build/_modules/runtime/_collections/notification-detector.util.js +3 -1
- package/build/_modules/runtime/_collections/notification-detector.util.js.map +1 -1
- package/build/_modules/runtime/_collections/notification-sweep.util.d.ts +65 -0
- package/build/_modules/runtime/_collections/notification-sweep.util.d.ts.map +1 -0
- package/build/_modules/runtime/_collections/notification-sweep.util.js +326 -0
- package/build/_modules/runtime/_collections/notification-sweep.util.js.map +1 -0
- package/build/_modules/runtime/_models/notification-sweep.interface.d.ts +67 -0
- package/build/_modules/runtime/_models/notification-sweep.interface.d.ts.map +1 -0
- package/build/_modules/runtime/_models/notification-sweep.interface.js +3 -0
- package/build/_modules/runtime/_models/notification-sweep.interface.js.map +1 -0
- package/build/_modules/runtime/index.d.ts +2 -0
- package/build/_modules/runtime/index.d.ts.map +1 -1
- package/build/_modules/runtime/index.js +2 -0
- package/build/_modules/runtime/index.js.map +1 -1
- package/build/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
Minden release a `dynamo-e2e-foundation` HYPERPLAN MP-N ütemezést követi.
|
|
4
4
|
Verzióformátum: `MM.mm.p` (két-számjegyes major-minor, Dynamo-konvenció).
|
|
5
5
|
|
|
6
|
+
## [01.18.18] — 2026-09-25 — Capability-scoped global setup (BFR-FSMED-017)
|
|
7
|
+
|
|
8
|
+
- `DyE2E_getGlobalSetup` new options: `failOnMissingEnv` (the missing `requiredEnvVars` become FATAL, named in the
|
|
9
|
+
error, the probe does not even start — for auth / user-lifecycle suites; default stays warn-only) and
|
|
10
|
+
`reachabilityPath` (probe a documented endpoint, e.g. `api/health`, resolved under the base URL incl. its path
|
|
11
|
+
prefix; default is still the root). Any HTTP answer still counts as reachable.
|
|
12
|
+
- A failed probe now names the probed URL, the timeout and the network cause (`err.cause.code` / message — the
|
|
13
|
+
bare `fetch failed` hid `ECONNREFUSED` / `ENOTFOUND` / TLS), and a timeout is reported as a timeout.
|
|
14
|
+
Exported helpers: `DyE2E_resolveReachabilityUrl`, `DyE2E_describeProbeFailure`.
|
|
15
|
+
- ⚠️ **01.18.17 was never published:** its release commit bumped `package.json` but not `DYE2E_PACKAGE_VERSION`, so the
|
|
16
|
+
CI version-stamp spec failed (1/478) before `npm-publish`. Its content (BFR-OVERSEER-014 preset options:
|
|
17
|
+
`ciTimeoutFactor`, `maxFailuresInCi`, `DyE2E_ciTimeout`) ships in this release.
|
|
18
|
+
|
|
19
|
+
## [01.18.16] — 2026-09-24 — Login-flow notification sweep
|
|
20
|
+
|
|
21
|
+
- Added `DyE2E_NotificationSweep_Util` to `/runtime` and the `dye2e notification-sweep` command (BFR-QA-002): on top of
|
|
22
|
+
the notification detector it opens the login page of every target, submits it with a WRONG password (the error
|
|
23
|
+
branch, no test account needed) and returns one matrix row per project — notifications · error/warning · banners ·
|
|
24
|
+
modal dialogs · raw-technical leaks · console errors. Targets: the QA workspace's `TEST-TARGETS.md` (only
|
|
25
|
+
`https://test.` rows) or JSON.
|
|
26
|
+
- Guards in code: the probe address must be on a reserved or a declared own domain (else it throws before any page is
|
|
27
|
+
opened); the form is submitted only on a test host (else loaded, not submitted, and the row says so).
|
|
28
|
+
- Modal dialogs are recorded (text + leak flag) before they are closed: on 3 of 7 TEST sites a "not the production
|
|
29
|
+
system" notice blocked the login, and on one the dialog was itself a JS error shown to the user.
|
|
30
|
+
- Detector fixes found by the live sweep: a banner's inner elements are no longer counted as more banners (one login
|
|
31
|
+
error was counted 3×), and `HTTP 401`-style status codes and user-visible JS errors (`… is not a function`,
|
|
32
|
+
`TypeError`, `this.x.`) now count as raw technical leaks.
|
|
33
|
+
|
|
6
34
|
## [01.18.15] — 2026-09-24 — Live notification detector
|
|
7
35
|
|
|
8
36
|
- Added `DyE2E_NotificationDetector_Util` to `/runtime` (BFR-QA-001): `attach(context)` puts a `MutationObserver` into
|
package/README.md
CHANGED
|
@@ -74,6 +74,23 @@ const specSource = DyE2E_FormSuite_Generator.emit({
|
|
|
74
74
|
- `@futdevpro/dynamo-e2e/game` — capability-gated deterministic game seam, failure artifacts and bidirectional journey-catalog validation
|
|
75
75
|
- `@futdevpro/dynamo-e2e/cwv` — Core Web Vitals (Wave-3)
|
|
76
76
|
|
|
77
|
+
## Playwright preset — CI timeouts and the failure budget
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { DyE2E_getPlaywrightConfig, DyE2E_ciTimeout } from '@futdevpro/dynamo-e2e/presets';
|
|
81
|
+
|
|
82
|
+
export default DyE2E_getPlaywrightConfig({
|
|
83
|
+
defaultBaseUrl: 'https://test.example.hu',
|
|
84
|
+
ciTimeoutFactor: 3, // CI only: timeout / expectTimeout / actionTimeout / navigationTimeout × 3 (default 1)
|
|
85
|
+
maxFailuresInCi: 1, // CI only: stop after the first failure (default: unset = unchanged)
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
> ⚠️ **A call-site `{ timeout }` overrides the config.** `expect(x).toBeVisible({ timeout: 15_000 })` ignores the preset's
|
|
90
|
+
> `expect.timeout` (and its `ciTimeoutFactor`). Scale those values with `DyE2E_ciTimeout(15_000)` — unchanged locally,
|
|
91
|
+
> × `E2E_CI_TIMEOUT_FACTOR` (or 3) under `CI`. Measured: a shared CI runner was 2.3–4.7× slower than a local machine,
|
|
92
|
+
> and a smoke suite with hard-coded call-site timeouts stayed red for months while its config "looked right".
|
|
93
|
+
|
|
77
94
|
## Live notification detector (`/runtime`)
|
|
78
95
|
|
|
79
96
|
Records every user-visible notification — DyNX `dynamo-notification-card` / `dynamo-notifications-area`, mat-snackbar
|
|
@@ -96,4 +113,27 @@ Captures survive a full-page navigation (they are reported to Node through a Pla
|
|
|
96
113
|
is plain JavaScript, so no `__name` shim is needed under `tsx` / esbuild. `collect()` throws on a context without
|
|
97
114
|
`attach()` — an empty report would otherwise read as "no notifications".
|
|
98
115
|
|
|
116
|
+
## Login-flow notification sweep (`/runtime` + CLI)
|
|
117
|
+
|
|
118
|
+
Built on the detector: opens the login page of many projects, submits it with a WRONG password (so the ERROR branch
|
|
119
|
+
is measured without a test account) and prints one matrix row per project — notifications · error/warning · banners ·
|
|
120
|
+
modal dialogs · raw-technical leaks · console errors. Framework-level defects show up only when many projects are
|
|
121
|
+
measured the same way.
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
dye2e notification-sweep --targets TEST-TARGETS.md --json sweep.json # or a JSON [{ key, loginUrl | baseUrl }]
|
|
125
|
+
dye2e notification-sweep --targets targets.json --only a,b --fail-on-leak # exit 1 on a raw technical leak
|
|
126
|
+
```
|
|
127
|
+
```ts
|
|
128
|
+
const outcomes = await DyE2E_NotificationSweep_Util.sweep(browser, targets, { settleMs: 5000 });
|
|
129
|
+
console.log(DyE2E_NotificationSweep_Util.matrix(outcomes.map((o) => o.row)));
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Guards in code, not in docs: the probe address must be on a reserved domain (`example.com`, `*.test`, `*.invalid` …)
|
|
133
|
+
or on one you declare with `ownDomains` — anything else throws before a page is opened; the form is submitted only on
|
|
134
|
+
a test host (`test.*`, `*.test`, `localhost` …, or `allowSubmitHosts`) — anything else is loaded but NOT submitted,
|
|
135
|
+
and the row says so. `real: true` / `--real` uses `E2E_PERSISTENT_USER_EMAIL` / `_PASSWORD`; without them the row says
|
|
136
|
+
it fell back to the probe. Modal dialogs (a "not the production system" notice, an error dialog) are RECORDED —
|
|
137
|
+
text + leak flag — before they are closed; a non-modal cookie bar is left alone.
|
|
138
|
+
|
|
99
139
|
Detailed game-preset contract: [`__documentations/game-preset.md`](__documentations/game-preset.md).
|
package/bin/dye2e.js
CHANGED
|
@@ -403,6 +403,19 @@ function main() {
|
|
|
403
403
|
process.exit(0);
|
|
404
404
|
}
|
|
405
405
|
|
|
406
|
+
if (parsed.command === 'notification-sweep') {
|
|
407
|
+
// BFR-QA-002 — the logic is TypeScript (runtime module); needs @playwright/test in the consumer
|
|
408
|
+
const { DyE2E_NotificationSweep_Util } = require('../build/_modules/runtime/_collections/notification-sweep.util');
|
|
409
|
+
DyE2E_NotificationSweep_Util.runCli(parsed.flags).then(
|
|
410
|
+
(code) => process.exit(code),
|
|
411
|
+
(error) => {
|
|
412
|
+
process.stderr.write('[dye2e] notification-sweep failed: ' + (error && error.stack ? error.stack : error) + '\n');
|
|
413
|
+
process.exit(1);
|
|
414
|
+
},
|
|
415
|
+
);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
|
|
406
419
|
if (parsed.command === 'bundle-summary') {
|
|
407
420
|
const bundleP = parsed.flags.bundle;
|
|
408
421
|
if (!bundleP) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runner.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,qBAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAsBpF,MAAM,CAAC,QAAQ,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"cli-runner.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,qBAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAsBpF,MAAM,CAAC,QAAQ,IAAI,MAAM;IAyGzB;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA0D/C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,GAAG;QAC9H,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IA2CD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAuB9D;;;OAGG;IACH,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,qBAAqB,GAAG,yBAAyB,GAAG,mBAAmB,EAChF,UAAU,EAAE,MAAM,GACjB,MAAM;CAaV"}
|
|
@@ -61,6 +61,23 @@ Visual QA (/vqa) commands:
|
|
|
61
61
|
generate-comparison-bundle Before/after capture sets -> comparison bundle
|
|
62
62
|
bundle-summary Print an existing bundle's summary.md
|
|
63
63
|
|
|
64
|
+
QA commands:
|
|
65
|
+
notification-sweep Login pages -> wrong-password submit -> notification / banner / leak matrix
|
|
66
|
+
|
|
67
|
+
Flags (notification-sweep):
|
|
68
|
+
--targets <path> TEST-TARGETS.md (only https://test. rows) or JSON [{ key, loginUrl | baseUrl }] (required)
|
|
69
|
+
--only <a,b> Only these target keys
|
|
70
|
+
--login-paths <k=/p,..> Per-target login path (default /landing/login)
|
|
71
|
+
--no-submit Only load the login pages
|
|
72
|
+
--real Use E2E_PERSISTENT_USER_EMAIL / _PASSWORD (else the wrong-password probe)
|
|
73
|
+
--probe-email <addr> Probe address — reserved domain or one of --own-domains ONLY
|
|
74
|
+
--own-domains <d,..> Your own e-mail domains allowed for the probe address
|
|
75
|
+
--allow-hosts <h,..> Extra hosts the form may be submitted to (default: test.*, *.test, localhost)
|
|
76
|
+
--settle-ms / --after-submit-ms <ms> Waits (default 5000 / 9000)
|
|
77
|
+
--json <out> Write rows + full reports as JSON
|
|
78
|
+
--fail-on-leak Exit 1 if any page shows a raw technical leak
|
|
79
|
+
--executable-path <exe> Chromium to launch (or DYE2E_CHROMIUM_EXECUTABLE_PATH)
|
|
80
|
+
|
|
64
81
|
Flags (preset):
|
|
65
82
|
--name <preset> Print this preset as JSON (omit to list all)
|
|
66
83
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runner.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":";;;AAAA,kEAAoE;AACpE,0EAA4E;AAC5E,uEAAyE;AAKzE;;;;;GAKG;AACH,MAAa,oBAAoB;IAE/B,MAAM,CAAC,SAAS,CAAC,IAAc;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,OAAO,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAuB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBAClB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO
|
|
1
|
+
{"version":3,"file":"cli-runner.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/cli-runner.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BFR-OVERSEER-014 — a HÍVÁS-HELYI timeout CI-skálázása.
|
|
3
|
+
*
|
|
4
|
+
* A Playwright-ban a hívás-helyi `{ timeout }` felülírja a config `expect.timeout`-ját — ezért a preset
|
|
5
|
+
* `ciTimeoutFactor`-a oda NEM ér el. Mérve (overseer, FR-485): a specek hard-kódolt 12–30 s-os konstansokat adtak át, a
|
|
6
|
+
* megosztott CI-runner 2,3–4,7× lassabb volt ⇒ a smoke hónapokig piros. Ez a segéd egy helyre hozza a három projekt
|
|
7
|
+
* saját megoldását.
|
|
8
|
+
*
|
|
9
|
+
* @param baseMs a terheletlen (lokális) gépre kalibrált érték
|
|
10
|
+
* @param factor a CI-szorzó; default: az `E2E_CI_TIMEOUT_FACTOR` env (ha pozitív szám), különben `3`
|
|
11
|
+
* @returns CI-ben `baseMs × factor`, lokálisan változatlanul `baseMs`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* await expect(page.getByTestId('job-card')).toBeVisible({ timeout: DyE2E_ciTimeout(15_000) });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function DyE2E_ciTimeout(baseMs: number, factor?: number): number;
|
|
19
|
+
/** A `DyE2E_ciTimeout` alapértelmezett CI-szorzója (a mért 2,3–4,7× lassulás felső sávja alá, kerekítve). */
|
|
20
|
+
export declare const DYE2E_DEFAULT_CI_TIMEOUT_FACTOR: number;
|
|
21
|
+
//# sourceMappingURL=ci-timeout.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-timeout.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/ci-timeout.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED,6GAA6G;AAC7G,eAAO,MAAM,+BAA+B,EAAE,MAAU,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DYE2E_DEFAULT_CI_TIMEOUT_FACTOR = void 0;
|
|
4
|
+
exports.DyE2E_ciTimeout = DyE2E_ciTimeout;
|
|
5
|
+
/**
|
|
6
|
+
* BFR-OVERSEER-014 — a HÍVÁS-HELYI timeout CI-skálázása.
|
|
7
|
+
*
|
|
8
|
+
* A Playwright-ban a hívás-helyi `{ timeout }` felülírja a config `expect.timeout`-ját — ezért a preset
|
|
9
|
+
* `ciTimeoutFactor`-a oda NEM ér el. Mérve (overseer, FR-485): a specek hard-kódolt 12–30 s-os konstansokat adtak át, a
|
|
10
|
+
* megosztott CI-runner 2,3–4,7× lassabb volt ⇒ a smoke hónapokig piros. Ez a segéd egy helyre hozza a három projekt
|
|
11
|
+
* saját megoldását.
|
|
12
|
+
*
|
|
13
|
+
* @param baseMs a terheletlen (lokális) gépre kalibrált érték
|
|
14
|
+
* @param factor a CI-szorzó; default: az `E2E_CI_TIMEOUT_FACTOR` env (ha pozitív szám), különben `3`
|
|
15
|
+
* @returns CI-ben `baseMs × factor`, lokálisan változatlanul `baseMs`
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* await expect(page.getByTestId('job-card')).toBeVisible({ timeout: DyE2E_ciTimeout(15_000) });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
function DyE2E_ciTimeout(baseMs, factor) {
|
|
23
|
+
if (!process.env.CI) {
|
|
24
|
+
return baseMs;
|
|
25
|
+
}
|
|
26
|
+
const envFactor = Number(process.env.E2E_CI_TIMEOUT_FACTOR);
|
|
27
|
+
const effective = factor !== undefined && factor > 0
|
|
28
|
+
? factor
|
|
29
|
+
: (Number.isFinite(envFactor) && envFactor > 0 ? envFactor : exports.DYE2E_DEFAULT_CI_TIMEOUT_FACTOR);
|
|
30
|
+
return Math.round(baseMs * effective);
|
|
31
|
+
}
|
|
32
|
+
/** A `DyE2E_ciTimeout` alapértelmezett CI-szorzója (a mért 2,3–4,7× lassulás felső sávja alá, kerekítve). */
|
|
33
|
+
exports.DYE2E_DEFAULT_CI_TIMEOUT_FACTOR = 3;
|
|
34
|
+
//# sourceMappingURL=ci-timeout.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-timeout.util.js","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/ci-timeout.util.ts"],"names":[],"mappings":";;;AAiBA,0CAUC;AA3BD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,eAAe,CAAC,MAAc,EAAE,MAAe;IAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,SAAS,GAAW,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,SAAS,GAAW,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC;QAC1D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uCAA+B,CAAC,CAAC;IAEhG,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,6GAA6G;AAChG,QAAA,+BAA+B,GAAW,CAAC,CAAC"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { FullConfig } from '@playwright/test';
|
|
2
2
|
import { DyE2E_GlobalSetup_Options } from '../_models/interfaces/global-setup-options.interface';
|
|
3
|
+
/**
|
|
4
|
+
* BFR-FSMED-017 — the probed URL: `reachabilityPath` resolved against the base URL (a documented health endpoint),
|
|
5
|
+
* or the base URL itself (root HTML) when no path is given.
|
|
6
|
+
*/
|
|
7
|
+
export declare function DyE2E_resolveReachabilityUrl(baseUrl: string, reachabilityPath?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* BFR-FSMED-017 — the network-level cause of a failed probe, for the error message: the undici `fetch` hides the
|
|
10
|
+
* real reason (`ECONNREFUSED`, `ENOTFOUND`, a TLS error, an IPv6-only `localhost` answer) in `err.cause`, and the
|
|
11
|
+
* bare "fetch failed" sends the reader after the wrong problem.
|
|
12
|
+
*/
|
|
13
|
+
export declare function DyE2E_describeProbeFailure(err: unknown, timedOut: boolean): string;
|
|
3
14
|
/**
|
|
4
15
|
* `DyE2E_getGlobalSetup` — a flotta e2e-global-setup.ts-einek közös magja:
|
|
5
16
|
* dotenv-load + kötelező-env warn + baseURL-reachability + opcionális login-once hook.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-setup.factory.d.ts","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/global-setup.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAKlF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"global-setup.factory.d.ts","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/global-setup.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AAKlF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAKjG;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAclF;AAiED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,yBAAyB,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAgC3G"}
|
|
@@ -23,6 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DyE2E_resolveReachabilityUrl = DyE2E_resolveReachabilityUrl;
|
|
27
|
+
exports.DyE2E_describeProbeFailure = DyE2E_describeProbeFailure;
|
|
26
28
|
exports.DyE2E_getGlobalSetup = DyE2E_getGlobalSetup;
|
|
27
29
|
const test_1 = require("@playwright/test");
|
|
28
30
|
const dotenv = __importStar(require("dotenv"));
|
|
@@ -30,24 +32,62 @@ const fs = __importStar(require("fs"));
|
|
|
30
32
|
const path = __importStar(require("path"));
|
|
31
33
|
/** Üres Playwright storageState — nincs cookie / origin (= unauthenticated fallback). */
|
|
32
34
|
const EMPTY_AUTH_STATE = { cookies: [], origins: [] };
|
|
35
|
+
/**
|
|
36
|
+
* BFR-FSMED-017 — the probed URL: `reachabilityPath` resolved against the base URL (a documented health endpoint),
|
|
37
|
+
* or the base URL itself (root HTML) when no path is given.
|
|
38
|
+
*/
|
|
39
|
+
function DyE2E_resolveReachabilityUrl(baseUrl, reachabilityPath) {
|
|
40
|
+
if (!reachabilityPath) {
|
|
41
|
+
return baseUrl;
|
|
42
|
+
}
|
|
43
|
+
// Relative to the base URL's ORIGIN + path prefix: 'api/health' and '/api/health' both land under the base
|
|
44
|
+
const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
|
|
45
|
+
return new URL(reachabilityPath.replace(/^\/+/, ''), base).toString();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* BFR-FSMED-017 — the network-level cause of a failed probe, for the error message: the undici `fetch` hides the
|
|
49
|
+
* real reason (`ECONNREFUSED`, `ENOTFOUND`, a TLS error, an IPv6-only `localhost` answer) in `err.cause`, and the
|
|
50
|
+
* bare "fetch failed" sends the reader after the wrong problem.
|
|
51
|
+
*/
|
|
52
|
+
function DyE2E_describeProbeFailure(err, timedOut) {
|
|
53
|
+
if (timedOut) {
|
|
54
|
+
return 'timeout (no answer)';
|
|
55
|
+
}
|
|
56
|
+
const error = (err && typeof err === 'object' ? err : {});
|
|
57
|
+
const parts = [
|
|
58
|
+
error.message || String(err),
|
|
59
|
+
error.cause?.code || '',
|
|
60
|
+
error.cause?.message || '',
|
|
61
|
+
].filter((part, index, all) => !!part && all.indexOf(part) === index);
|
|
62
|
+
return parts.join(' — ');
|
|
63
|
+
}
|
|
33
64
|
/**
|
|
34
65
|
* baseURL elérhetőség-ellenőrzés AbortController + fetch timeout-tal.
|
|
35
66
|
* Ha a target nem él, egyértelmű hibával állunk le (ne 60 spec bukjon obscure timeout-tal).
|
|
67
|
+
* Bármilyen HTTP-válasz (akár 4xx/5xx) = a szerver él; csak a network-error / timeout számít bukásnak.
|
|
68
|
+
* A hiba megnevezi a MÉRT URL-t és a hálózati okot (BFR-FSMED-017: a puszta „nem elérhető" rossz nyomra vitt).
|
|
36
69
|
*/
|
|
37
|
-
async function checkBaseUrlReachable(baseUrl, timeoutMs) {
|
|
70
|
+
async function checkBaseUrlReachable(baseUrl, timeoutMs, reachabilityPath) {
|
|
71
|
+
const probeUrl = DyE2E_resolveReachabilityUrl(baseUrl, reachabilityPath);
|
|
38
72
|
const controller = new AbortController();
|
|
39
|
-
|
|
73
|
+
let timedOut = false;
|
|
74
|
+
const timeoutId = setTimeout(() => {
|
|
75
|
+
timedOut = true;
|
|
76
|
+
controller.abort();
|
|
77
|
+
}, timeoutMs);
|
|
78
|
+
let cause;
|
|
40
79
|
try {
|
|
41
|
-
|
|
42
|
-
await fetch(baseUrl, { method: 'GET', signal: controller.signal });
|
|
80
|
+
await fetch(probeUrl, { method: 'GET', signal: controller.signal });
|
|
43
81
|
clearTimeout(timeoutId);
|
|
44
82
|
return;
|
|
45
83
|
}
|
|
46
|
-
catch {
|
|
84
|
+
catch (err) {
|
|
47
85
|
clearTimeout(timeoutId);
|
|
86
|
+
cause = DyE2E_describeProbeFailure(err, timedOut);
|
|
48
87
|
}
|
|
49
|
-
throw new Error(`[E2E] E2E_BASE_URL (${baseUrl}) nem
|
|
50
|
-
'Indítsd el a target környezetet (vagy állítsd az E2E_BASE_URL-t), majd futtasd újra
|
|
88
|
+
throw new Error(`[E2E] E2E_BASE_URL (${baseUrl}) nem elérhető — probe: GET ${probeUrl} (${timeoutMs} ms) → ${cause}. ` +
|
|
89
|
+
'Indítsd el a target környezetet (vagy állítsd az E2E_BASE_URL-t / a reachabilityPath-t), majd futtasd újra. ' +
|
|
90
|
+
'Tipp: ha a böngészőben él, de itt nem, a `localhost` IPv4/IPv6 feloldása eltérhet — próbáld `127.0.0.1`-gyel.');
|
|
51
91
|
}
|
|
52
92
|
/**
|
|
53
93
|
* Login-once + storageState mentés (C513 minta): a consumer login-hook-ja viszi végig a
|
|
@@ -92,14 +132,19 @@ function DyE2E_getGlobalSetup(opts) {
|
|
|
92
132
|
return async (_config) => {
|
|
93
133
|
// dotenv-load a hívó e2e-mappájából (a config-oldali load-dal idempotens)
|
|
94
134
|
dotenv.config({ path: path.join(opts.envDir || process.cwd(), '.env') });
|
|
95
|
-
// Kötelező env-változók —
|
|
135
|
+
// Kötelező env-változók — default: CSAK warn (a spec-ek fallback-elhetnek);
|
|
136
|
+
// `failOnMissingEnv` (BFR-FSMED-017): fail-closed, a hiányzó NEVEKKEL (érték soha nem kerül a hibába)
|
|
96
137
|
const missing = (opts.requiredEnvVars || []).filter((name) => !process.env[name]);
|
|
138
|
+
if (missing.length && opts.failOnMissingEnv) {
|
|
139
|
+
throw new Error(`[E2E] Global setup: hiányzó kötelező env: ${missing.join(', ')}. ` +
|
|
140
|
+
'Ez a suite ezeket igényli — töltsd ki a .env-et (.env.example minta), vagy futtass kisebb profilt.');
|
|
141
|
+
}
|
|
97
142
|
if (missing.length) {
|
|
98
143
|
console.warn(`[E2E] Global setup: hiányzó env: ${missing.join(', ')}. Töltsd ki a .env-et (.env.example minta).`);
|
|
99
144
|
}
|
|
100
145
|
// baseURL-reachability — fail-fast ha a target nem él
|
|
101
146
|
const baseUrl = process.env.E2E_BASE_URL || opts.defaultBaseUrl;
|
|
102
|
-
await checkBaseUrlReachable(baseUrl, opts.reachabilityTimeoutMs ?? 5_000);
|
|
147
|
+
await checkBaseUrlReachable(baseUrl, opts.reachabilityTimeoutMs ?? 5_000, opts.reachabilityPath);
|
|
103
148
|
if (opts.login) {
|
|
104
149
|
// Login-once + storageState (C513 minta)
|
|
105
150
|
await runLoginHook(opts, baseUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-setup.factory.js","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/global-setup.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"global-setup.factory.js","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/global-setup.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-config.factory.d.ts","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/playwright-config.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAK7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,2DAA2D,CAAC;AAG3G;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,8BAA8B,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"playwright-config.factory.d.ts","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/playwright-config.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAK7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,2DAA2D,CAAC;AAG3G;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,8BAA8B,GAAG,oBAAoB,CA4GpG"}
|
|
@@ -92,6 +92,9 @@ function DyE2E_getPlaywrightConfig(opts) {
|
|
|
92
92
|
})),
|
|
93
93
|
];
|
|
94
94
|
}
|
|
95
|
+
// BFR-OVERSEER-014: CI-ben a preset timeoutjai a `ciTimeoutFactor`-ral szorzódnak (default 1 = változatlan)
|
|
96
|
+
const factor = process.env.CI && opts.ciTimeoutFactor && opts.ciTimeoutFactor > 0 ? opts.ciTimeoutFactor : 1;
|
|
97
|
+
const scaled = (ms) => Math.round(ms * factor);
|
|
95
98
|
// A közös config-mag — a flotta-configok metszete + opcionális override-ok
|
|
96
99
|
return (0, test_1.defineConfig)({
|
|
97
100
|
testDir: opts.testDir || './tests',
|
|
@@ -99,15 +102,17 @@ function DyE2E_getPlaywrightConfig(opts) {
|
|
|
99
102
|
...(opts.testIgnore !== undefined ? { testIgnore: opts.testIgnore } : {}),
|
|
100
103
|
// globalSetup csak ha a consumer adott path-t (require.resolve-olt abszolút path)
|
|
101
104
|
...(opts.globalSetupPath ? { globalSetup: opts.globalSetupPath } : {}),
|
|
102
|
-
timeout: opts.timeout ?? 60_000,
|
|
105
|
+
timeout: scaled(opts.timeout ?? 60_000),
|
|
103
106
|
expect: {
|
|
104
|
-
timeout: opts.expectTimeout ?? 10_000,
|
|
107
|
+
timeout: scaled(opts.expectTimeout ?? 10_000),
|
|
105
108
|
},
|
|
106
109
|
fullyParallel: opts.fullyParallel ?? false,
|
|
107
110
|
// CI-ben tilos a .only (véletlen szűkített suite = fals zöld)
|
|
108
111
|
forbidOnly: !!process.env.CI,
|
|
109
112
|
// Retry CSAK CI-ben (load-flake tolerancia); lokálban a flake jel, nem zaj
|
|
110
113
|
retries: process.env.CI ? (opts.retriesInCi ?? 0) : 0,
|
|
114
|
+
// BFR-OVERSEER-014: CSAK ha a consumer kérte, és CSAK CI-ben — különben a kulcs nincs a configban (mai viselkedés)
|
|
115
|
+
...(process.env.CI && opts.maxFailuresInCi !== undefined ? { maxFailures: opts.maxFailuresInCi } : {}),
|
|
111
116
|
workers: workers,
|
|
112
117
|
reporter: [
|
|
113
118
|
['html'],
|
|
@@ -121,8 +126,8 @@ function DyE2E_getPlaywrightConfig(opts) {
|
|
|
121
126
|
// kiadott click/fill a nema "Test timeout of 180000ms exceeded"-ig var, a valodi ok (melyik
|
|
122
127
|
// elem, miert nem kattinthato) nelkul. A default akcio-korlat a passzolo teszteken semmit nem
|
|
123
128
|
// valtoztat — az akado akcio viszont sajat, beszedes hibaval bukik. Projekt-feluliras: opts.
|
|
124
|
-
actionTimeout: opts.actionTimeout ?? 15_000,
|
|
125
|
-
navigationTimeout: opts.navigationTimeout ?? 30_000,
|
|
129
|
+
actionTimeout: scaled(opts.actionTimeout ?? 15_000),
|
|
130
|
+
navigationTimeout: scaled(opts.navigationTimeout ?? 30_000),
|
|
126
131
|
screenshot: 'only-on-failure',
|
|
127
132
|
trace: 'retain-on-failure',
|
|
128
133
|
video: 'retain-on-failure',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-config.factory.js","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/playwright-config.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,
|
|
1
|
+
{"version":3,"file":"playwright-config.factory.js","sourceRoot":"","sources":["../../../../src/_modules/presets/_collections/playwright-config.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,18 @@ export interface DyE2E_GlobalSetup_Options {
|
|
|
10
10
|
envDir?: string;
|
|
11
11
|
/** Kötelező env-változó nevek — hiány esetén warn (NEM fatális; a spec-ek fallback-elhetnek). */
|
|
12
12
|
requiredEnvVars?: string[];
|
|
13
|
+
/**
|
|
14
|
+
* BFR-FSMED-017: `true` → a hiányzó `requiredEnvVars` FATÁLIS (fail-closed, a hiányzó nevekkel) — auth /
|
|
15
|
+
* user-lifecycle suite-okhoz. Default: `false` (csak warn — backward-compat).
|
|
16
|
+
*/
|
|
17
|
+
failOnMissingEnv?: boolean;
|
|
13
18
|
/** baseURL-reachability-check timeout ms-ben (AbortController + fetch). Default: `5_000`. */
|
|
14
19
|
reachabilityTimeoutMs?: number;
|
|
20
|
+
/**
|
|
21
|
+
* BFR-FSMED-017: a reachability-probe útvonala a baseURL-hez képest (pl. `api/health` — egy dokumentált
|
|
22
|
+
* endpoint). Default: maga a baseURL (root HTML). Bármilyen HTTP-válasz = él; csak a hálózati hiba / timeout bukik.
|
|
23
|
+
*/
|
|
24
|
+
reachabilityPath?: string;
|
|
15
25
|
/**
|
|
16
26
|
* Opcionális login-once hook (C513 storageState-reuse minta): a factory nyit egy
|
|
17
27
|
* chromium page-et és ezt hívja; a hook felelős a login-flow végigviteléért.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-setup-options.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/presets/_models/interfaces/global-setup-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,kGAAkG;IAClG,cAAc,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6FAA6F;IAC7F,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"global-setup-options.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/presets/_models/interfaces/global-setup-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,kGAAkG;IAClG,cAAc,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6FAA6F;IAC7F,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -36,8 +36,27 @@ export interface DyE2E_PlaywrightConfig_Options {
|
|
|
36
36
|
retriesInCi?: number;
|
|
37
37
|
/** Per-test timeout ms-ben. Default: `60_000`. */
|
|
38
38
|
timeout?: number;
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* expect() timeout ms-ben. Default: `10_000`.
|
|
41
|
+
*
|
|
42
|
+
* ⚠️ BFR-OVERSEER-014: a HÍVÁS-HELYI `{ timeout }` FELÜLÍRJA ezt — ha a specek explicit timeoutot adnak át
|
|
43
|
+
* (`expect(x).toBeVisible({ timeout: 15_000 })`), ez az érték NEM hat. Mérve: az overseer 17 spece mindegyiket
|
|
44
|
+
* átadta, a config „olvasva helyesnek látszott", az e2e-smoke hónapokig piros volt. A hívás-helyi értéket a
|
|
45
|
+
* `DyE2E_ciTimeout(baseMs)` skálázza CI-ben.
|
|
46
|
+
*/
|
|
40
47
|
expectTimeout?: number;
|
|
48
|
+
/**
|
|
49
|
+
* BFR-OVERSEER-014: CI-ben (`process.env.CI`) ennyi hiba után leáll a futás (Playwright `maxFailures`). Default:
|
|
50
|
+
* nincs beállítva (= a mai viselkedés). ⚠️ Indok: `SIGKILL`-nél az összegző NEM fut le, a hiba-törzsek csak ott
|
|
51
|
+
* íródnak ki ⇒ egy korlát nélkül időtúllépésig futó suite logja ELVBŐL nem mondja meg, miért bukott.
|
|
52
|
+
*/
|
|
53
|
+
maxFailuresInCi?: number;
|
|
54
|
+
/**
|
|
55
|
+
* BFR-OVERSEER-014: CI-ben a preset ÖSSZES timeoutja (`timeout`, `expectTimeout`, `actionTimeout`,
|
|
56
|
+
* `navigationTimeout`) ezzel szorzódik. Default: `1` (= a mai viselkedés). Mérve: a megosztott runner 2,3–4,7×
|
|
57
|
+
* lassabb egy terheletlen gépnél. ⚠️ A hívás-helyi `{ timeout }`-ra NEM hat — oda `DyE2E_ciTimeout`.
|
|
58
|
+
*/
|
|
59
|
+
ciTimeoutFactor?: number;
|
|
41
60
|
/** BFR-OV-030: akcio-szintu timeout (default 15000 ms) — az akado click/fill BESZEDES hibaval bukjon, ne nema test-timeouttal. */
|
|
42
61
|
actionTimeout?: number;
|
|
43
62
|
/** BFR-OV-030: navigacios timeout (default 30000 ms) — ugyanazon okbol. */
|
package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-config-options.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/presets/_models/interfaces/playwright-config-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE3G;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,wBAAwB,EAAE,CAAC;AAExG;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,oGAAoG;IACpG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB
|
|
1
|
+
{"version":3,"file":"playwright-config-options.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/presets/_models/interfaces/playwright-config-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE3G;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,wBAAwB,EAAE,CAAC;AAExG;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,oGAAoG;IACpG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kIAAkI;IAClI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvC,wGAAwG;IACxG,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC;;;;OAIG;IACH,YAAY,CAAC,EAAE,0BAA0B,CAAC;CAC3C"}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
export { DyE2E_FormSuite_Generator } from '../generators/form-suite.generator';
|
|
11
11
|
export type { DyE2E_FormSuiteGenerate_Options } from '../generators/_models/form-suite-generate-options.interface';
|
|
12
12
|
export { DyE2E_getPlaywrightConfig } from './_collections/playwright-config.factory';
|
|
13
|
-
export {
|
|
13
|
+
export { DyE2E_ciTimeout, DYE2E_DEFAULT_CI_TIMEOUT_FACTOR } from './_collections/ci-timeout.util';
|
|
14
|
+
export { DyE2E_describeProbeFailure, DyE2E_getGlobalSetup, DyE2E_resolveReachabilityUrl, } from './_collections/global-setup.factory';
|
|
14
15
|
export { DyE2E_resolveViewportPreset } from './_collections/viewport-preset-resolver.util';
|
|
15
16
|
export { DYE2E_VIEWPORTS_VISUAL8, DYE2E_VIEWPORTS_NAMED4, DYE2E_VIEWPORTS_SINGLE, } from './_collections/constants/playwright-viewport-presets.const';
|
|
16
17
|
export type { DyE2E_PlaywrightConfig_Options, DyE2E_ViewportsOption_Type, } from './_models/interfaces/playwright-config-options.interface';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/presets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,+BAA+B,EAAE,MAAM,6DAA6D,CAAC;AAGnH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/presets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EAAE,+BAA+B,EAAE,MAAM,6DAA6D,CAAC;AAGnH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,4DAA4D,CAAC;AACpE,YAAY,EACV,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,0DAA0D,CAAC;AAClE,YAAY,EACV,0BAA0B,EAC1B,oCAAoC,EACpC,0BAA0B,GAC3B,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AAErG,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAAqD,CAAC"}
|
|
@@ -9,14 +9,19 @@
|
|
|
9
9
|
* Wave-1 MVP: vékony re-export a `generators`-ből.
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.DYE2E_PRESETS_NEXT_WAVES = exports.DYE2E_VIEWPORTS_SINGLE = exports.DYE2E_VIEWPORTS_NAMED4 = exports.DYE2E_VIEWPORTS_VISUAL8 = exports.DyE2E_resolveViewportPreset = exports.DyE2E_getGlobalSetup = exports.DyE2E_getPlaywrightConfig = exports.DyE2E_FormSuite_Generator = void 0;
|
|
12
|
+
exports.DYE2E_PRESETS_NEXT_WAVES = exports.DYE2E_VIEWPORTS_SINGLE = exports.DYE2E_VIEWPORTS_NAMED4 = exports.DYE2E_VIEWPORTS_VISUAL8 = exports.DyE2E_resolveViewportPreset = exports.DyE2E_resolveReachabilityUrl = exports.DyE2E_getGlobalSetup = exports.DyE2E_describeProbeFailure = exports.DYE2E_DEFAULT_CI_TIMEOUT_FACTOR = exports.DyE2E_ciTimeout = exports.DyE2E_getPlaywrightConfig = exports.DyE2E_FormSuite_Generator = void 0;
|
|
13
13
|
var form_suite_generator_1 = require("../generators/form-suite.generator");
|
|
14
14
|
Object.defineProperty(exports, "DyE2E_FormSuite_Generator", { enumerable: true, get: function () { return form_suite_generator_1.DyE2E_FormSuite_Generator; } });
|
|
15
15
|
// Playwright-config preset (flotta e2e-config konszolidáció) — factory + global-setup + viewport-presetek
|
|
16
16
|
var playwright_config_factory_1 = require("./_collections/playwright-config.factory");
|
|
17
17
|
Object.defineProperty(exports, "DyE2E_getPlaywrightConfig", { enumerable: true, get: function () { return playwright_config_factory_1.DyE2E_getPlaywrightConfig; } });
|
|
18
|
+
var ci_timeout_util_1 = require("./_collections/ci-timeout.util");
|
|
19
|
+
Object.defineProperty(exports, "DyE2E_ciTimeout", { enumerable: true, get: function () { return ci_timeout_util_1.DyE2E_ciTimeout; } });
|
|
20
|
+
Object.defineProperty(exports, "DYE2E_DEFAULT_CI_TIMEOUT_FACTOR", { enumerable: true, get: function () { return ci_timeout_util_1.DYE2E_DEFAULT_CI_TIMEOUT_FACTOR; } });
|
|
18
21
|
var global_setup_factory_1 = require("./_collections/global-setup.factory");
|
|
22
|
+
Object.defineProperty(exports, "DyE2E_describeProbeFailure", { enumerable: true, get: function () { return global_setup_factory_1.DyE2E_describeProbeFailure; } });
|
|
19
23
|
Object.defineProperty(exports, "DyE2E_getGlobalSetup", { enumerable: true, get: function () { return global_setup_factory_1.DyE2E_getGlobalSetup; } });
|
|
24
|
+
Object.defineProperty(exports, "DyE2E_resolveReachabilityUrl", { enumerable: true, get: function () { return global_setup_factory_1.DyE2E_resolveReachabilityUrl; } });
|
|
20
25
|
var viewport_preset_resolver_util_1 = require("./_collections/viewport-preset-resolver.util");
|
|
21
26
|
Object.defineProperty(exports, "DyE2E_resolveViewportPreset", { enumerable: true, get: function () { return viewport_preset_resolver_util_1.DyE2E_resolveViewportPreset; } });
|
|
22
27
|
var playwright_viewport_presets_const_1 = require("./_collections/constants/playwright-viewport-presets.const");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/presets/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,2EAA+E;AAAtE,iIAAA,yBAAyB,OAAA;AAGlC,0GAA0G;AAC1G,sFAAqF;AAA5E,sIAAA,yBAAyB,OAAA;AAClC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/presets/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,2EAA+E;AAAtE,iIAAA,yBAAyB,OAAA;AAGlC,0GAA0G;AAC1G,sFAAqF;AAA5E,sIAAA,yBAAyB,OAAA;AAClC,kEAAkG;AAAzF,kHAAA,eAAe,OAAA;AAAE,kIAAA,+BAA+B,OAAA;AACzD,4EAI6C;AAH3C,kIAAA,0BAA0B,OAAA;AAC1B,4HAAA,oBAAoB,OAAA;AACpB,oIAAA,4BAA4B,OAAA;AAE9B,8FAA2F;AAAlF,4IAAA,2BAA2B,OAAA;AACpC,gHAIoE;AAHlE,4IAAA,uBAAuB,OAAA;AACvB,2IAAA,sBAAsB,OAAA;AACtB,2IAAA,sBAAsB,OAAA;AAaxB,iEAAiE;AACpD,QAAA,wBAAwB,GAAa,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,CAAC"}
|
|
@@ -22,7 +22,9 @@ export declare const DYE2E_NOTIFICATION_BINDING_NAME: string;
|
|
|
22
22
|
export declare const DYE2E_NOTIFICATION_DETECTOR_PAGE_SCRIPT: string;
|
|
23
23
|
/**
|
|
24
24
|
* Page-side expression: the visible error banners / inline error texts at this moment (not toasts — e.g. a login
|
|
25
|
-
* form showing a raw HTTP error). Only really visible elements, deduplicated by tag + text
|
|
25
|
+
* form showing a raw HTTP error). Only really visible elements, deduplicated by tag + text; an element INSIDE an
|
|
26
|
+
* already counted banner is part of it, not a new one (measured: a `role=alert` box with its `.error-text` and icon
|
|
27
|
+
* was counted three times). PURE JavaScript.
|
|
26
28
|
*/
|
|
27
29
|
export declare const DYE2E_VISIBLE_ERRORS_PAGE_EXPRESSION: string;
|
|
28
30
|
//# sourceMappingURL=notification-detector-page-script.const.d.ts.map
|
package/build/_modules/runtime/_collections/notification-detector-page-script.const.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-detector-page-script.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/runtime/_collections/notification-detector-page-script.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAyC,CAAC;AAExF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uCAAuC,EAAE,MA6GrD,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"notification-detector-page-script.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/runtime/_collections/notification-detector-page-script.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAyC,CAAC;AAExF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uCAAuC,EAAE,MA6GrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,EAAE,MA2BlD,CAAC"}
|
|
@@ -134,7 +134,9 @@ exports.DYE2E_NOTIFICATION_DETECTOR_PAGE_SCRIPT = `
|
|
|
134
134
|
`;
|
|
135
135
|
/**
|
|
136
136
|
* Page-side expression: the visible error banners / inline error texts at this moment (not toasts — e.g. a login
|
|
137
|
-
* form showing a raw HTTP error). Only really visible elements, deduplicated by tag + text
|
|
137
|
+
* form showing a raw HTTP error). Only really visible elements, deduplicated by tag + text; an element INSIDE an
|
|
138
|
+
* already counted banner is part of it, not a new one (measured: a `role=alert` box with its `.error-text` and icon
|
|
139
|
+
* was counted three times). PURE JavaScript.
|
|
138
140
|
*/
|
|
139
141
|
exports.DYE2E_VISIBLE_ERRORS_PAGE_EXPRESSION = `
|
|
140
142
|
(function () {
|
|
@@ -142,6 +144,7 @@ exports.DYE2E_VISIBLE_ERRORS_PAGE_EXPRESSION = `
|
|
|
142
144
|
'.text-red-200', '.text-red-500', '.text-red-600', '.text-red-700', '[role="alert"]'];
|
|
143
145
|
var out = [];
|
|
144
146
|
var seen = {};
|
|
147
|
+
var picked = [];
|
|
145
148
|
var found = document.querySelectorAll(selectors.join(','));
|
|
146
149
|
for (var i = 0; i < found.length; i++) {
|
|
147
150
|
var el = found[i];
|
|
@@ -153,7 +156,11 @@ exports.DYE2E_VISIBLE_ERRORS_PAGE_EXPRESSION = `
|
|
|
153
156
|
style.visibility !== 'hidden' && style.display !== 'none';
|
|
154
157
|
var key = el.tagName + '|' + text;
|
|
155
158
|
if (!visible || seen[key]) { continue; }
|
|
159
|
+
var inside = false;
|
|
160
|
+
for (var j = 0; j < picked.length; j++) { if (picked[j].contains(el)) { inside = true; break; } }
|
|
161
|
+
if (inside) { continue; }
|
|
156
162
|
seen[key] = true;
|
|
163
|
+
picked.push(el);
|
|
157
164
|
out.push({ tag: el.tagName.toLowerCase(), cls: String(el.className || '').slice(0, 120), text: text.slice(0, 260) });
|
|
158
165
|
}
|
|
159
166
|
return out;
|