@futdevpro/dynamo-e2e 1.18.25 → 1.18.29
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 +46 -0
- package/README.md +149 -139
- package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.d.ts +4 -0
- package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.d.ts.map +1 -1
- package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js +39 -3
- package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js.map +1 -1
- package/build/_modules/contracts/_enums/field-test-case-type.enum.d.ts +5 -0
- package/build/_modules/contracts/_enums/field-test-case-type.enum.d.ts.map +1 -1
- package/build/_modules/contracts/_enums/field-test-case-type.enum.js +5 -0
- package/build/_modules/contracts/_enums/field-test-case-type.enum.js.map +1 -1
- package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.d.ts +9 -1
- package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.d.ts.map +1 -1
- package/build/_modules/generators/_collections/field-emission.util.d.ts +11 -0
- package/build/_modules/generators/_collections/field-emission.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/field-emission.util.js +43 -6
- package/build/_modules/generators/_collections/field-emission.util.js.map +1 -1
- package/build/_modules/generators/_collections/form-level-emission.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/form-level-emission.util.js +5 -6
- package/build/_modules/generators/_collections/form-level-emission.util.js.map +1 -1
- package/build/_modules/generators/_collections/json-schema.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/json-schema.util.js +2 -0
- package/build/_modules/generators/_collections/json-schema.util.js.map +1 -1
- package/build/_modules/generators/_collections/test-case-filter.util.d.ts +6 -0
- package/build/_modules/generators/_collections/test-case-filter.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/test-case-filter.util.js +36 -0
- package/build/_modules/generators/_collections/test-case-filter.util.js.map +1 -1
- package/build/_modules/generators/_models/form-settings-shape.interface.d.ts +13 -0
- package/build/_modules/generators/_models/form-settings-shape.interface.d.ts.map +1 -1
- package/build/_modules/generators/form-suite.generator.d.ts.map +1 -1
- package/build/_modules/generators/form-suite.generator.js +4 -1
- package/build/_modules/generators/form-suite.generator.js.map +1 -1
- package/build/_modules/runtime/_collections/notification-detector-page-script.const.js +136 -136
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.d.ts +6 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js +208 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts +29 -0
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js +101 -0
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/nested-scroll.detector.d.ts +25 -0
- package/build/_modules/ui-check/_collections/detectors/nested-scroll.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/nested-scroll.detector.js +47 -0
- package/build/_modules/ui-check/_collections/detectors/nested-scroll.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/non-toggling-control.detector.d.ts +33 -0
- package/build/_modules/ui-check/_collections/detectors/non-toggling-control.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/non-toggling-control.detector.js +119 -0
- package/build/_modules/ui-check/_collections/detectors/non-toggling-control.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts +20 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js +30 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.d.ts +60 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js +144 -0
- package/build/_modules/ui-check/_collections/ui-check-guard.util.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts +61 -0
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-page.util.js +152 -0
- package/build/_modules/ui-check/_collections/ui-check-page.util.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-runner.util.d.ts +41 -0
- package/build/_modules/ui-check/_collections/ui-check-runner.util.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-runner.util.js +128 -0
- package/build/_modules/ui-check/_collections/ui-check-runner.util.js.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-context.interface.d.ts +39 -0
- package/build/_modules/ui-check/_models/ui-check-context.interface.d.ts.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-context.interface.js +3 -0
- package/build/_modules/ui-check/_models/ui-check-context.interface.js.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-detector.interface.d.ts +32 -0
- package/build/_modules/ui-check/_models/ui-check-detector.interface.d.ts.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-detector.interface.js +3 -0
- package/build/_modules/ui-check/_models/ui-check-detector.interface.js.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-finding.interface.d.ts +30 -0
- package/build/_modules/ui-check/_models/ui-check-finding.interface.d.ts.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-finding.interface.js +3 -0
- package/build/_modules/ui-check/_models/ui-check-finding.interface.js.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-report.interface.d.ts +38 -0
- package/build/_modules/ui-check/_models/ui-check-report.interface.d.ts.map +1 -0
- package/build/_modules/ui-check/_models/ui-check-report.interface.js +3 -0
- package/build/_modules/ui-check/_models/ui-check-report.interface.js.map +1 -0
- package/build/_modules/ui-check/index.d.ts +27 -0
- package/build/_modules/ui-check/index.d.ts.map +1 -0
- package/build/_modules/ui-check/index.js +43 -0
- package/build/_modules/ui-check/index.js.map +1 -0
- package/build/_modules/vqa/generators/review-bundle.generator.d.ts +16 -0
- package/build/_modules/vqa/generators/review-bundle.generator.d.ts.map +1 -1
- package/build/_modules/vqa/generators/review-bundle.generator.js +11 -0
- package/build/_modules/vqa/generators/review-bundle.generator.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/package.json +10 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,52 @@
|
|
|
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.29] — 2026-10-20 — Form suites never bend to the product: no green placeholder, no silent skip (BFR-FLEET-013)
|
|
7
|
+
|
|
8
|
+
- **No green placeholder.** The form-level "fill all fields → submit" and "disabled state" cases, and a field case
|
|
9
|
+
with a `transformed` expectation, emitted `expect(true).toBe(true)` — counted as passed while measuring nothing. They
|
|
10
|
+
are now `test.fixme` (visible as "not yet tested", never green).
|
|
11
|
+
- **No silent skip.** `skipCases` no longer drops cases from the spec: each is emitted as a visibly skipped test —
|
|
12
|
+
`test.skip(true, '<skipCode>: <skipReason>')` with the two new override fields, or `test.fixme(true, 'UNJUSTIFIED
|
|
13
|
+
SKIP …')` without them. A skip always stays in the report.
|
|
14
|
+
- **A checkbox that opens a dialog** (`toggleDialogClose`, a RegExp source of the dialog's own button): after every
|
|
15
|
+
press the generated case closes the dialog the user's way, so the next press reaches the checkbox. Measured on the
|
|
16
|
+
Master Prompter TEST registration (Terms checkbox, 2026-10-20): without it `toggle-twice` / `rapid-toggle` fail —
|
|
17
|
+
the dialog's backdrop takes the press, i.e. the case measured the dialog —, with it all three toggle cases pass.
|
|
18
|
+
- Tests: 5 emission specs (no placeholder, visible skip with / without justification, dialog closing per press);
|
|
19
|
+
suite 581 specs.
|
|
20
|
+
|
|
21
|
+
## [01.18.28] — 2026-10-20 — `/ui-check`: scripted, per-error-class UI detectors that return VERDICTS (BFR-FLEET-012)
|
|
22
|
+
|
|
23
|
+
- New sub-export `@futdevpro/dynamo-e2e/ui-check`. The `/vqa` layer collects evidence for a reviewer; this layer fails the
|
|
24
|
+
run. `DyE2E_UICheckRunner_Util.run(page, context, { detectors, waivers })` ⇒ a report; `assertClean(report)` throws
|
|
25
|
+
with every finding's measurement (`measured` / `expected` / raw `details`).
|
|
26
|
+
- The DEFAULT list (`DyE2E_UICheckDefaultDetectors_Const`) holds only detectors proven on a real, human-identified
|
|
27
|
+
defect — firing before its fix, silent after it: `dead-control` (a control that changes nothing when pressed; the
|
|
28
|
+
registration-page close "X", `BL-QA-FDPUI-001`). Candidates (`DyE2E_UICheckCandidateDetectors_Const`, opt-in):
|
|
29
|
+
`nested-scroll` (two-level scrolling of the main content, fires on `BL-QA-FDPUI-003`; the "after the fix" half waits
|
|
30
|
+
for the fix) and `non-toggling-control` (a checkbox / switch whose first or second press does not flip it; the
|
|
31
|
+
owner's defect was not reproducible on 2026-10-20). Proofs: `__documentations/UI-CHECK-DETECTORS.md`.
|
|
32
|
+
- Safety of the interactive detectors (code, not advice): test host + anonymous / throwaway account only; payment,
|
|
33
|
+
e-mail, delete, logout, publish controls are never pressed; every mutating request is aborted during a press (a
|
|
34
|
+
`mutationAllow` exception still hard-blocks payment / e-mail URLs and bodies with a non-reserved address); every
|
|
35
|
+
WebSocket opened during the check is mocked, so a socket action cannot reach the server either.
|
|
36
|
+
- A detector is switched off only with a coded, dated waiver (`BL-` / `BFR-` / `BUG-` / `CFR-` code, reason,
|
|
37
|
+
expiry); an expired waiver stops applying and is listed. A crashed detector fails the check.
|
|
38
|
+
- Also in this release (01.18.27 was tagged but never published — its constant / CHANGELOG step was missed, so the
|
|
39
|
+
version guard stayed red): the form generator's **field `pattern` rule** (BFR-ADVENTOR-078, `2fdc980`) — "valid"
|
|
40
|
+
values that break a field's `pattern` become `invalid` / pattern cases, plus pattern-mismatch cases per class. The
|
|
41
|
+
version constant follows the release again.
|
|
42
|
+
- Tests: 24 real-browser + Node specs (each defect alone in a minimal fixture, with its fixed twin); suite 575 specs.
|
|
43
|
+
|
|
44
|
+
## [01.18.26] — 2026-10-05 — VQA: `captureRun()` — the capture run as `{ command, args, env }` (BFR-MASTERPROMPTER-093)
|
|
45
|
+
|
|
46
|
+
- Added `captureRun(bundlePath)` next to `captureCommand`: `{ command: 'npx', args: [ 'playwright', 'test', '--config',
|
|
47
|
+
<path> ], env: { VQA_OUT_DIR } }`. The POSIX `captureCommand` line (`VQA_OUT_DIR=… npx …`) fails under `cmd.exe`; the
|
|
48
|
+
structured form runs through `spawn` on every shell. `captureCommand` is unchanged.
|
|
49
|
+
- The package-version constant `DYE2E_PACKAGE_VERSION` follows the release (the guard spec checks it against
|
|
50
|
+
`package.json`).
|
|
51
|
+
|
|
6
52
|
## [01.18.25] — 2026-09-29 — Form suite: a failed setup names the status + URL; configurable `test` import (BFR-ADVENTOR-038)
|
|
7
53
|
|
|
8
54
|
- Every generated setup hook's load check now carries the route, the HTTP status and the final URL in its failure
|
package/README.md
CHANGED
|
@@ -1,139 +1,149 @@
|
|
|
1
|
-
# @futdevpro/dynamo-e2e
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/@futdevpro/dynamo-e2e)
|
|
4
|
-
[](./coverage/)
|
|
5
|
-
[](./src/)
|
|
6
|
-
[](./__documentations/plans/dynamo-e2e-foundation/HYPERPLAN.md)
|
|
7
|
-
|
|
8
|
-
End-to-end testing engine for the Dynamo + FDP ecosystem.
|
|
9
|
-
|
|
10
|
-
## What
|
|
11
|
-
|
|
12
|
-
A Dynamo bedrock-package that turns Forms v2 Settings POJOs into Playwright
|
|
13
|
-
test suites — **auto-generated**, **typed**, **overridable**, **diffable**.
|
|
14
|
-
|
|
15
|
-
Three layers in one package:
|
|
16
|
-
|
|
17
|
-
1. **Form-coverage** — every field-type has a pre-curated positive + negative
|
|
18
|
-
input matrix; the generator emits ~20-50 tests per form from a single
|
|
19
|
-
Settings POJO.
|
|
20
|
-
2. **Viewport matrix** *(Wave-2)* — auto-fan-out tests over 7 standard
|
|
21
|
-
viewports + overflow/touch-target a11y detection.
|
|
22
|
-
3. **Core Web Vitals diagnostics** *(Wave-3)* — synthetic LCP / CLS / INP /
|
|
23
|
-
TTFB measurement + percentile aggregation + attribution.
|
|
24
|
-
|
|
25
|
-
## Status
|
|
26
|
-
|
|
27
|
-
**Wave-1..4 + MP-10/MP-11** (2026-06-10) — Layer A contracts, Layer B
|
|
28
|
-
generators (form-suite + viewport-suite + CWV-suite), Layer C runtime
|
|
29
|
-
fixtures + page-objects, Overseer CICD pipeline registered, **75%+ test
|
|
30
|
-
coverage gate** active (statements **97.84%**, branches **87.13%**,
|
|
31
|
-
functions **98.55%**, lines **97.84%**). 104 specs, 0 failures.
|
|
32
|
-
|
|
33
|
-
Plan-net: `__documentations/plans/dynamo-e2e-foundation/HYPERPLAN.md`
|
|
34
|
-
(11 MPs, 4900+ LOC planning).
|
|
35
|
-
|
|
36
|
-
## Install
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
pnpm add -D @futdevpro/dynamo-e2e @playwright/test
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
`@futdevpro/fsm-dynamo` is a peer-dep — bring your own (or no Settings
|
|
43
|
-
POJO source if you only use the runtime presets).
|
|
44
|
-
|
|
45
|
-
## Quick start
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
import { DyFM_TextFieldNew_Settings } from '@futdevpro/fsm-dynamo/ngx-models';
|
|
49
|
-
import { DyE2E_FormSuite_Generator } from '@futdevpro/dynamo-e2e/generators';
|
|
50
|
-
|
|
51
|
-
const settings = new DyFM_FormNew_Settings({
|
|
52
|
-
key: 'login',
|
|
53
|
-
fields: [
|
|
54
|
-
new DyFM_TextFieldNew_Settings({ key: 'email', /* ... */ }),
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const specSource = DyE2E_FormSuite_Generator.emit({
|
|
59
|
-
formSettings: settings,
|
|
60
|
-
formRoute: '/login',
|
|
61
|
-
formSelector: 'dynamo-form-new',
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// → write specSource to `e2e/tests/generated/login-form.spec.ts`
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Sub-exports
|
|
68
|
-
|
|
69
|
-
- `@futdevpro/dynamo-e2e/contracts` — POJO types
|
|
70
|
-
- `@futdevpro/dynamo-e2e/generators` — Node-only emission engine
|
|
71
|
-
- `@futdevpro/dynamo-e2e/runtime` — Playwright fixtures + page-objects (Wave-4) + the live notification detector
|
|
72
|
-
(`DyE2E_NotificationDetector_Util`, see below)
|
|
73
|
-
- `@futdevpro/dynamo-e2e/presets` — pre-built suites + `DyE2E_getPlaywrightConfig` / `DyE2E_getGlobalSetup` playwright-config factory (fleet e2e-config SSOT)
|
|
74
|
-
- `@futdevpro/dynamo-e2e/game` — capability-gated deterministic game seam, failure artifacts and bidirectional journey-catalog validation
|
|
75
|
-
- `@futdevpro/dynamo-e2e/cwv` — Core Web Vitals (Wave-3)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
`
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
1
|
+
# @futdevpro/dynamo-e2e
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@futdevpro/dynamo-e2e)
|
|
4
|
+
[](./coverage/)
|
|
5
|
+
[](./src/)
|
|
6
|
+
[](./__documentations/plans/dynamo-e2e-foundation/HYPERPLAN.md)
|
|
7
|
+
|
|
8
|
+
End-to-end testing engine for the Dynamo + FDP ecosystem.
|
|
9
|
+
|
|
10
|
+
## What
|
|
11
|
+
|
|
12
|
+
A Dynamo bedrock-package that turns Forms v2 Settings POJOs into Playwright
|
|
13
|
+
test suites — **auto-generated**, **typed**, **overridable**, **diffable**.
|
|
14
|
+
|
|
15
|
+
Three layers in one package:
|
|
16
|
+
|
|
17
|
+
1. **Form-coverage** — every field-type has a pre-curated positive + negative
|
|
18
|
+
input matrix; the generator emits ~20-50 tests per form from a single
|
|
19
|
+
Settings POJO.
|
|
20
|
+
2. **Viewport matrix** *(Wave-2)* — auto-fan-out tests over 7 standard
|
|
21
|
+
viewports + overflow/touch-target a11y detection.
|
|
22
|
+
3. **Core Web Vitals diagnostics** *(Wave-3)* — synthetic LCP / CLS / INP /
|
|
23
|
+
TTFB measurement + percentile aggregation + attribution.
|
|
24
|
+
|
|
25
|
+
## Status
|
|
26
|
+
|
|
27
|
+
**Wave-1..4 + MP-10/MP-11** (2026-06-10) — Layer A contracts, Layer B
|
|
28
|
+
generators (form-suite + viewport-suite + CWV-suite), Layer C runtime
|
|
29
|
+
fixtures + page-objects, Overseer CICD pipeline registered, **75%+ test
|
|
30
|
+
coverage gate** active (statements **97.84%**, branches **87.13%**,
|
|
31
|
+
functions **98.55%**, lines **97.84%**). 104 specs, 0 failures.
|
|
32
|
+
|
|
33
|
+
Plan-net: `__documentations/plans/dynamo-e2e-foundation/HYPERPLAN.md`
|
|
34
|
+
(11 MPs, 4900+ LOC planning).
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm add -D @futdevpro/dynamo-e2e @playwright/test
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`@futdevpro/fsm-dynamo` is a peer-dep — bring your own (or no Settings
|
|
43
|
+
POJO source if you only use the runtime presets).
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { DyFM_TextFieldNew_Settings } from '@futdevpro/fsm-dynamo/ngx-models';
|
|
49
|
+
import { DyE2E_FormSuite_Generator } from '@futdevpro/dynamo-e2e/generators';
|
|
50
|
+
|
|
51
|
+
const settings = new DyFM_FormNew_Settings({
|
|
52
|
+
key: 'login',
|
|
53
|
+
fields: [
|
|
54
|
+
new DyFM_TextFieldNew_Settings({ key: 'email', /* ... */ }),
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const specSource = DyE2E_FormSuite_Generator.emit({
|
|
59
|
+
formSettings: settings,
|
|
60
|
+
formRoute: '/login',
|
|
61
|
+
formSelector: 'dynamo-form-new',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// → write specSource to `e2e/tests/generated/login-form.spec.ts`
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Sub-exports
|
|
68
|
+
|
|
69
|
+
- `@futdevpro/dynamo-e2e/contracts` — POJO types
|
|
70
|
+
- `@futdevpro/dynamo-e2e/generators` — Node-only emission engine
|
|
71
|
+
- `@futdevpro/dynamo-e2e/runtime` — Playwright fixtures + page-objects (Wave-4) + the live notification detector
|
|
72
|
+
(`DyE2E_NotificationDetector_Util`, see below)
|
|
73
|
+
- `@futdevpro/dynamo-e2e/presets` — pre-built suites + `DyE2E_getPlaywrightConfig` / `DyE2E_getGlobalSetup` playwright-config factory (fleet e2e-config SSOT)
|
|
74
|
+
- `@futdevpro/dynamo-e2e/game` — capability-gated deterministic game seam, failure artifacts and bidirectional journey-catalog validation
|
|
75
|
+
- `@futdevpro/dynamo-e2e/cwv` — Core Web Vitals (Wave-3)
|
|
76
|
+
- `@futdevpro/dynamo-e2e/ui-check` — scripted, per-error-class UI detectors that return VERDICTS (a control that does
|
|
77
|
+
nothing, two-level scrolling, a checkbox that does not toggle); a growing default list, coded waivers, a safety guard
|
|
78
|
+
for pressing controls. Catalog + proofs: [`__documentations/UI-CHECK-DETECTORS.md`](__documentations/UI-CHECK-DETECTORS.md)
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { DyE2E_UICheckRunner_Util } from '@futdevpro/dynamo-e2e/ui-check';
|
|
82
|
+
|
|
83
|
+
const report = await DyE2E_UICheckRunner_Util.run(page, { url: page.url(), accountKind: 'anonymous' });
|
|
84
|
+
DyE2E_UICheckRunner_Util.assertClean(report); // throws with every finding's measurement
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Playwright preset — CI timeouts and the failure budget
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { DyE2E_getPlaywrightConfig, DyE2E_ciTimeout } from '@futdevpro/dynamo-e2e/presets';
|
|
91
|
+
|
|
92
|
+
export default DyE2E_getPlaywrightConfig({
|
|
93
|
+
defaultBaseUrl: 'https://test.example.hu',
|
|
94
|
+
ciTimeoutFactor: 3, // CI only: timeout / expectTimeout / actionTimeout / navigationTimeout × 3 (default 1)
|
|
95
|
+
maxFailuresInCi: 1, // CI only: stop after the first failure (default: unset = unchanged)
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
> ⚠️ **A call-site `{ timeout }` overrides the config.** `expect(x).toBeVisible({ timeout: 15_000 })` ignores the preset's
|
|
100
|
+
> `expect.timeout` (and its `ciTimeoutFactor`). Scale those values with `DyE2E_ciTimeout(15_000)` — unchanged locally,
|
|
101
|
+
> × `E2E_CI_TIMEOUT_FACTOR` (or 3) under `CI`. Measured: a shared CI runner was 2.3–4.7× slower than a local machine,
|
|
102
|
+
> and a smoke suite with hard-coded call-site timeouts stayed red for months while its config "looked right".
|
|
103
|
+
|
|
104
|
+
## Live notification detector (`/runtime`)
|
|
105
|
+
|
|
106
|
+
Records every user-visible notification — DyNX `dynamo-notification-card` / `dynamo-notifications-area`, mat-snackbar
|
|
107
|
+
(`red-` / `yellow-` / `blue-` / `green-snackbar`), `[role=alert]` — at the moment it APPEARS, so a toast that
|
|
108
|
+
auto-dismissed before the end of the test is still in the report. It also snapshots the visible error banners (with a
|
|
109
|
+
`rawTechnicalLeak` flag for texts like `Http failure response`, `/api/`, `[object Object]`) and collects the page's
|
|
110
|
+
`console` errors/warnings and uncaught `pageerror`s.
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
import { DyE2E_NotificationDetector_Util } from '@futdevpro/dynamo-e2e/runtime';
|
|
114
|
+
|
|
115
|
+
await DyE2E_NotificationDetector_Util.attach(context); // before the first navigation
|
|
116
|
+
// ... the flow ...
|
|
117
|
+
const report = await DyE2E_NotificationDetector_Util.collect(page);
|
|
118
|
+
expect(report.notifications.filter((n) => n.type === 'error')).toEqual([]);
|
|
119
|
+
console.log(DyE2E_NotificationDetector_Util.summarize(report, 'login'));
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Captures survive a full-page navigation (they are reported to Node through a Playwright binding). The page-side code
|
|
123
|
+
is plain JavaScript, so no `__name` shim is needed under `tsx` / esbuild. `collect()` throws on a context without
|
|
124
|
+
`attach()` — an empty report would otherwise read as "no notifications".
|
|
125
|
+
|
|
126
|
+
## Login-flow notification sweep (`/runtime` + CLI)
|
|
127
|
+
|
|
128
|
+
Built on the detector: opens the login page of many projects, submits it with a WRONG password (so the ERROR branch
|
|
129
|
+
is measured without a test account) and prints one matrix row per project — notifications · error/warning · banners ·
|
|
130
|
+
modal dialogs · raw-technical leaks · console errors. Framework-level defects show up only when many projects are
|
|
131
|
+
measured the same way.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
dye2e notification-sweep --targets TEST-TARGETS.md --json sweep.json # or a JSON [{ key, loginUrl | baseUrl }]
|
|
135
|
+
dye2e notification-sweep --targets targets.json --only a,b --fail-on-leak # exit 1 on a raw technical leak
|
|
136
|
+
```
|
|
137
|
+
```ts
|
|
138
|
+
const outcomes = await DyE2E_NotificationSweep_Util.sweep(browser, targets, { settleMs: 5000 });
|
|
139
|
+
console.log(DyE2E_NotificationSweep_Util.matrix(outcomes.map((o) => o.row)));
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Guards in code, not in docs: the probe address must be on a reserved domain (`example.com`, `*.test`, `*.invalid` …)
|
|
143
|
+
or on one you declare with `ownDomains` — anything else throws before a page is opened; the form is submitted only on
|
|
144
|
+
a test host (`test.*`, `*.test`, `localhost` …, or `allowSubmitHosts`) — anything else is loaded but NOT submitted,
|
|
145
|
+
and the row says so. `real: true` / `--real` uses `E2E_PERSISTENT_USER_EMAIL` / `_PASSWORD`; without them the row says
|
|
146
|
+
it fell back to the probe. Modal dialogs (a "not the production system" notice, an error dialog) are RECORDED —
|
|
147
|
+
text + leak flag — before they are closed; a non-modal cookie bar is left alone.
|
|
148
|
+
|
|
149
|
+
Detailed game-preset contract: [`__documentations/game-preset.md`](__documentations/game-preset.md).
|
package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import { DyE2E_FieldTestCaseSet_DataModel } from '../../_models/data-models/fiel
|
|
|
2
2
|
/**
|
|
3
3
|
* Curated test-case matrix `password` field-type-ra. Minden text-case + a
|
|
4
4
|
* password-specifikus reveal-toggle interakció (Wave-2: külön suite).
|
|
5
|
+
*
|
|
6
|
+
* BFR-ADVENTOR-078 — the "valid" values meet a typical strong rule (lower + upper case, digit, special character,
|
|
7
|
+
* 8+ characters), and four `pattern-mismatch` cases break one class each. Those are kept only on a field that declares
|
|
8
|
+
* a `pattern`; there, any other "valid" value that breaks the rule is shaped into an `invalid` / `pattern` case.
|
|
5
9
|
*/
|
|
6
10
|
export declare const PASSWORD_FIELD_TEST_CASES: DyE2E_FieldTestCaseSet_DataModel<string>;
|
|
7
11
|
//# sourceMappingURL=password-field-test-cases.const.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-field-test-cases.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0DAA0D,CAAC;AAE5G
|
|
1
|
+
{"version":3,"file":"password-field-test-cases.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0DAA0D,CAAC;AAE5G;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,EAAE,gCAAgC,CAAC,MAAM,CAgI7E,CAAC"}
|
package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js
CHANGED
|
@@ -8,6 +8,10 @@ const field_test_case_set_data_model_1 = require("../../_models/data-models/fiel
|
|
|
8
8
|
/**
|
|
9
9
|
* Curated test-case matrix `password` field-type-ra. Minden text-case + a
|
|
10
10
|
* password-specifikus reveal-toggle interakció (Wave-2: külön suite).
|
|
11
|
+
*
|
|
12
|
+
* BFR-ADVENTOR-078 — the "valid" values meet a typical strong rule (lower + upper case, digit, special character,
|
|
13
|
+
* 8+ characters), and four `pattern-mismatch` cases break one class each. Those are kept only on a field that declares
|
|
14
|
+
* a `pattern`; there, any other "valid" value that breaks the rule is shaped into an `invalid` / `pattern` case.
|
|
11
15
|
*/
|
|
12
16
|
exports.PASSWORD_FIELD_TEST_CASES = new field_test_case_set_data_model_1.DyE2E_FieldTestCaseSet_DataModel({
|
|
13
17
|
fieldTypeKey: 'password',
|
|
@@ -31,14 +35,14 @@ exports.PASSWORD_FIELD_TEST_CASES = new field_test_case_set_data_model_1.DyE2E_F
|
|
|
31
35
|
id: 'pw:unicode-basic',
|
|
32
36
|
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.unicodeBasic,
|
|
33
37
|
description: 'unicode jelszó',
|
|
34
|
-
inputValue: 'JelszóBiztos123',
|
|
38
|
+
inputValue: 'JelszóBiztos123!',
|
|
35
39
|
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.valid,
|
|
36
40
|
}),
|
|
37
41
|
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
38
42
|
id: 'pw:unicode-emoji',
|
|
39
43
|
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.unicodeEmoji,
|
|
40
44
|
description: 'emoji jelszóban',
|
|
41
|
-
inputValue: 'Pw🔐
|
|
45
|
+
inputValue: 'Pw🔐Strong1!',
|
|
42
46
|
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.valid,
|
|
43
47
|
}),
|
|
44
48
|
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
@@ -84,7 +88,7 @@ exports.PASSWORD_FIELD_TEST_CASES = new field_test_case_set_data_model_1.DyE2E_F
|
|
|
84
88
|
id: 'pw:zero-width',
|
|
85
89
|
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.zeroWidthChars,
|
|
86
90
|
description: 'zero-width karakterek jelszóban',
|
|
87
|
-
inputValue: 'SecurePw123',
|
|
91
|
+
inputValue: 'SecurePw123!',
|
|
88
92
|
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.valid,
|
|
89
93
|
notes: 'A jelszó-egyezésnek konzisztensnek kell lennie (store==login normalize).',
|
|
90
94
|
}),
|
|
@@ -104,6 +108,38 @@ exports.PASSWORD_FIELD_TEST_CASES = new field_test_case_set_data_model_1.DyE2E_F
|
|
|
104
108
|
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.valid,
|
|
105
109
|
notes: 'Nem szennyezheti a headert; ne torjon (500).',
|
|
106
110
|
}),
|
|
111
|
+
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
112
|
+
id: 'pw:pattern-no-digit',
|
|
113
|
+
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.patternMismatch,
|
|
114
|
+
description: 'no digit (pattern rule)',
|
|
115
|
+
inputValue: 'NoDigitsHere!',
|
|
116
|
+
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.invalid,
|
|
117
|
+
expectedErrorKey: 'pattern',
|
|
118
|
+
}),
|
|
119
|
+
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
120
|
+
id: 'pw:pattern-no-special',
|
|
121
|
+
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.patternMismatch,
|
|
122
|
+
description: 'no special character (pattern rule)',
|
|
123
|
+
inputValue: 'NoSpecial123',
|
|
124
|
+
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.invalid,
|
|
125
|
+
expectedErrorKey: 'pattern',
|
|
126
|
+
}),
|
|
127
|
+
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
128
|
+
id: 'pw:pattern-no-upper',
|
|
129
|
+
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.patternMismatch,
|
|
130
|
+
description: 'no upper-case letter (pattern rule)',
|
|
131
|
+
inputValue: 'noupper123!',
|
|
132
|
+
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.invalid,
|
|
133
|
+
expectedErrorKey: 'pattern',
|
|
134
|
+
}),
|
|
135
|
+
new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
136
|
+
id: 'pw:pattern-no-lower',
|
|
137
|
+
type: field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.patternMismatch,
|
|
138
|
+
description: 'no lower-case letter (pattern rule)',
|
|
139
|
+
inputValue: 'NOLOWER123!',
|
|
140
|
+
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.invalid,
|
|
141
|
+
expectedErrorKey: 'pattern',
|
|
142
|
+
}),
|
|
107
143
|
],
|
|
108
144
|
});
|
|
109
145
|
//# sourceMappingURL=password-field-test-cases.const.js.map
|
package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-field-test-cases.const.js","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.ts"],"names":[],"mappings":";;;AAAA,sFAAkF;AAClF,wFAAqF;AACrF,qGAAqG;AACrG,6GAA4G;AAE5G
|
|
1
|
+
{"version":3,"file":"password-field-test-cases.const.js","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,11 @@ export declare enum DyE2E_FieldTestCase_Type {
|
|
|
48
48
|
leadingSpaces = "leading-spaces",
|
|
49
49
|
/** Case-variáció (`VALUE` vs `value`) — case-insensitivity / dup-bypass-check. */
|
|
50
50
|
caseVariant = "case-variant",
|
|
51
|
+
/**
|
|
52
|
+
* BFR-ADVENTOR-078 — a value that breaks the field's `pattern` rule (e.g. a password without a digit). Emitted only
|
|
53
|
+
* when the field declares a `pattern`; otherwise dropped.
|
|
54
|
+
*/
|
|
55
|
+
patternMismatch = "pattern-mismatch",
|
|
51
56
|
zero = "zero",
|
|
52
57
|
one = "one",
|
|
53
58
|
negativeOne = "negative-one",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-test-case-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/contracts/_enums/field-test-case-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,oBAAY,wBAAwB;IAElC,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAGlC,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,aAAa;IACrB,SAAS,cAAc;IAGvB,KAAK,UAAU;IACf,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;IACtC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,MAAM,YAAY;IAClB,iBAAiB,wBAAwB;IACzC,SAAS,eAAe;IACxB,kBAAkB,yBAAyB;IAC3C,8FAA8F;IAC9F,cAAc,qBAAqB;IACnC,mGAAmG;IACnG,SAAS,cAAc;IACvB,0FAA0F;IAC1F,sBAAsB,6BAA6B;IACnD,qFAAqF;IACrF,kBAAkB,yBAAyB;IAG3C,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,kFAAkF;IAClF,WAAW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"field-test-case-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/contracts/_enums/field-test-case-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,oBAAY,wBAAwB;IAElC,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAGlC,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,QAAQ,aAAa;IACrB,SAAS,cAAc;IAGvB,KAAK,UAAU;IACf,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;IACtC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,MAAM,YAAY;IAClB,iBAAiB,wBAAwB;IACzC,SAAS,eAAe;IACxB,kBAAkB,yBAAyB;IAC3C,8FAA8F;IAC9F,cAAc,qBAAqB;IACnC,mGAAmG;IACnG,SAAS,cAAc;IACvB,0FAA0F;IAC1F,sBAAsB,6BAA6B;IACnD,qFAAqF;IACrF,kBAAkB,yBAAyB;IAG3C,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;IAChC,kFAAkF;IAClF,WAAW,iBAAiB;IAC5B;;;OAGG;IACH,eAAe,qBAAqB;IAGpC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,WAAW,iBAAiB;IAC5B,cAAc,qBAAqB;IACnC,cAAc,qBAAqB;IACnC,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,YAAY,kBAAkB;IAG9B,QAAQ,cAAc;IACtB,aAAa,qBAAqB;IAClC,SAAS,eAAe;IACxB,eAAe,sBAAsB;IACrC,SAAS,eAAe;IACxB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,QAAQ,eAAe;IACvB,gBAAgB,uBAAuB;IACvC,WAAW,kBAAkB;IAG7B,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;IACjC,cAAc,qBAAqB;IACnC,WAAW,kBAAkB;IAG7B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,cAAc,oBAAoB;IAClC,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,gBAAgB,sBAAsB;IACtC,kBAAkB,wBAAwB;IAG1C,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAG5B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,YAAY,kBAAkB;IAC9B,iBAAiB,wBAAwB;IAGzC,gEAAgE;IAChE,MAAM,WAAW;CAClB"}
|
|
@@ -56,6 +56,11 @@ var DyE2E_FieldTestCase_Type;
|
|
|
56
56
|
DyE2E_FieldTestCase_Type["leadingSpaces"] = "leading-spaces";
|
|
57
57
|
/** Case-variáció (`VALUE` vs `value`) — case-insensitivity / dup-bypass-check. */
|
|
58
58
|
DyE2E_FieldTestCase_Type["caseVariant"] = "case-variant";
|
|
59
|
+
/**
|
|
60
|
+
* BFR-ADVENTOR-078 — a value that breaks the field's `pattern` rule (e.g. a password without a digit). Emitted only
|
|
61
|
+
* when the field declares a `pattern`; otherwise dropped.
|
|
62
|
+
*/
|
|
63
|
+
DyE2E_FieldTestCase_Type["patternMismatch"] = "pattern-mismatch";
|
|
59
64
|
// ─── Numerikus edge ──────────────────────────────────────────────
|
|
60
65
|
DyE2E_FieldTestCase_Type["zero"] = "zero";
|
|
61
66
|
DyE2E_FieldTestCase_Type["one"] = "one";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-test-case-type.enum.js","sourceRoot":"","sources":["../../../../src/_modules/contracts/_enums/field-test-case-type.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"field-test-case-type.enum.js","sourceRoot":"","sources":["../../../../src/_modules/contracts/_enums/field-test-case-type.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,IAAY,wBAyGX;AAzGD,WAAY,wBAAwB;IAClC,oEAAoE;IACpE,sDAA0B,CAAA;IAC1B,kEAAsC,CAAA;IACtC,gEAAoC,CAAA;IACpC,8DAAkC,CAAA;IAElC,oEAAoE;IACpE,kDAAsB,CAAA;IACtB,kDAAsB,CAAA;IACtB,kDAAsB,CAAA;IACtB,kDAAsB,CAAA;IACtB,iDAAqB,CAAA;IACrB,mDAAuB,CAAA;IAEvB,oEAAoE;IACpE,2CAAe,CAAA;IACf,0DAA8B,CAAA;IAC9B,0DAA8B,CAAA;IAC9B,sDAA0B,CAAA;IAC1B,kEAAsC,CAAA;IACtC,0DAA8B,CAAA;IAC9B,0DAA8B,CAAA;IAC9B,8CAAkB,CAAA;IAClB,qEAAyC,CAAA;IACzC,oDAAwB,CAAA;IACxB,uEAA2C,CAAA;IAC3C,8FAA8F;IAC9F,+DAAmC,CAAA;IACnC,mGAAmG;IACnG,mDAAuB,CAAA;IACvB,0FAA0F;IAC1F,+EAAmD,CAAA;IACnD,qFAAqF;IACrF,uEAA2C,CAAA;IAE3C,mEAAmE;IACnE,sDAA0B,CAAA;IAC1B,kDAAsB,CAAA;IACtB,iDAAqB,CAAA;IACrB,mDAAuB,CAAA;IACvB,8DAAkC,CAAA;IAClC,4DAAgC,CAAA;IAChC,kFAAkF;IAClF,wDAA4B,CAAA;IAC5B;;;OAGG;IACH,gEAAoC,CAAA;IAEpC,oEAAoE;IACpE,yCAAa,CAAA;IACb,uCAAW,CAAA;IACX,wDAA4B,CAAA;IAC5B,+DAAmC,CAAA;IACnC,+DAAmC,CAAA;IACnC,qDAAyB,CAAA;IACzB,iDAAqB,CAAA;IACrB,uCAAW,CAAA;IACX,oDAAwB,CAAA;IACxB,oDAAwB,CAAA;IACxB,0DAA8B,CAAA;IAE9B,oEAAoE;IACpE,kDAAsB,CAAA;IACtB,8DAAkC,CAAA;IAClC,oDAAwB,CAAA;IACxB,iEAAqC,CAAA;IACrC,oDAAwB,CAAA;IACxB,iDAAqB,CAAA;IACrB,yCAAa,CAAA;IACb,mDAAuB,CAAA;IACvB,mEAAuC,CAAA;IACvC,yDAA6B,CAAA;IAE7B,oEAAoE;IACpE,+DAAmC,CAAA;IACnC,6DAAiC,CAAA;IACjC,+DAAmC,CAAA;IACnC,yDAA6B,CAAA;IAE7B,oEAAoE;IACpE,wDAA4B,CAAA;IAC5B,sDAA0B,CAAA;IAC1B,8DAAkC,CAAA;IAClC,0DAA8B,CAAA;IAC9B,wDAA4B,CAAA;IAC5B,kEAAsC,CAAA;IACtC,sEAA0C,CAAA;IAE1C,oEAAoE;IACpE,sDAA0B,CAAA;IAC1B,wDAA4B,CAAA;IAC5B,wDAA4B,CAAA;IAE5B,mEAAmE;IACnE,wDAA4B,CAAA;IAC5B,wDAA4B,CAAA;IAC5B,0DAA8B,CAAA;IAC9B,qEAAyC,CAAA;IAEzC,oEAAoE;IACpE,gEAAgE;IAChE,6CAAiB,CAAA;AACnB,CAAC,EAzGW,wBAAwB,wCAAxB,wBAAwB,QAyGnC"}
|
|
@@ -10,8 +10,16 @@ import { DyE2E_TestRunMode_Type } from '../../_enums/test-run-mode-type.enum';
|
|
|
10
10
|
export interface DyE2E_FieldTestSuite_Override {
|
|
11
11
|
/** A field-Settings `key`-je, amire ez az override vonatkozik. */
|
|
12
12
|
fieldKey: string;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* These cases are NOT run — but they are still EMITTED, as visibly skipped tests (BFR-FLEET-013): with
|
|
15
|
+
* `skipReason` + `skipCode` as `test.skip(true, '<code>: <reason>')`, without them as
|
|
16
|
+
* `test.fixme(true, 'UNJUSTIFIED SKIP …')`. A skip never disappears from the report.
|
|
17
|
+
*/
|
|
14
18
|
skipCases?: DyE2E_FieldTestCase_Type[];
|
|
19
|
+
/** Why the `skipCases` cannot run (one sentence, measured). */
|
|
20
|
+
skipReason?: string;
|
|
21
|
+
/** The open defect behind the skip: a `BL-` / `BFR-` / `BUG-` / `CFR-` trace code. */
|
|
22
|
+
skipCode?: string;
|
|
15
23
|
/** Csak ezek emit-elődnek (whitelist). Ha megadva, `skipCases` ignorálódik. */
|
|
16
24
|
onlyCases?: DyE2E_FieldTestCase_Type[];
|
|
17
25
|
/**
|
package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-test-suite-settings.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,+
|
|
1
|
+
{"version":3,"file":"form-test-suite-settings.interface.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACvC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACvC;;;;;OAKG;IACH,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,wBAAwB,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wEAAwE;IACxE,OAAO,EAAE,sBAAsB,CAAC;IAChC,mDAAmD;IACnD,cAAc,CAAC,EAAE,6BAA6B,EAAE,CAAC;IACjD,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DyE2E_FieldTestCase_DataModel } from '../../contracts/_models/data-models/field-test-case.data-model';
|
|
2
|
+
import { DyE2E_FieldTestSuite_Override } from '../../contracts/_models/interfaces/form-test-suite-settings.interface';
|
|
2
3
|
import { DyE2E_FieldSettings_Shape, DyE2E_FormSettings_Shape } from '../_models/form-settings-shape.interface';
|
|
3
4
|
/**
|
|
4
5
|
* Per-test-case spec-blokk emission. Egyetlen `it(...)` ágat ad vissza.
|
|
@@ -15,6 +16,16 @@ import { DyE2E_FieldSettings_Shape, DyE2E_FormSettings_Shape } from '../_models/
|
|
|
15
16
|
export declare class DyE2E_FieldEmission_Util {
|
|
16
17
|
/** Egy `it(...)` blokkot ad vissza, behúzva a `test.describe`-on belüli szintre (4 space). */
|
|
17
18
|
static emitTestCase<T>(form: DyE2E_FormSettings_Shape, field: DyE2E_FieldSettings_Shape, testCase: DyE2E_FieldTestCase_DataModel<T>): string;
|
|
19
|
+
/**
|
|
20
|
+
* BFR-FLEET-013 — the generated lines that close the dialog a press of `field` opened, with the dialog's own button
|
|
21
|
+
* (`field.toggleDialogClose`, a case-insensitive RegExp source). Empty when the field opens no dialog.
|
|
22
|
+
*/
|
|
23
|
+
static closeToggleDialog(field: DyE2E_FieldSettings_Shape): string;
|
|
24
|
+
/**
|
|
25
|
+
* BFR-FLEET-013 — a case `skipCases` removed, emitted as a VISIBLY skipped test: with `skipReason` + `skipCode` it is
|
|
26
|
+
* a `test.skip` carrying both, without them a `test.fixme` that names the missing justification.
|
|
27
|
+
*/
|
|
28
|
+
static emitSkippedCase<T>(field: DyE2E_FieldSettings_Shape, testCase: DyE2E_FieldTestCase_DataModel<T>, override: DyE2E_FieldTestSuite_Override): string;
|
|
18
29
|
/**
|
|
19
30
|
* BFR-ADVENTOR-035 — the extra case of a confirm field (`matchField`): the referenced field and this one get
|
|
20
31
|
* DIFFERENT values ⇒ this field must show its error. Emitted once per confirm field, next to its own cases.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-emission.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/field-emission.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;
|
|
1
|
+
{"version":3,"file":"field-emission.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/field-emission.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AAEtH,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EAEzB,MAAM,0CAA0C,CAAC;AAGlD;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAwB;IAEnC,8FAA8F;IAC9F,MAAM,CAAC,YAAY,CAAC,CAAC,EACnB,IAAI,EAAE,wBAAwB,EAC9B,KAAK,EAAE,yBAAyB,EAChC,QAAQ,EAAE,6BAA6B,CAAC,CAAC,CAAC,GACzC,MAAM;IAaT;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM;IAkBlE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EACtB,KAAK,EAAE,yBAAyB,EAChC,QAAQ,EAAE,6BAA6B,CAAC,CAAC,CAAC,EAC1C,QAAQ,EAAE,6BAA6B,GACtC,MAAM;IAaT;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,yBAAyB,GAAG,MAAM;IAuBtG,gHAAgH;IAChH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgB/B,4GAA4G;IAC5G,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,4CAA4C;IAC5C,OAAO,CAAC,MAAM,CAAC,eAAe;IA0I9B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,aAAa;CA8D7B"}
|