@futdevpro/dynamo-e2e 1.18.37 → 1.18.39
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 +41 -0
- package/README.md +23 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js +45 -2
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts +0 -2
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js +2 -10
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.d.ts +53 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.js +203 -0
- package/build/_modules/ui-check/_collections/detectors/error-destination.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts +4 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js +6 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-guard.util.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js +3 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts +9 -2
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.js +15 -3
- package/build/_modules/ui-check/_collections/ui-check-page.util.js.map +1 -1
- package/build/_modules/ui-check/index.d.ts +1 -0
- package/build/_modules/ui-check/index.d.ts.map +1 -1
- package/build/_modules/ui-check/index.js +1 -0
- package/build/_modules/ui-check/index.js.map +1 -1
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.d.ts +63 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.js +104 -0
- package/build/_modules/visual-gate/_collections/blocking-overlays.util.js.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.d.ts +13 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.js +28 -0
- package/build/_modules/visual-gate/_collections/visual-gate-defaults.const.js.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.d.ts +76 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.d.ts.map +1 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.js +153 -0
- package/build/_modules/visual-gate/_collections/visual-gate.util.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.d.ts +14 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-case.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.d.ts +11 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-finding.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.d.ts +8 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-language.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.d.ts +14 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-layout.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.d.ts +10 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-page.interface.js.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.d.ts +8 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.d.ts.map +1 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.js +3 -0
- package/build/_modules/visual-gate/_models/visual-gate-viewport.interface.js.map +1 -0
- package/build/_modules/visual-gate/index.d.ts +15 -0
- package/build/_modules/visual-gate/index.d.ts.map +1 -0
- package/build/_modules/visual-gate/index.js +31 -0
- package/build/_modules/visual-gate/index.js.map +1 -0
- package/build/index.js +1 -1
- package/package.json +10 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,47 @@
|
|
|
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.39] — 2026-11-02 — `/visual-gate`: the visual regression gate, first slice (R1-72 d)
|
|
7
|
+
|
|
8
|
+
- **Why** (owner, 2026-11-02 21:39: the credit service's login "badly out of shape", "a review tool is needed";
|
|
9
|
+
`IN-2026-11-02-R1-72` (d)): the key pages, HU + EN, 1440 + 390, red in the CI when a page falls apart, disappears
|
|
10
|
+
or changes. The products wire it in.
|
|
11
|
+
- **`DyE2E_BlockingOverlays_Util`**: closes the two overlays of a TEST deployment through the app's own buttons
|
|
12
|
+
(the ngx-dynamo storage service writes a control record and may encrypt, so a hand-made `localStorage` value is
|
|
13
|
+
not reliably valid): the TEST warning by its panel class (`.dynx-test-ribbon-warning-dialog`; every "do not show
|
|
14
|
+
again" box ticked, so the ribbon is not in the screenshot either), the cookie bar by its test id (necessary
|
|
15
|
+
only). Language-neutral hooks. `prepareStorageState({ browser, baseUrl, locale })` returns the state to start
|
|
16
|
+
every case from, once per language; it fails loudly when an overlay is still visible after closing it.
|
|
17
|
+
Nothing to close (production) is not an error.
|
|
18
|
+
- **`DyE2E_VisualGate_Util`**: `cases({ pages })` (page × language × viewport, ids `<page>-<lang>-<viewport>`,
|
|
19
|
+
duplicate names refused); `inspect(page)` — an overlay still covering the page, `page-empty` (fewer than 20
|
|
20
|
+
visible characters or 5 visible elements), `horizontal-overflow` (the widest element named); `assertPage(page,
|
|
21
|
+
case)` — those first, with their reason, then `toHaveScreenshot(<id>.png)` (full page, animations off, masks,
|
|
22
|
+
2 % tolerance).
|
|
23
|
+
- **Measured live** on the credit TEST `/login` (the real ngx-dynamo dialog + cookie bar): 4 / 4 cases closed both
|
|
24
|
+
overlays (the ribbon hidden too), HU and EN by the locale, no finding. ⚠️ A layout like the credit login before
|
|
25
|
+
ngx-fdp-templates 20.20.292 (a form across the whole page) is caught only by the baseline comparison, not by
|
|
26
|
+
the cheap checks.
|
|
27
|
+
- 7 specs (4 on a real Chromium, fixture pages), 4 mutants killed; 620 / 0.
|
|
28
|
+
## [01.18.38] — 2026-11-01 — `/ui-check`: `error-destination`, a press that lands on an error (BFR-FLEET-012 ②)
|
|
29
|
+
|
|
30
|
+
- **`error-destination`** (`press-leads-to-error`; owner, 2026-10-26, `IN-2026-10-26-ORC-02`: "…ha valamire
|
|
31
|
+
rákattintunk, az nem egy 404 vagy valami not found, vagy nem egy error page-et ad", the Adventor profile picture
|
|
32
|
+
led to an account "not found"): every button-like control AND every link to another page of the same origin is
|
|
33
|
+
pressed on a fresh page; a finding when (1) the document answered HTTP 4xx / 5xx, (2) a short "not found" /
|
|
34
|
+
error text appeared that was not there before the press (EN + HU, at most 80 characters), or (3) an xhr / fetch
|
|
35
|
+
of the press answered 404 / 410 / 5xx. One finding per press, every signal in `details`. A request that already
|
|
36
|
+
fails while the page loads is not blamed; 401 / 403 is noted, not judged. Same guard as `dead-control` (a link
|
|
37
|
+
is denied by its destination path too). `dead-control` counts all of these as an effect, so it stays silent.
|
|
38
|
+
- **`listControls` kind `link`**: same-origin links to another page, one per destination (no hash-only, mailto /
|
|
39
|
+
tel / javascript, download or new-window link); `DyE2E_UICheckControl_Interface.href`.
|
|
40
|
+
- **`DyE2E_UICheckPage_Util.findAgain`**: the control on the reloaded page, shared (was private in `dead-control`).
|
|
41
|
+
- **Deny list** (`DyE2E_UICheckGuard_Util.defaultDenyPattern`): `unsubscri`, `leiratkoz` — a GET link may act, and
|
|
42
|
+
"unsubscribe" has no word boundary before "subscri" (closing review).
|
|
43
|
+
- A **candidate**: fixtures of the three measured forms fire (a link to a 404 page, an in-app "not found" view after
|
|
44
|
+
a 404 request, a request answering 500), the fixed twins and the quiet cases (a price range "500 - 1000 Ft"
|
|
45
|
+
too) stay silent. 5 specs, 10 mutants killed. The live run on the Adventor profile picture is the missing half.
|
|
46
|
+
|
|
6
47
|
## [01.18.37] — 2026-10-31 — `/ui-check`: two new candidate detectors from the owner's requests (BFR-FLEET-012 ① ④)
|
|
7
48
|
|
|
8
49
|
- **`shifted-scroll`** (`scroll-start-out-of-reach`; owner, 2026-10-26, `IN-2026-10-26-ORC-01`, the Logosz
|
package/README.md
CHANGED
|
@@ -84,6 +84,29 @@ const report = await DyE2E_UICheckRunner_Util.run(page, { url: page.url(), accou
|
|
|
84
84
|
DyE2E_UICheckRunner_Util.assertClean(report); // throws with every finding's measurement
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
+
- `@futdevpro/dynamo-e2e/visual-gate` — the visual regression gate: closes the TEST warning and the cookie bar through
|
|
88
|
+
the app (`DyE2E_BlockingOverlays_Util.prepareStorageState`, once per language), then checks each key page in
|
|
89
|
+
HU + EN at 1440 + 390 (`DyE2E_VisualGate_Util.cases`): red when an overlay still covers it, it shows (almost)
|
|
90
|
+
nothing, it is wider than the screen, or it differs from the committed baseline (`toHaveScreenshot`).
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { DyE2E_BlockingOverlays_Util, DyE2E_VisualGate_Util } from '@futdevpro/dynamo-e2e/visual-gate';
|
|
94
|
+
|
|
95
|
+
for (const gateCase of DyE2E_VisualGate_Util.cases({ pages: [ { name: 'login', path: '/login' } ] })) {
|
|
96
|
+
test(`| visual: ${gateCase.id}`, async ({ browser }) => {
|
|
97
|
+
const { storageState } = await DyE2E_BlockingOverlays_Util.prepareStorageState({
|
|
98
|
+
browser, baseUrl: BASE_URL, locale: gateCase.language.locale,
|
|
99
|
+
});
|
|
100
|
+
const context = await browser.newContext({ storageState, locale: gateCase.language.locale,
|
|
101
|
+
viewport: { width: gateCase.viewport.width, height: gateCase.viewport.height } });
|
|
102
|
+
const page = await context.newPage();
|
|
103
|
+
|
|
104
|
+
await page.goto(BASE_URL + gateCase.page.path);
|
|
105
|
+
await DyE2E_VisualGate_Util.assertPage(page, gateCase); // layout first, then the screenshot comparison
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
87
110
|
## Playwright preset — CI timeouts and the failure budget
|
|
88
111
|
|
|
89
112
|
```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page-scripts.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ui-check-page-scripts.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4jB3E,CAAC"}
|
|
@@ -8,7 +8,9 @@ exports.DyE2E_UICheckPageScripts_Const = void 0;
|
|
|
8
8
|
exports.DyE2E_UICheckPageScripts_Const = {
|
|
9
9
|
/**
|
|
10
10
|
* Lists the visible, enabled controls of one kind. `press`: buttons and button-like elements (not form submits, not
|
|
11
|
-
* checkbox / switch internals); `toggle`: checkboxes and switches
|
|
11
|
+
* checkbox / switch internals); `toggle`: checkboxes and switches; `link` (BFR-FLEET-012 ②): links to ANOTHER page of
|
|
12
|
+
* the same origin (no hash-only, mailto / tel / javascript, download or new-window link), one per destination. Each
|
|
13
|
+
* comes with a unique CSS path.
|
|
12
14
|
*/
|
|
13
15
|
listControls: `(arg) => {
|
|
14
16
|
const cssPath = (el) => {
|
|
@@ -37,7 +39,20 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
37
39
|
|| !!el.closest('[inert], fieldset[disabled]');
|
|
38
40
|
const selector = arg.kind === 'toggle'
|
|
39
41
|
? 'input[type="checkbox"], [role="checkbox"], [role="switch"]'
|
|
40
|
-
:
|
|
42
|
+
: arg.kind === 'link' ? 'a[href]'
|
|
43
|
+
: 'button, [role="button"], a:not([href]), a[href="#"], a[href=""], [role="menuitem"], [role="tab"]';
|
|
44
|
+
/** The destination of a link to another page of this origin, or null. */
|
|
45
|
+
const destination = (el) => {
|
|
46
|
+
const raw = el.getAttribute('href') || '';
|
|
47
|
+
if (!raw || raw.startsWith('#') || /^(mailto|tel|javascript|data|blob):/i.test(raw)) return null;
|
|
48
|
+
if (el.hasAttribute('download') || (el.target && el.target !== '_self')) return null;
|
|
49
|
+
let url;
|
|
50
|
+
try { url = new URL(el.href, location.href); } catch (e) { return null; }
|
|
51
|
+
if (url.origin !== location.origin) return null;
|
|
52
|
+
if (url.pathname === location.pathname && url.search === location.search) return null;
|
|
53
|
+
return url.pathname + url.search;
|
|
54
|
+
};
|
|
55
|
+
const seen = new Set();
|
|
41
56
|
// a modal dialog open (a visible dialog + a backdrop, or aria-modal) ⇒ only ITS controls are reachable
|
|
42
57
|
const dialogs = Array.from(document.querySelectorAll(
|
|
43
58
|
'[role="dialog"], [role="alertdialog"], mat-dialog-container, .mat-mdc-dialog-container, dialog[open]'))
|
|
@@ -54,8 +69,11 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
54
69
|
if (el.closest('input, select, textarea')) continue;
|
|
55
70
|
}
|
|
56
71
|
if (arg.kind === 'toggle' && el.tagName !== 'INPUT' && el.querySelector('input[type="checkbox"]')) continue;
|
|
72
|
+
const href = arg.kind === 'link' ? destination(el) : null;
|
|
73
|
+
if (arg.kind === 'link' && (!href || seen.has(href))) continue;
|
|
57
74
|
const probe = el.tagName === 'INPUT' && !visible(el) ? (el.closest('label, [class*="checkbox"]') || el) : el;
|
|
58
75
|
if (!visible(probe) || disabled(el)) continue;
|
|
76
|
+
if (href) seen.add(href);
|
|
59
77
|
const labelEl = el.tagName === 'INPUT'
|
|
60
78
|
? (el.labels && el.labels[0]) || el.closest('label, [class*="checkbox"], [class*="toggle"]') : el;
|
|
61
79
|
out.push({
|
|
@@ -69,6 +87,7 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
69
87
|
// BFR-MASTERPROMPTER-125 1. — the current page / the selected tab: pressing it again is deliberately inert
|
|
70
88
|
current: (!!el.getAttribute('aria-current') && el.getAttribute('aria-current') !== 'false')
|
|
71
89
|
|| (el.getAttribute('role') === 'tab' && el.getAttribute('aria-selected') === 'true'),
|
|
90
|
+
href: href,
|
|
72
91
|
});
|
|
73
92
|
if (out.length >= arg.max) break;
|
|
74
93
|
}
|
|
@@ -520,5 +539,29 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
520
539
|
}
|
|
521
540
|
return { rows: out, total: total };
|
|
522
541
|
}`,
|
|
542
|
+
/**
|
|
543
|
+
* BFR-FLEET-012 ② — the visible short texts that say "error page" / "not found" (`arg.source` + `arg.flags`: the
|
|
544
|
+
* pattern; `arg.maxLength`: longer texts are prose, not a status line; `arg.max`: list cap). An element's OWN text
|
|
545
|
+
* counts (its direct text nodes), so a wrapper is not reported for its child; the document title counts too.
|
|
546
|
+
*/
|
|
547
|
+
errorTexts: `(arg) => {
|
|
548
|
+
const pattern = new RegExp(arg.source, arg.flags);
|
|
549
|
+
const out = [];
|
|
550
|
+
const title = (document.title || '').replace(/\\s+/g, ' ').trim();
|
|
551
|
+
if (title && title.length <= arg.maxLength && pattern.test(title)) out.push('title: ' + title);
|
|
552
|
+
for (const el of Array.from(document.body ? document.body.querySelectorAll('*') : [])) {
|
|
553
|
+
if (out.length >= arg.max) break;
|
|
554
|
+
if (/^(SCRIPT|STYLE|NOSCRIPT|TEMPLATE|svg)$/i.test(el.tagName)) continue;
|
|
555
|
+
const own = Array.from(el.childNodes).filter((n) => n.nodeType === 3).map((n) => n.textContent).join(' ')
|
|
556
|
+
.replace(/\\s+/g, ' ').trim();
|
|
557
|
+
if (!own || own.length > arg.maxLength || !pattern.test(own)) continue;
|
|
558
|
+
const r = el.getBoundingClientRect();
|
|
559
|
+
const cs = getComputedStyle(el);
|
|
560
|
+
if (r.width <= 0 || r.height <= 0 || cs.visibility === 'hidden' || cs.display === 'none') continue;
|
|
561
|
+
if (typeof el.checkVisibility === 'function' && !el.checkVisibility()) continue;
|
|
562
|
+
if (!out.includes(own)) out.push(own);
|
|
563
|
+
}
|
|
564
|
+
return out;
|
|
565
|
+
}`,
|
|
523
566
|
};
|
|
524
567
|
//# sourceMappingURL=ui-check-page-scripts.const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page-scripts.const.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,8BAA8B,GAAqC;IAE9E
|
|
1
|
+
{"version":3,"file":"ui-check-page-scripts.const.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,8BAA8B,GAAqC;IAE9E;;;;;OAKG;IACH,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgFZ;IAEF,gHAAgH;IAChH,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkElB;IAEF,iEAAiE;IACjE,iBAAiB,EAAE;;;;;;;IAOjB;IAEF;;;;;OAKG;IACH,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwCf;IAEF,kEAAkE;IAClE,WAAW,EAAE;;;;;IAKX;IAEF,kEAAkE;IAClE,WAAW,EAAE;;;;;;IAMX;IAEF;;;;OAIG;IACH,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCZ;IAEF,gHAAgH;IAChH,sHAAsH;IACtH,2GAA2G;IAC3G,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+Df;IAEF,qHAAqH;IACrH,6GAA6G;IAC7G,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8CX;IAEF,6GAA6G;IAC7G,WAAW,EAAE;;;;;IAKX;IAEF,qGAAqG;IACrG,kBAAkB,EAAE;;;;;;;IAOlB;IAEF,oHAAoH;IACpH,sHAAsH;IACtH,8GAA8G;IAC9G,kDAAkD;IAClD,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6Ed;IAEF,kHAAkH;IAClH,gHAAgH;IAChH,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiDf;IAEF;;;;OAIG;IACH,UAAU,EAAE;;;;;;;;;;;;;;;;;;IAkBV;CACH,CAAC"}
|
|
@@ -28,8 +28,6 @@ export declare class DyE2E_DeadControl_Detector implements DyE2E_UICheckDetector
|
|
|
28
28
|
* ancestors) is filled with `probeText`, and the control is pressed again. `null` when there is no such input.
|
|
29
29
|
*/
|
|
30
30
|
private pressWithInput;
|
|
31
|
-
/** The same control on the reloaded page (by tag, test id, label and text). */
|
|
32
|
-
private findAgain;
|
|
33
31
|
/** The findings of one press. */
|
|
34
32
|
private judge;
|
|
35
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-control.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAS1F;;;;;;;;;;GAUG;AACH,qBAAa,0BAA2B,YAAW,+BAA+B;IAEhF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAkB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA4B;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAmE;IAC/F,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAQ;IACrC,KAAK,EAAE,MAAM,EAAE,CAAM;IAEf,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"dead-control.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAS1F;;;;;;;;;;GAUG;AACH,qBAAa,0BAA2B,YAAW,+BAA+B;IAEhF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAkB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA4B;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAmE;IAC/F,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAQ;IACrC,KAAK,EAAE,MAAM,EAAE,CAAM;IAEf,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;IA0EzG,qFAAqF;IACrF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAO;IAExC;;;OAGG;YACW,cAAc;IA0B5B,iCAAiC;IACjC,OAAO,CAAC,KAAK;CAwCd"}
|
|
@@ -53,7 +53,7 @@ class DyE2E_DeadControl_Detector {
|
|
|
53
53
|
for (const control of listed.controls.filter((c) => !c.current)) {
|
|
54
54
|
await ui_check_page_util_1.DyE2E_UICheckPage_Util.reload(page, context, background);
|
|
55
55
|
// an earlier press may have changed the page for good (a stored choice) ⇒ find the control again by identity
|
|
56
|
-
const current = await
|
|
56
|
+
const current = await ui_check_page_util_1.DyE2E_UICheckPage_Util.findAgain(page, context, control, 'press');
|
|
57
57
|
if (!current) {
|
|
58
58
|
this.notes.push(`"${control.text || control.ariaLabel || control.testId}" (${control.selector}) was not ` +
|
|
59
59
|
'found again after the reload — not measured.');
|
|
@@ -93,7 +93,7 @@ class DyE2E_DeadControl_Detector {
|
|
|
93
93
|
*/
|
|
94
94
|
async pressWithInput(page, context, control, guard, background) {
|
|
95
95
|
await ui_check_page_util_1.DyE2E_UICheckPage_Util.reload(page, context, background);
|
|
96
|
-
const current = await
|
|
96
|
+
const current = await ui_check_page_util_1.DyE2E_UICheckPage_Util.findAgain(page, context, control, 'press');
|
|
97
97
|
if (!current) {
|
|
98
98
|
return null;
|
|
99
99
|
}
|
|
@@ -105,14 +105,6 @@ class DyE2E_DeadControl_Detector {
|
|
|
105
105
|
return { input: input,
|
|
106
106
|
effect: await ui_check_page_util_1.DyE2E_UICheckPage_Util.press(page, current.selector, guard, context, background) };
|
|
107
107
|
}
|
|
108
|
-
/** The same control on the reloaded page (by tag, test id, label and text). */
|
|
109
|
-
async findAgain(page, context, control) {
|
|
110
|
-
const listed = await ui_check_page_util_1.DyE2E_UICheckPage_Util.listControls(page, context, 'press');
|
|
111
|
-
const wanted = ui_check_page_util_1.DyE2E_UICheckPage_Util.signature(control);
|
|
112
|
-
return listed.controls.find((c) => c.selector === control.selector
|
|
113
|
-
&& ui_check_page_util_1.DyE2E_UICheckPage_Util.signature(c) === wanted)
|
|
114
|
-
?? listed.controls.find((c) => ui_check_page_util_1.DyE2E_UICheckPage_Util.signature(c) === wanted);
|
|
115
|
-
}
|
|
116
108
|
/** The findings of one press. */
|
|
117
109
|
judge(control, effect, context, deniedCount) {
|
|
118
110
|
const label = control.text || control.ariaLabel || control.testId || control.selector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-control.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":";;;AAKA,0FAA0F;AAC1F,gEAAsG;AACtG,8DAI+B;AAE/B;;;;;;;;;;GAUG;AACH,MAAa,0BAA0B;IAE5B,EAAE,GAAW,cAAc,CAAC;IAC5B,UAAU,GAAW,wBAAwB,CAAC;IAC9C,WAAW,GAAW,+DAA+D,CAAC;IACtF,MAAM,GAAkC;QAC/C,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,YAAY;KACjF,CAAC;IACO,WAAW,GAAY,IAAI,CAAC;IACrC,KAAK,GAAa,EAAE,CAAC;IAErB,KAAK,CAAC,GAAG,CAAC,IAAU,EAAE,OAAuC;QAC3D,MAAM,KAAK,GAAwC,MAAM,6CAAuB,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAqC,EAAE,CAAC;QACtD,gGAAgG;QAChG,MAAM,UAAU,GAAgB,IAAI,GAAG,EAAU,CAAC;QAElD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,2CAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC/D,gHAAgH;YAChH,uGAAuG;YACvG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,IAAI,8DAA8D;oBAC5G,0BAA0B,CAAE,GAAG,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,MAAM,GACV,MAAM,2CAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAC,MAAM;qBAC3F,GAAG,CAAC,CAAC,CAAiC,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9G,CAAC;YACD,kHAAkH;YAClH,MAAM,WAAW,GACf,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAiC,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAEtF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,uEAAuE;oBAC1G,WAAW,CAAC,GAAG,CAAC,CAAC,CAAiC,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;yBACrG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAiC,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzG,MAAM,2CAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC/D,6GAA6G;gBAC7G,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"dead-control.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { DyE2E_UICheckContext_Interface } from '../../_models/ui-check-context.interface';
|
|
3
|
+
import { DyE2E_UICheckDetector_Interface, DyE2E_UICheckOrigin_Interface } from '../../_models/ui-check-detector.interface';
|
|
4
|
+
import { DyE2E_UICheckFinding_Interface } from '../../_models/ui-check-finding.interface';
|
|
5
|
+
/**
|
|
6
|
+
* A press that lands on an ERROR (BFR-FLEET-012 ②): every visible, enabled button-like control AND every link to
|
|
7
|
+
* another page of the same origin is pressed on a FRESH page, and the destination is measured:
|
|
8
|
+
* 1. the page navigated, and the document answered HTTP 4xx / 5xx;
|
|
9
|
+
* 2. a short "not found" / "error" status text APPEARED (404, "not found", "nem található", "hiba történt" …) that
|
|
10
|
+
* the page did not show before the press — this is how a single-page app shows a missing record or route;
|
|
11
|
+
* 3. an xhr / fetch the press caused answered 404 / 410 / 5xx (a request that fails on load too is not blamed).
|
|
12
|
+
* `dead-control` takes any of these as an EFFECT (the press "did something"), so it stays silent on them.
|
|
13
|
+
*
|
|
14
|
+
* One finding per press, the strongest signal first (HTTP document error, then the error text, then the failed
|
|
15
|
+
* request); every measured signal is in `details`. 401 / 403 answers are noted, not judged: the anonymous or
|
|
16
|
+
* throwaway account may lack the right on purpose.
|
|
17
|
+
*
|
|
18
|
+
* Safety: the same guard as `dead-control` (`DyE2E_UICheckGuard_Util`) — test host + anonymous / throwaway account,
|
|
19
|
+
* the deny list (for a link its destination path too), mutating requests aborted, navigation off the host aborted.
|
|
20
|
+
*
|
|
21
|
+
* Origin: the owner, 2026-10-26 (`IN-2026-10-26-ORC-02`): "…ha valamire rákattintunk, az nem egy 404 vagy valami not
|
|
22
|
+
* found, vagy nem egy error page-et ad" — the Adventor profile picture led to an account "not found" page.
|
|
23
|
+
*/
|
|
24
|
+
export declare class DyE2E_ErrorDestination_Detector implements DyE2E_UICheckDetector_Interface {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly errorClass: string;
|
|
27
|
+
readonly description: string;
|
|
28
|
+
readonly origin: DyE2E_UICheckOrigin_Interface;
|
|
29
|
+
readonly interactive: boolean;
|
|
30
|
+
notes: string[];
|
|
31
|
+
/** Short status texts of an error page (EN + HU). A text longer than `maxTextLength` is prose, never matched. */
|
|
32
|
+
static readonly errorTextPattern: RegExp;
|
|
33
|
+
/** The longest own text of an element that still counts as a status line, characters. */
|
|
34
|
+
static readonly maxTextLength: number;
|
|
35
|
+
/** How many error texts are read per page. */
|
|
36
|
+
static readonly maxTexts: number;
|
|
37
|
+
/** Whether an xhr / fetch status is a failure: missing (404, 410) or a broken server (5xx). */
|
|
38
|
+
static isFailedStatus(status: number): boolean;
|
|
39
|
+
run(page: Page, context: DyE2E_UICheckContext_Interface): Promise<DyE2E_UICheckFinding_Interface[]>;
|
|
40
|
+
/** Presses one control on a fresh page and judges where it landed. */
|
|
41
|
+
private pressOne;
|
|
42
|
+
/** The one finding of a press (or none): the HTTP document error, else a new error text, else a failed request. */
|
|
43
|
+
private judge;
|
|
44
|
+
/** Reloads the page; the xhr / fetch paths that fail while it loads go to `failingOnLoad`. */
|
|
45
|
+
private reload;
|
|
46
|
+
/** The visible error texts of the page now (empty when the page is gone mid-navigation). */
|
|
47
|
+
private errorTexts;
|
|
48
|
+
/** How a control is named in a note or a finding. */
|
|
49
|
+
private label;
|
|
50
|
+
/** The path + query of a URL (the URL itself when it does not parse). */
|
|
51
|
+
private pathOf;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=error-destination.detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-destination.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/error-destination.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAS1F;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,+BAAgC,YAAW,+BAA+B;IAErF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAuB;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA0B;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CACuB;IACnD,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAQ;IACrC,KAAK,EAAE,MAAM,EAAE,CAAM;IAErB,iHAAiH;IACjH,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAMtB;IAElB,yFAAyF;IACzF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAM;IAE3C,8CAA8C;IAC9C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAM;IAEtC,+FAA+F;IAC/F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIxC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAwCzG,sEAAsE;YACxD,QAAQ;IA0DtB,mHAAmH;IACnH,OAAO,CAAC,KAAK;IA0Cb,8FAA8F;YAChF,MAAM;IAqBpB,4FAA4F;YAC9E,UAAU;IASxB,qDAAqD;IACrD,OAAO,CAAC,KAAK;IAKb,yEAAyE;IACzE,OAAO,CAAC,MAAM;CASf"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_ErrorDestination_Detector = void 0;
|
|
4
|
+
const ui_check_page_scripts_const_1 = require("../constants/ui-check-page-scripts.const");
|
|
5
|
+
const ui_check_guard_util_1 = require("../ui-check-guard.util");
|
|
6
|
+
const ui_check_page_util_1 = require("../ui-check-page.util");
|
|
7
|
+
/**
|
|
8
|
+
* A press that lands on an ERROR (BFR-FLEET-012 ②): every visible, enabled button-like control AND every link to
|
|
9
|
+
* another page of the same origin is pressed on a FRESH page, and the destination is measured:
|
|
10
|
+
* 1. the page navigated, and the document answered HTTP 4xx / 5xx;
|
|
11
|
+
* 2. a short "not found" / "error" status text APPEARED (404, "not found", "nem található", "hiba történt" …) that
|
|
12
|
+
* the page did not show before the press — this is how a single-page app shows a missing record or route;
|
|
13
|
+
* 3. an xhr / fetch the press caused answered 404 / 410 / 5xx (a request that fails on load too is not blamed).
|
|
14
|
+
* `dead-control` takes any of these as an EFFECT (the press "did something"), so it stays silent on them.
|
|
15
|
+
*
|
|
16
|
+
* One finding per press, the strongest signal first (HTTP document error, then the error text, then the failed
|
|
17
|
+
* request); every measured signal is in `details`. 401 / 403 answers are noted, not judged: the anonymous or
|
|
18
|
+
* throwaway account may lack the right on purpose.
|
|
19
|
+
*
|
|
20
|
+
* Safety: the same guard as `dead-control` (`DyE2E_UICheckGuard_Util`) — test host + anonymous / throwaway account,
|
|
21
|
+
* the deny list (for a link its destination path too), mutating requests aborted, navigation off the host aborted.
|
|
22
|
+
*
|
|
23
|
+
* Origin: the owner, 2026-10-26 (`IN-2026-10-26-ORC-02`): "…ha valamire rákattintunk, az nem egy 404 vagy valami not
|
|
24
|
+
* found, vagy nem egy error page-et ad" — the Adventor profile picture led to an account "not found" page.
|
|
25
|
+
*/
|
|
26
|
+
class DyE2E_ErrorDestination_Detector {
|
|
27
|
+
id = 'error-destination';
|
|
28
|
+
errorClass = 'press-leads-to-error';
|
|
29
|
+
description = 'A control or link whose press lands on an error: an HTTP 4xx / 5xx page, a ' +
|
|
30
|
+
'"not found" / error text, or a failed request.';
|
|
31
|
+
origin = {
|
|
32
|
+
code: 'BFR-FLEET-012', foundBy: 'owner (IN-2026-10-26-ORC-02, Adventor profile picture)', date: '2026-10-26',
|
|
33
|
+
};
|
|
34
|
+
interactive = true;
|
|
35
|
+
notes = [];
|
|
36
|
+
/** Short status texts of an error page (EN + HU). A text longer than `maxTextLength` is prose, never matched. */
|
|
37
|
+
static errorTextPattern = new RegExp([
|
|
38
|
+
'\\bnot\\s+found\\b', 'nem\\s+található', 'nem\\s+találjuk', 'nem\\s+létezik', '\\bdoes\\s+not\\s+exist\\b',
|
|
39
|
+
'\\bdoesn\'t\\s+exist\\b', '\\bsomething\\s+went\\s+wrong\\b', 'hiba\\s+történt', 'váratlan\\s+hiba',
|
|
40
|
+
'\\bunexpected\\s+error\\b', '\\bserver\\s+error\\b', '^\\s*(?:404|500|502|503)\\s*$',
|
|
41
|
+
// a bare "500 - …" is NOT matched: "500 - 1000 Ft" is a price range (closing review, 2026-11-01)
|
|
42
|
+
'\\b(?:error|hiba|http|status)\\s*:?\\s*(?:404|500|502|503)\\b',
|
|
43
|
+
].join('|'), 'i');
|
|
44
|
+
/** The longest own text of an element that still counts as a status line, characters. */
|
|
45
|
+
static maxTextLength = 80;
|
|
46
|
+
/** How many error texts are read per page. */
|
|
47
|
+
static maxTexts = 20;
|
|
48
|
+
/** Whether an xhr / fetch status is a failure: missing (404, 410) or a broken server (5xx). */
|
|
49
|
+
static isFailedStatus(status) {
|
|
50
|
+
return status === 404 || status === 410 || status >= 500;
|
|
51
|
+
}
|
|
52
|
+
async run(page, context) {
|
|
53
|
+
const guard = await ui_check_guard_util_1.DyE2E_UICheckGuard_Util.installNetworkGuard(page, context);
|
|
54
|
+
const findings = [];
|
|
55
|
+
/** Console errors the page logs without any press (handed to `press`, so they are not counted as its effect). */
|
|
56
|
+
const background = new Set();
|
|
57
|
+
/** Request paths that fail while the page LOADS — never blamed on a press. */
|
|
58
|
+
const failingOnLoad = new Set();
|
|
59
|
+
this.notes = [];
|
|
60
|
+
try {
|
|
61
|
+
await this.reload(page, context, background, failingOnLoad);
|
|
62
|
+
const onLoad = await this.errorTexts(page);
|
|
63
|
+
// an error the page shows WITHOUT a press belongs to the page itself (another detector's / the reviewer's)
|
|
64
|
+
if (onLoad.length) {
|
|
65
|
+
this.notes.push(`the page itself shows ${onLoad.length} error text(s) without any press (not a press ` +
|
|
66
|
+
`finding): "${onLoad[0]}"`);
|
|
67
|
+
}
|
|
68
|
+
const kinds = ['press', 'link'];
|
|
69
|
+
for (const kind of kinds) {
|
|
70
|
+
const listed = await ui_check_page_util_1.DyE2E_UICheckPage_Util.listControls(page, context, kind);
|
|
71
|
+
if (listed.denied.length) {
|
|
72
|
+
this.notes.push(`${listed.denied.length} ${kind === 'link' ? 'link' : 'control'}(s) not pressed (deny ` +
|
|
73
|
+
'list): ' + listed.denied.map((c) => this.label(c)).join(', '));
|
|
74
|
+
}
|
|
75
|
+
for (const control of listed.controls.filter((c) => !c.current)) {
|
|
76
|
+
findings.push(...await this.pressOne(page, context, control, kind, guard, { background: background, failingOnLoad: failingOnLoad }));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
await guard.remove();
|
|
82
|
+
}
|
|
83
|
+
return findings;
|
|
84
|
+
}
|
|
85
|
+
/** Presses one control on a fresh page and judges where it landed. */
|
|
86
|
+
async pressOne(page, context, control, kind, guard, noise) {
|
|
87
|
+
await this.reload(page, context, noise.background, noise.failingOnLoad);
|
|
88
|
+
// an earlier press may have changed the page for good (a stored choice) ⇒ find the control again by identity
|
|
89
|
+
const current = await ui_check_page_util_1.DyE2E_UICheckPage_Util.findAgain(page, context, control, kind);
|
|
90
|
+
if (!current) {
|
|
91
|
+
this.notes.push(`${this.label(control)} (${control.selector}) was not found again after the reload — not ` +
|
|
92
|
+
'measured.');
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
const textsBefore = await this.errorTexts(page);
|
|
96
|
+
const answers = [];
|
|
97
|
+
const onResponse = (response) => {
|
|
98
|
+
answers.push({ url: response.url(), status: response.status(), type: response.request().resourceType(),
|
|
99
|
+
isDocument: response.request().isNavigationRequest() && response.frame() === page.mainFrame() });
|
|
100
|
+
};
|
|
101
|
+
let effect;
|
|
102
|
+
page.on('response', onResponse);
|
|
103
|
+
try {
|
|
104
|
+
effect = await ui_check_page_util_1.DyE2E_UICheckPage_Util.press(page, current.selector, guard, context, noise.background);
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
page.off('response', onResponse);
|
|
108
|
+
}
|
|
109
|
+
const textsAfter = await this.errorTexts(page);
|
|
110
|
+
if (current.href && effect.abortedRequests.some((entry) => entry === 'GET ' + new URL(current.href ?? '', effect.urlBefore).href)) {
|
|
111
|
+
this.notes.push(`${this.label(current)} → ${current.href}: the guard aborted the navigation (a payment / mail ` +
|
|
112
|
+
'path) — not measured.');
|
|
113
|
+
}
|
|
114
|
+
const forbidden = answers
|
|
115
|
+
.filter((a) => a.status === 401 || a.status === 403)
|
|
116
|
+
.map((a) => `${a.status} ${this.pathOf(a.url)}`);
|
|
117
|
+
if (forbidden.length) {
|
|
118
|
+
this.notes.push(`${this.label(current)}: ${forbidden.join(', ')} — the account may lack the right on purpose ` +
|
|
119
|
+
'(noted, not judged).');
|
|
120
|
+
}
|
|
121
|
+
return this.judge(current, effect, {
|
|
122
|
+
document: answers.find((a) => a.isDocument && a.status >= 400),
|
|
123
|
+
failedRequests: answers.filter((a) => ['xhr', 'fetch'].includes(a.type) && DyE2E_ErrorDestination_Detector.isFailedStatus(a.status)
|
|
124
|
+
&& !noise.failingOnLoad.has(this.pathOf(a.url))),
|
|
125
|
+
newTexts: textsAfter.filter((text) => !textsBefore.includes(text)),
|
|
126
|
+
}, context);
|
|
127
|
+
}
|
|
128
|
+
/** The one finding of a press (or none): the HTTP document error, else a new error text, else a failed request. */
|
|
129
|
+
judge(control, effect, signals, context) {
|
|
130
|
+
if (!signals.document && !signals.newTexts.length && !signals.failedRequests.length) {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
const label = this.label(control);
|
|
134
|
+
const requests = signals.failedRequests.slice(0, 3)
|
|
135
|
+
.map((r) => `${r.status} ${this.pathOf(r.url)}`).join(', ');
|
|
136
|
+
let measured;
|
|
137
|
+
if (signals.document) {
|
|
138
|
+
measured = `Pressing ${label} navigated to ${signals.document.url}, which answered HTTP ` +
|
|
139
|
+
`${signals.document.status}.`;
|
|
140
|
+
}
|
|
141
|
+
else if (signals.newTexts.length) {
|
|
142
|
+
measured = `Pressing ${label} led to ${effect.urlAfter}, which shows "${signals.newTexts[0]}"` +
|
|
143
|
+
(requests ? ` (failed request: ${requests}).` : '.');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
measured = `Pressing ${label} sent request(s) that failed: ${requests}.`;
|
|
147
|
+
}
|
|
148
|
+
return [{
|
|
149
|
+
detector: this.id,
|
|
150
|
+
errorClass: this.errorClass,
|
|
151
|
+
url: context.url,
|
|
152
|
+
target: ui_check_page_util_1.DyE2E_UICheckPage_Util.toTarget(control),
|
|
153
|
+
measured: measured,
|
|
154
|
+
expected: 'A control or link leads to a working page or state — never to a 404 / "not found" / error page or a ' +
|
|
155
|
+
'failed request.',
|
|
156
|
+
details: { href: control.href ?? null, urlBefore: effect.urlBefore, urlAfter: effect.urlAfter,
|
|
157
|
+
documentError: signals.document ?? null, newErrorTexts: signals.newTexts,
|
|
158
|
+
failedRequests: signals.failedRequests, pressError: effect.pressError },
|
|
159
|
+
}];
|
|
160
|
+
}
|
|
161
|
+
/** Reloads the page; the xhr / fetch paths that fail while it loads go to `failingOnLoad`. */
|
|
162
|
+
async reload(page, context, background, failingOnLoad) {
|
|
163
|
+
const onResponse = (response) => {
|
|
164
|
+
if (['xhr', 'fetch'].includes(response.request().resourceType())
|
|
165
|
+
&& DyE2E_ErrorDestination_Detector.isFailedStatus(response.status())) {
|
|
166
|
+
failingOnLoad.add(this.pathOf(response.url()));
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
page.on('response', onResponse);
|
|
170
|
+
try {
|
|
171
|
+
await ui_check_page_util_1.DyE2E_UICheckPage_Util.reload(page, context, background);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
page.off('response', onResponse);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** The visible error texts of the page now (empty when the page is gone mid-navigation). */
|
|
178
|
+
async errorTexts(page) {
|
|
179
|
+
return ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['errorTexts'], {
|
|
180
|
+
source: DyE2E_ErrorDestination_Detector.errorTextPattern.source,
|
|
181
|
+
flags: DyE2E_ErrorDestination_Detector.errorTextPattern.flags,
|
|
182
|
+
maxLength: DyE2E_ErrorDestination_Detector.maxTextLength,
|
|
183
|
+
max: DyE2E_ErrorDestination_Detector.maxTexts,
|
|
184
|
+
}).catch(() => []);
|
|
185
|
+
}
|
|
186
|
+
/** How a control is named in a note or a finding. */
|
|
187
|
+
label(control) {
|
|
188
|
+
return `"${control.text || control.ariaLabel || control.testId || control.selector}"` +
|
|
189
|
+
(control.href ? ` (→ ${control.href})` : '');
|
|
190
|
+
}
|
|
191
|
+
/** The path + query of a URL (the URL itself when it does not parse). */
|
|
192
|
+
pathOf(url) {
|
|
193
|
+
try {
|
|
194
|
+
const parsed = new URL(url);
|
|
195
|
+
return parsed.pathname + parsed.search;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return url;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
exports.DyE2E_ErrorDestination_Detector = DyE2E_ErrorDestination_Detector;
|
|
203
|
+
//# sourceMappingURL=error-destination.detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-destination.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/error-destination.detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,10 @@ export declare const DyE2E_UICheckDefaultDetectors_Const: readonly DyE2E_UICheck
|
|
|
27
27
|
* on a `column-reverse` chat; the live run on the Logosz screen is missing.
|
|
28
28
|
* - `wrapped-info-row` (BFR-FLEET-012 ④, owner 2026-10-24, MP flow cards): fires on fixtures of the two cards the
|
|
29
29
|
* owner saw and stays silent on the fixed twins; the live run on the MP cards is missing.
|
|
30
|
+
* - `error-destination` (BFR-FLEET-012 ②, owner 2026-10-26, Adventor profile picture ⇒ account "not found"):
|
|
31
|
+
* fires on fixtures of the three measured forms (a link to an HTTP 404 page, an in-app "not found" view after a
|
|
32
|
+
* failed request, a press whose request answers 500) and stays silent on the fixed twins; the live run on the
|
|
33
|
+
* Adventor profile picture is missing.
|
|
30
34
|
*/
|
|
31
35
|
export declare const DyE2E_UICheckCandidateDetectors_Const: readonly DyE2E_UICheckDetector_Interface[];
|
|
32
36
|
//# sourceMappingURL=ui-check-default-detectors.const.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-default-detectors.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-check-default-detectors.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AAUzF;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,EAAE,SAAS,+BAA+B,EAEzF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,qCAAqC,EAAE,SAAS,+BAA+B,EAQ3F,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DyE2E_UICheckCandidateDetectors_Const = exports.DyE2E_UICheckDefaultDetectors_Const = void 0;
|
|
4
4
|
const covered_control_detector_1 = require("./detectors/covered-control.detector");
|
|
5
5
|
const dead_control_detector_1 = require("./detectors/dead-control.detector");
|
|
6
|
+
const error_destination_detector_1 = require("./detectors/error-destination.detector");
|
|
6
7
|
const nested_scroll_detector_1 = require("./detectors/nested-scroll.detector");
|
|
7
8
|
const non_toggling_control_detector_1 = require("./detectors/non-toggling-control.detector");
|
|
8
9
|
const scroll_trap_detector_1 = require("./detectors/scroll-trap.detector");
|
|
@@ -38,6 +39,10 @@ exports.DyE2E_UICheckDefaultDetectors_Const = [
|
|
|
38
39
|
* on a `column-reverse` chat; the live run on the Logosz screen is missing.
|
|
39
40
|
* - `wrapped-info-row` (BFR-FLEET-012 ④, owner 2026-10-24, MP flow cards): fires on fixtures of the two cards the
|
|
40
41
|
* owner saw and stays silent on the fixed twins; the live run on the MP cards is missing.
|
|
42
|
+
* - `error-destination` (BFR-FLEET-012 ②, owner 2026-10-26, Adventor profile picture ⇒ account "not found"):
|
|
43
|
+
* fires on fixtures of the three measured forms (a link to an HTTP 404 page, an in-app "not found" view after a
|
|
44
|
+
* failed request, a press whose request answers 500) and stays silent on the fixed twins; the live run on the
|
|
45
|
+
* Adventor profile picture is missing.
|
|
41
46
|
*/
|
|
42
47
|
exports.DyE2E_UICheckCandidateDetectors_Const = [
|
|
43
48
|
new nested_scroll_detector_1.DyE2E_NestedScroll_Detector(),
|
|
@@ -46,5 +51,6 @@ exports.DyE2E_UICheckCandidateDetectors_Const = [
|
|
|
46
51
|
new scroll_trap_detector_1.DyE2E_ScrollTrap_Detector(),
|
|
47
52
|
new shifted_scroll_detector_1.DyE2E_ShiftedScroll_Detector(),
|
|
48
53
|
new wrapped_info_row_detector_1.DyE2E_WrappedInfoRow_Detector(),
|
|
54
|
+
new error_destination_detector_1.DyE2E_ErrorDestination_Detector(),
|
|
49
55
|
];
|
|
50
56
|
//# sourceMappingURL=ui-check-default-detectors.const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-default-detectors.const.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":";;;AACA,mFAAqF;AACrF,6EAA+E;AAC/E,+EAAiF;AACjF,6FAA8F;AAC9F,2EAA6E;AAC7E,iFAAmF;AACnF,qFAAsF;AAEtF;;;;;;GAMG;AACU,QAAA,mCAAmC,GAA+C;IAC7F,IAAI,kDAA0B,EAAE;CACjC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"ui-check-default-detectors.const.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":";;;AACA,mFAAqF;AACrF,6EAA+E;AAC/E,uFAAyF;AACzF,+EAAiF;AACjF,6FAA8F;AAC9F,2EAA6E;AAC7E,iFAAmF;AACnF,qFAAsF;AAEtF;;;;;;GAMG;AACU,QAAA,mCAAmC,GAA+C;IAC7F,IAAI,kDAA0B,EAAE;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACU,QAAA,qCAAqC,GAA+C;IAC/F,IAAI,oDAA2B,EAAE;IACjC,IAAI,iEAAiC,EAAE;IACvC,IAAI,wDAA6B,EAAE;IACnC,IAAI,gDAAyB,EAAE;IAC/B,IAAI,sDAA4B,EAAE;IAClC,IAAI,yDAA6B,EAAE;IACnC,IAAI,4DAA+B,EAAE;CACtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-guard.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-guard.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAyB,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAEvF,yDAAyD;AACzD,MAAM,WAAW,iCAAiC;IAChD,8FAA8F;IAC9F,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,mCAAmC;IAClD,GAAG,EAAE,iCAAiC,CAAC;IACvC,8CAA8C;IAC9C,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IAElC,+FAA+F;IAC/F,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ui-check-guard.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-guard.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAyB,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAEvF,yDAAyD;AACzD,MAAM,WAAW,iCAAiC;IAChD,8FAA8F;IAC9F,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,mCAAmC;IAClD,GAAG,EAAE,iCAAiC,CAAC;IACvC,8CAA8C;IAC9C,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IAElC,+FAA+F;IAC/F,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAQxB;IAElB,qGAAqG;IACrG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAGxB;IAElB,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAgC;IAErE,0DAA0D;IAC1D,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAA8D;IAE3G,iDAAiD;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqD;IAEzF;;;OAGG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWlG,+EAA+E;IAC/E,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO;IAStG,iFAAiF;IACjF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO;IA0B3F,8FAA8F;IAC9F,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO;IAMrE;;;;OAIG;WACU,mBAAmB,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,mCAAmC,CAAC;IAqD/C,qCAAqC;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ;IAQvB,2FAA2F;IAC3F,OAAO,CAAC,MAAM,CAAC,QAAQ;CAUxB"}
|
|
@@ -21,6 +21,9 @@ class DyE2E_UICheckGuard_Util {
|
|
|
21
21
|
'eltávolít', '\\bpay', 'fizet', '\\bbuy\\b', 'vásárl', '\\bcheckout\\b', '\\bpurchase', '\\border\\b', 'megrendel',
|
|
22
22
|
'\\bsubscri', 'előfizet', '\\bpublish', 'közzétesz', 'közzététel', '\\bsend\\b', 'küld', '\\binvite', 'meghív',
|
|
23
23
|
'e-?mail', '\\bdonat', 'adomány', '\\bdeactivat', '\\btransfer\\b', '\\bwithdraw', '\\bcredit', 'kredit',
|
|
24
|
+
// BFR-FLEET-012 ② — links are pressed too, and a GET link may act: "unsubscribe" has no word boundary before
|
|
25
|
+
// "subscri", so `\bsubscri` misses it
|
|
26
|
+
'unsubscri', 'leiratkoz',
|
|
24
27
|
].join('|'), 'i');
|
|
25
28
|
/** Request URLs never let through, even when `mutationAllow` matches: payment and e-mail sending. */
|
|
26
29
|
static hardDenyUrlPattern = new RegExp([
|