@futdevpro/fdp-e2e-helpers 1.15.21 → 1.15.27
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/build/_collections/dynamo-e2e-reexports.d.ts +15 -0
- package/build/_collections/dynamo-e2e-reexports.js +22 -0
- package/build/_collections/e2e-unique-generator.util.d.ts +6 -0
- package/build/_collections/e2e-unique-generator.util.js +6 -0
- package/build/_collections/fdp-browser-e2e.util.d.ts +26 -0
- package/build/_collections/fdp-browser-e2e.util.js +57 -0
- package/build/_collections/fdp-dyfm-logger-output.d.ts +10 -0
- package/build/_collections/fdp-dyfm-logger-output.js +23 -0
- package/build/_collections/fdp-form-catalog.const.d.ts +189 -0
- package/build/_collections/fdp-form-catalog.const.js +103 -0
- package/build/_collections/fdp-init.util.d.ts +22 -0
- package/build/_collections/fdp-init.util.js +27 -0
- package/build/_collections/fdp-test-id-conventions.const.d.ts +50 -0
- package/build/_collections/fdp-test-id-conventions.const.js +53 -0
- package/build/_services/e2e-logger.service.d.ts +6 -0
- package/build/_services/e2e-logger.service.js +6 -0
- package/build/_services/fdp-login-flow-helper.service.d.ts +36 -0
- package/build/_services/fdp-login-flow-helper.service.js +42 -0
- package/build/_services/fdp-standard-form-suite-generator.d.ts +39 -0
- package/build/_services/fdp-standard-form-suite-generator.js +42 -0
- package/build/index.d.ts +7 -0
- package/build/index.js +11 -0
- package/package.json +5 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MP-07 SP-D — `fdp-e2e-helpers@v01.16.0` backward-compat re-exports a
|
|
3
|
+
* `@futdevpro/dynamo-e2e/runtime`-ról.
|
|
4
|
+
*
|
|
5
|
+
* Ezek a re-export-ok lehetővé teszik, hogy a consumer-projektek lassanként
|
|
6
|
+
* átálljanak a `DyE2E_*` nevezéktanra, ANÉLKÜL hogy a régi `E2E_*` exports-
|
|
7
|
+
* okra (saját impl) támaszkodás bontása megtörténne.
|
|
8
|
+
*
|
|
9
|
+
* Wave-2 (`fdp-e2e-helpers@v02.0.0`): a régi saját impl-ek eltávolításra
|
|
10
|
+
* kerülnek, a `E2E_*` nevek pedig alias-ként a `DyE2E_*`-re mutatnak.
|
|
11
|
+
*
|
|
12
|
+
* Migration-guide: `@futdevpro/dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md`.
|
|
13
|
+
*/
|
|
14
|
+
export { DyE2E_UniqueGenerator_Util, DyE2E_TestUser_Interface, DyE2E_LoggerService, DyE2E_LoggerOutput, DYE2E_CONSOLE_LOGGER, DyE2E_LoginFlowHelper_Base, DyE2E_LoginFlowResult, } from '@futdevpro/dynamo-e2e';
|
|
15
|
+
//# sourceMappingURL=dynamo-e2e-reexports.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_LoginFlowHelper_Base = exports.DYE2E_CONSOLE_LOGGER = exports.DyE2E_LoggerService = exports.DyE2E_UniqueGenerator_Util = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* MP-07 SP-D — `fdp-e2e-helpers@v01.16.0` backward-compat re-exports a
|
|
6
|
+
* `@futdevpro/dynamo-e2e/runtime`-ról.
|
|
7
|
+
*
|
|
8
|
+
* Ezek a re-export-ok lehetővé teszik, hogy a consumer-projektek lassanként
|
|
9
|
+
* átálljanak a `DyE2E_*` nevezéktanra, ANÉLKÜL hogy a régi `E2E_*` exports-
|
|
10
|
+
* okra (saját impl) támaszkodás bontása megtörténne.
|
|
11
|
+
*
|
|
12
|
+
* Wave-2 (`fdp-e2e-helpers@v02.0.0`): a régi saját impl-ek eltávolításra
|
|
13
|
+
* kerülnek, a `E2E_*` nevek pedig alias-ként a `DyE2E_*`-re mutatnak.
|
|
14
|
+
*
|
|
15
|
+
* Migration-guide: `@futdevpro/dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md`.
|
|
16
|
+
*/
|
|
17
|
+
var dynamo_e2e_1 = require("@futdevpro/dynamo-e2e");
|
|
18
|
+
Object.defineProperty(exports, "DyE2E_UniqueGenerator_Util", { enumerable: true, get: function () { return dynamo_e2e_1.DyE2E_UniqueGenerator_Util; } });
|
|
19
|
+
Object.defineProperty(exports, "DyE2E_LoggerService", { enumerable: true, get: function () { return dynamo_e2e_1.DyE2E_LoggerService; } });
|
|
20
|
+
Object.defineProperty(exports, "DYE2E_CONSOLE_LOGGER", { enumerable: true, get: function () { return dynamo_e2e_1.DYE2E_CONSOLE_LOGGER; } });
|
|
21
|
+
Object.defineProperty(exports, "DyE2E_LoginFlowHelper_Base", { enumerable: true, get: function () { return dynamo_e2e_1.DyE2E_LoginFlowHelper_Base; } });
|
|
22
|
+
//# sourceMappingURL=dynamo-e2e-reexports.js.map
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* E2E_UniqueGenerator_Util — egyedi email, username, password generalas
|
|
3
3
|
* parallel-safe modon az E2E teszteleshez.
|
|
4
4
|
*
|
|
5
|
+
* @deprecated v02.0.0 ota — uj kodban hasznald a
|
|
6
|
+
* `DyE2E_UniqueGenerator_Util`-t (`@futdevpro/dynamo-e2e`-bol re-exported).
|
|
7
|
+
* A v02.0.0 + `FDP_Init_Util.setupDynamoE2E()` osszhangban
|
|
8
|
+
* ekvivalens API-t ad `@test.futdevpro.hu` default domain-nel.
|
|
9
|
+
* Migration-guide: dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md
|
|
10
|
+
*
|
|
5
11
|
* Lift-and-shift a fdp-token-service `e2e/src/_shared/_utils/e2e-unique-generator.util.ts`-bol
|
|
6
12
|
* (BL-20260518-004). Pure static class — multi-worker safe (NO instance state,
|
|
7
13
|
* spec REQ-STRATEGY-000 parallel teszt-futas alapja).
|
|
@@ -5,6 +5,12 @@ exports.E2E_UniqueGenerator_Util = void 0;
|
|
|
5
5
|
* E2E_UniqueGenerator_Util — egyedi email, username, password generalas
|
|
6
6
|
* parallel-safe modon az E2E teszteleshez.
|
|
7
7
|
*
|
|
8
|
+
* @deprecated v02.0.0 ota — uj kodban hasznald a
|
|
9
|
+
* `DyE2E_UniqueGenerator_Util`-t (`@futdevpro/dynamo-e2e`-bol re-exported).
|
|
10
|
+
* A v02.0.0 + `FDP_Init_Util.setupDynamoE2E()` osszhangban
|
|
11
|
+
* ekvivalens API-t ad `@test.futdevpro.hu` default domain-nel.
|
|
12
|
+
* Migration-guide: dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md
|
|
13
|
+
*
|
|
8
14
|
* Lift-and-shift a fdp-token-service `e2e/src/_shared/_utils/e2e-unique-generator.util.ts`-bol
|
|
9
15
|
* (BL-20260518-004). Pure static class — multi-worker safe (NO instance state,
|
|
10
16
|
* spec REQ-STRATEGY-000 parallel teszt-futas alapja).
|
|
@@ -21,4 +21,30 @@ export interface FDP_AuthFormsE2E_Options {
|
|
|
21
21
|
* ezért érdemes E2E-vel őrizni. A fogyasztó: `FDP_buildAuthFormsE2E({ loginRoute, registerRoute })`.
|
|
22
22
|
*/
|
|
23
23
|
export declare function FDP_buildAuthFormsE2E(opts: FDP_AuthFormsE2E_Options): void;
|
|
24
|
+
/** A `FDP_buildRobustnessE2E` opciói. */
|
|
25
|
+
export interface FDP_RobustnessE2E_Options {
|
|
26
|
+
/** A publikus landing-oldal route-ja (console-health + page-title check). Pl. `/landing`. */
|
|
27
|
+
landingRoute: string;
|
|
28
|
+
/** Egy AUTH-GUARD-dal védett route, ami unauthentikáltan máshová redirect-el. Pl. `/main`. Ha nincs megadva → a guard-teszt kimarad. */
|
|
29
|
+
protectedRoute?: string;
|
|
30
|
+
/** Egy biztosan NEM létező route a 404/not-found-kezelés tesztelésére. Default: `/nonexistent-route-xyz-12345`. */
|
|
31
|
+
unknownRoute?: string;
|
|
32
|
+
/** A not-found-redirect URL-jében elvárt jelölő (a routing `**` → not-found). Default: `not-found`. */
|
|
33
|
+
notFoundIndicator?: string;
|
|
34
|
+
/** A védett route pathname-töredéke, aminek a redirect UTÁN NEM szabad benne lennie az URL-ben. Default: a `protectedRoute` `/`-ek nélkül. */
|
|
35
|
+
protectedPathFragment?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Beregisztrálja a **production-readiness robusztussági smoke-okat** (no-auth, no-spend) — minden frontendes
|
|
39
|
+
* rendszerre újrahasználható (master-prompter, futdevpro, token-service, niche-datasets-space, …). Ezek a
|
|
40
|
+
* meglévő public/nav-smoke-ot egészítik ki az auth/spend nélkül is ellenőrizhető viselkedésekkel:
|
|
41
|
+
* - **auth-guard**: a védett route unauthentikáltan NEM marad elérhető (redirect),
|
|
42
|
+
* - **404-graceful**: ismeretlen route → not-found (nem törött oldal),
|
|
43
|
+
* - **console-health**: a landing KRITIKUS JS-hiba nélkül tölt be,
|
|
44
|
+
* - **page-title**: van title (alap struktúra/SEO).
|
|
45
|
+
*
|
|
46
|
+
* Egy törött guard / fehér-képernyős JS-crash = launch-blokkoló, ezért érdemes E2E-vel őrizni. A logika a
|
|
47
|
+
* master-prompter `robustness.spec`-jéből emelve (live test-env-en zöldre futtatva), parametrizálva.
|
|
48
|
+
*/
|
|
49
|
+
export declare function FDP_buildRobustnessE2E(opts: FDP_RobustnessE2E_Options): void;
|
|
24
50
|
//# sourceMappingURL=fdp-browser-e2e.util.d.ts.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FDP_buildAuthFormsE2E = FDP_buildAuthFormsE2E;
|
|
4
|
+
exports.FDP_buildRobustnessE2E = FDP_buildRobustnessE2E;
|
|
4
5
|
const test_1 = require("@playwright/test");
|
|
5
6
|
/**
|
|
6
7
|
* Beregisztrálja a **standard auth-UI form-struktúra** smoke-okat (no-auth, no-spend): a login + register oldal
|
|
@@ -33,4 +34,60 @@ function FDP_buildAuthFormsE2E(opts) {
|
|
|
33
34
|
});
|
|
34
35
|
});
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Beregisztrálja a **production-readiness robusztussági smoke-okat** (no-auth, no-spend) — minden frontendes
|
|
39
|
+
* rendszerre újrahasználható (master-prompter, futdevpro, token-service, niche-datasets-space, …). Ezek a
|
|
40
|
+
* meglévő public/nav-smoke-ot egészítik ki az auth/spend nélkül is ellenőrizhető viselkedésekkel:
|
|
41
|
+
* - **auth-guard**: a védett route unauthentikáltan NEM marad elérhető (redirect),
|
|
42
|
+
* - **404-graceful**: ismeretlen route → not-found (nem törött oldal),
|
|
43
|
+
* - **console-health**: a landing KRITIKUS JS-hiba nélkül tölt be,
|
|
44
|
+
* - **page-title**: van title (alap struktúra/SEO).
|
|
45
|
+
*
|
|
46
|
+
* Egy törött guard / fehér-képernyős JS-crash = launch-blokkoló, ezért érdemes E2E-vel őrizni. A logika a
|
|
47
|
+
* master-prompter `robustness.spec`-jéből emelve (live test-env-en zöldre futtatva), parametrizálva.
|
|
48
|
+
*/
|
|
49
|
+
function FDP_buildRobustnessE2E(opts) {
|
|
50
|
+
const unknownRoute = opts.unknownRoute ?? '/nonexistent-route-xyz-12345';
|
|
51
|
+
const notFoundIndicator = opts.notFoundIndicator ?? 'not-found';
|
|
52
|
+
const protectedFragment = opts.protectedPathFragment ??
|
|
53
|
+
(opts.protectedRoute ? opts.protectedRoute.replace(/\//g, '') : '');
|
|
54
|
+
test_1.test.describe('Robustness — auth-guard / 404 / console-health', () => {
|
|
55
|
+
if (opts.protectedRoute) {
|
|
56
|
+
(0, test_1.test)('a védett route unauthentikáltan elnavigál (auth-guard)', async ({ page }) => {
|
|
57
|
+
await page.goto(opts.protectedRoute);
|
|
58
|
+
// a guard ASYNC lehet (silent-login check) → a redirect a bootstrap UTÁN; a pathname-et figyeljük
|
|
59
|
+
// (a query-ben benne lehet a védett route mint redirectTo). Ha sosem redirect-el → timeout → (helyes) bukás.
|
|
60
|
+
await page.waitForURL((url) => !url.pathname.replace(/\//g, '').startsWith(protectedFragment), { timeout: 15_000 });
|
|
61
|
+
(0, test_1.expect)(new URL(page.url()).pathname.replace(/\//g, '')).not.toContain(protectedFragment);
|
|
62
|
+
await (0, test_1.expect)(page.locator('body')).toBeVisible();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
(0, test_1.test)('ismeretlen route → not-found kezelés (nem törött oldal)', async ({ page }) => {
|
|
66
|
+
await page.goto(unknownRoute);
|
|
67
|
+
await page.waitForLoadState('domcontentloaded');
|
|
68
|
+
(0, test_1.expect)(page.url()).toContain(notFoundIndicator);
|
|
69
|
+
await (0, test_1.expect)(page.locator('body')).toBeVisible();
|
|
70
|
+
});
|
|
71
|
+
(0, test_1.test)('a landing KRITIKUS JS-hiba nélkül tölt be (console-health)', async ({ page }) => {
|
|
72
|
+
const errors = [];
|
|
73
|
+
page.on('console', (msg) => {
|
|
74
|
+
if (msg.type() === 'error') {
|
|
75
|
+
errors.push(msg.text());
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
page.on('pageerror', (err) => { errors.push(err.message); });
|
|
79
|
+
await page.goto(opts.landingRoute);
|
|
80
|
+
await page.waitForLoadState('networkidle');
|
|
81
|
+
// csak a KRITIKUS JS-hibákra szigorú (a sima console.error lehet 3rd-party/analytics/404-favicon)
|
|
82
|
+
const critical = errors.filter((e) => /TypeError|ReferenceError|is not a function|is not defined/.test(e));
|
|
83
|
+
(0, test_1.expect)(critical, `Kritikus JS-hibák a betöltéskor: ${critical.join(' | ')}`).toHaveLength(0);
|
|
84
|
+
});
|
|
85
|
+
(0, test_1.test)('a betöltött oldalnak van title-je (alap struktúra/SEO)', async ({ page }) => {
|
|
86
|
+
await page.goto(opts.landingRoute);
|
|
87
|
+
await page.waitForLoadState('domcontentloaded');
|
|
88
|
+
const title = await page.title();
|
|
89
|
+
(0, test_1.expect)(title.trim().length).toBeGreaterThan(0);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
36
93
|
//# sourceMappingURL=fdp-browser-e2e.util.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DyE2E_LoggerOutput } from '@futdevpro/dynamo-e2e';
|
|
2
|
+
/**
|
|
3
|
+
* FDP_DyFMLogger_Output — `DyE2E_LoggerOutput` adapter `DyFM_Log`-pal.
|
|
4
|
+
*
|
|
5
|
+
* Egyetlen `DyE2E_LoggerService.setOutput(FDP_DyFMLogger_Output)` hivasra
|
|
6
|
+
* a generic dynamo-e2e logger FDP-szinten szólal meg (Discord, file, stb.
|
|
7
|
+
* a `DyFM_global_settings.logSettings`-en át).
|
|
8
|
+
*/
|
|
9
|
+
export declare const FDP_DyFMLogger_Output: DyE2E_LoggerOutput;
|
|
10
|
+
//# sourceMappingURL=fdp-dyfm-logger-output.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDP_DyFMLogger_Output = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
/**
|
|
6
|
+
* FDP_DyFMLogger_Output — `DyE2E_LoggerOutput` adapter `DyFM_Log`-pal.
|
|
7
|
+
*
|
|
8
|
+
* Egyetlen `DyE2E_LoggerService.setOutput(FDP_DyFMLogger_Output)` hivasra
|
|
9
|
+
* a generic dynamo-e2e logger FDP-szinten szólal meg (Discord, file, stb.
|
|
10
|
+
* a `DyFM_global_settings.logSettings`-en át).
|
|
11
|
+
*/
|
|
12
|
+
exports.FDP_DyFMLogger_Output = {
|
|
13
|
+
info(msg, metadata) {
|
|
14
|
+
fsm_dynamo_1.DyFM_Log.info(msg, metadata);
|
|
15
|
+
},
|
|
16
|
+
success(msg, metadata) {
|
|
17
|
+
fsm_dynamo_1.DyFM_Log.success(msg, metadata);
|
|
18
|
+
},
|
|
19
|
+
error(msg, metadata) {
|
|
20
|
+
fsm_dynamo_1.DyFM_Log.error(msg, metadata);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=fdp-dyfm-logger-output.js.map
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
declare const LOGIN: {
|
|
2
|
+
key: string;
|
|
3
|
+
fields: ({
|
|
4
|
+
key: string;
|
|
5
|
+
type: string;
|
|
6
|
+
label: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
maxLength: number;
|
|
9
|
+
testId: "login-email";
|
|
10
|
+
minLength?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
key: string;
|
|
13
|
+
type: string;
|
|
14
|
+
label: string;
|
|
15
|
+
required: boolean;
|
|
16
|
+
minLength: number;
|
|
17
|
+
maxLength: number;
|
|
18
|
+
testId: "login-password";
|
|
19
|
+
} | {
|
|
20
|
+
key: string;
|
|
21
|
+
type: string;
|
|
22
|
+
label: string;
|
|
23
|
+
required: boolean;
|
|
24
|
+
testId: "login-remember";
|
|
25
|
+
maxLength?: undefined;
|
|
26
|
+
minLength?: undefined;
|
|
27
|
+
})[];
|
|
28
|
+
};
|
|
29
|
+
declare const REGISTER: {
|
|
30
|
+
key: string;
|
|
31
|
+
fields: ({
|
|
32
|
+
key: string;
|
|
33
|
+
type: string;
|
|
34
|
+
label: string;
|
|
35
|
+
required: boolean;
|
|
36
|
+
minLength: number;
|
|
37
|
+
maxLength: number;
|
|
38
|
+
testId: "register-username";
|
|
39
|
+
} | {
|
|
40
|
+
key: string;
|
|
41
|
+
type: string;
|
|
42
|
+
label: string;
|
|
43
|
+
required: boolean;
|
|
44
|
+
maxLength: number;
|
|
45
|
+
testId: "register-email";
|
|
46
|
+
minLength?: undefined;
|
|
47
|
+
} | {
|
|
48
|
+
key: string;
|
|
49
|
+
type: string;
|
|
50
|
+
label: string;
|
|
51
|
+
required: boolean;
|
|
52
|
+
minLength: number;
|
|
53
|
+
maxLength: number;
|
|
54
|
+
testId: "register-password";
|
|
55
|
+
} | {
|
|
56
|
+
key: string;
|
|
57
|
+
type: string;
|
|
58
|
+
label: string;
|
|
59
|
+
required: boolean;
|
|
60
|
+
minLength: number;
|
|
61
|
+
maxLength: number;
|
|
62
|
+
testId: "register-password-confirm";
|
|
63
|
+
} | {
|
|
64
|
+
key: string;
|
|
65
|
+
type: string;
|
|
66
|
+
label: string;
|
|
67
|
+
required: boolean;
|
|
68
|
+
testId: "register-accepted-terms";
|
|
69
|
+
minLength?: undefined;
|
|
70
|
+
maxLength?: undefined;
|
|
71
|
+
})[];
|
|
72
|
+
};
|
|
73
|
+
declare const PASSWORD_RESET: {
|
|
74
|
+
key: string;
|
|
75
|
+
fields: ({
|
|
76
|
+
key: string;
|
|
77
|
+
type: string;
|
|
78
|
+
label: string;
|
|
79
|
+
required: boolean;
|
|
80
|
+
maxLength: number;
|
|
81
|
+
testId: "password-reset-email";
|
|
82
|
+
minLength?: undefined;
|
|
83
|
+
} | {
|
|
84
|
+
key: string;
|
|
85
|
+
type: string;
|
|
86
|
+
label: string;
|
|
87
|
+
required: boolean;
|
|
88
|
+
minLength: number;
|
|
89
|
+
testId: "password-reset-new";
|
|
90
|
+
maxLength?: undefined;
|
|
91
|
+
} | {
|
|
92
|
+
key: string;
|
|
93
|
+
type: string;
|
|
94
|
+
label: string;
|
|
95
|
+
required: boolean;
|
|
96
|
+
minLength: number;
|
|
97
|
+
testId: "password-reset-new-confirm";
|
|
98
|
+
maxLength?: undefined;
|
|
99
|
+
})[];
|
|
100
|
+
};
|
|
101
|
+
declare const PROFILE: {
|
|
102
|
+
key: string;
|
|
103
|
+
fields: ({
|
|
104
|
+
key: string;
|
|
105
|
+
type: string;
|
|
106
|
+
label: string;
|
|
107
|
+
required: boolean;
|
|
108
|
+
minLength: number;
|
|
109
|
+
maxLength: number;
|
|
110
|
+
testId: "profile-display-name";
|
|
111
|
+
options?: undefined;
|
|
112
|
+
} | {
|
|
113
|
+
key: string;
|
|
114
|
+
type: string;
|
|
115
|
+
label: string;
|
|
116
|
+
maxLength: number;
|
|
117
|
+
testId: "profile-bio";
|
|
118
|
+
required?: undefined;
|
|
119
|
+
minLength?: undefined;
|
|
120
|
+
options?: undefined;
|
|
121
|
+
} | {
|
|
122
|
+
key: string;
|
|
123
|
+
type: string;
|
|
124
|
+
label: string;
|
|
125
|
+
testId: "profile-birth-date";
|
|
126
|
+
required?: undefined;
|
|
127
|
+
minLength?: undefined;
|
|
128
|
+
maxLength?: undefined;
|
|
129
|
+
options?: undefined;
|
|
130
|
+
} | {
|
|
131
|
+
key: string;
|
|
132
|
+
type: string;
|
|
133
|
+
label: string;
|
|
134
|
+
required: boolean;
|
|
135
|
+
testId: "profile-plan";
|
|
136
|
+
options: {
|
|
137
|
+
label: string;
|
|
138
|
+
value: string;
|
|
139
|
+
}[];
|
|
140
|
+
minLength?: undefined;
|
|
141
|
+
maxLength?: undefined;
|
|
142
|
+
})[];
|
|
143
|
+
};
|
|
144
|
+
declare const SETTINGS: {
|
|
145
|
+
key: string;
|
|
146
|
+
fields: ({
|
|
147
|
+
key: string;
|
|
148
|
+
type: string;
|
|
149
|
+
label: string;
|
|
150
|
+
testId: "settings-notifications";
|
|
151
|
+
required?: undefined;
|
|
152
|
+
options?: undefined;
|
|
153
|
+
} | {
|
|
154
|
+
key: string;
|
|
155
|
+
type: string;
|
|
156
|
+
label: string;
|
|
157
|
+
required: boolean;
|
|
158
|
+
testId: "settings-theme";
|
|
159
|
+
options: {
|
|
160
|
+
label: string;
|
|
161
|
+
value: string;
|
|
162
|
+
}[];
|
|
163
|
+
} | {
|
|
164
|
+
key: string;
|
|
165
|
+
type: string;
|
|
166
|
+
label: string;
|
|
167
|
+
required: boolean;
|
|
168
|
+
testId: "settings-language";
|
|
169
|
+
options: {
|
|
170
|
+
label: string;
|
|
171
|
+
value: string;
|
|
172
|
+
}[];
|
|
173
|
+
})[];
|
|
174
|
+
};
|
|
175
|
+
export declare class FDP_FormCatalog {
|
|
176
|
+
static readonly LOGIN: typeof LOGIN;
|
|
177
|
+
static readonly REGISTER: typeof REGISTER;
|
|
178
|
+
static readonly PASSWORD_RESET: typeof PASSWORD_RESET;
|
|
179
|
+
static readonly PROFILE: typeof PROFILE;
|
|
180
|
+
static readonly SETTINGS: typeof SETTINGS;
|
|
181
|
+
/** Visszaadja a regisztrált form Settings-et — null ha ismeretlen. */
|
|
182
|
+
static getForm(key: string): any | null;
|
|
183
|
+
/** Custom form-Settings regisztrációja a katalógusba. */
|
|
184
|
+
static register(key: string, settings: any): void;
|
|
185
|
+
/** A regisztrált form-kulcsok listája. */
|
|
186
|
+
static keys(): string[];
|
|
187
|
+
}
|
|
188
|
+
export {};
|
|
189
|
+
//# sourceMappingURL=fdp-form-catalog.const.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDP_FormCatalog = void 0;
|
|
4
|
+
const fdp_test_id_conventions_const_1 = require("./fdp-test-id-conventions.const");
|
|
5
|
+
/**
|
|
6
|
+
* FDP_FormCatalog — előre-leírt FDP form Settings POJO-k (5 form).
|
|
7
|
+
*
|
|
8
|
+
* Ezekkel a `FDP_StandardFormSuite_Generator` egy `formKey` kulcsból
|
|
9
|
+
* ki tudja olvasni a teljes Settings-objektumot — egy hivas, kész e2e-suite.
|
|
10
|
+
*
|
|
11
|
+
* Override-pattern: `FDP_FormCatalog.register('myCustom', settings)` —
|
|
12
|
+
* a global registry-be új formot regisztrál.
|
|
13
|
+
*/
|
|
14
|
+
const REGISTRY = {};
|
|
15
|
+
const LOGIN = {
|
|
16
|
+
key: 'login',
|
|
17
|
+
fields: [
|
|
18
|
+
{ key: 'email', type: 'text', label: 'Email', required: true, maxLength: 254, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginEmail },
|
|
19
|
+
{ key: 'password', type: 'password', label: 'Password', required: true, minLength: 8, maxLength: 128, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginPassword },
|
|
20
|
+
{ key: 'rememberMe', type: 'checkbox', label: 'Remember me', required: false, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginRememberMe },
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
const REGISTER = {
|
|
24
|
+
key: 'register',
|
|
25
|
+
fields: [
|
|
26
|
+
{ key: 'username', type: 'text', label: 'Username', required: true, minLength: 3, maxLength: 32, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.registerUsername },
|
|
27
|
+
{ key: 'email', type: 'text', label: 'Email', required: true, maxLength: 254, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.registerEmail },
|
|
28
|
+
{ key: 'password', type: 'password', label: 'Password', required: true, minLength: 8, maxLength: 128, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.registerPassword },
|
|
29
|
+
{ key: 'passwordConfirm', type: 'password', label: 'Confirm Password', required: true, minLength: 8, maxLength: 128, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.registerPasswordConfirm },
|
|
30
|
+
{ key: 'acceptedTerms', type: 'checkbox', label: 'Accept terms', required: true, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.registerAcceptedTerms },
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
const PASSWORD_RESET = {
|
|
34
|
+
key: 'passwordReset',
|
|
35
|
+
fields: [
|
|
36
|
+
{ key: 'email', type: 'text', label: 'Email', required: true, maxLength: 254, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.passwordResetEmail },
|
|
37
|
+
{ key: 'newPassword', type: 'password', label: 'New Password', required: true, minLength: 8, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.passwordResetNew },
|
|
38
|
+
{ key: 'newPasswordConfirm', type: 'password', label: 'Confirm New Password', required: true, minLength: 8, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.passwordResetNewConfirm },
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
const PROFILE = {
|
|
42
|
+
key: 'profile',
|
|
43
|
+
fields: [
|
|
44
|
+
{ key: 'displayName', type: 'text', label: 'Display Name', required: true, minLength: 2, maxLength: 64, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.profileDisplayName },
|
|
45
|
+
{ key: 'bio', type: 'textarea', label: 'Bio', maxLength: 500, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.profileBio },
|
|
46
|
+
{ key: 'birthDate', type: 'date', label: 'Birth Date', testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.profileBirthDate },
|
|
47
|
+
{
|
|
48
|
+
key: 'plan', type: 'radioSelect', label: 'Plan', required: true, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.profilePlan,
|
|
49
|
+
options: [
|
|
50
|
+
{ label: 'Free', value: 'free' },
|
|
51
|
+
{ label: 'Pro', value: 'pro' },
|
|
52
|
+
{ label: 'Enterprise', value: 'enterprise' },
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
const SETTINGS = {
|
|
58
|
+
key: 'settings',
|
|
59
|
+
fields: [
|
|
60
|
+
{ key: 'notifications', type: 'checkbox', label: 'Enable notifications', testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.settingsNotifications },
|
|
61
|
+
{
|
|
62
|
+
key: 'theme', type: 'radioSelect', label: 'Theme', required: true, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.settingsTheme,
|
|
63
|
+
options: [
|
|
64
|
+
{ label: 'Dark', value: 'dark' },
|
|
65
|
+
{ label: 'Light', value: 'light' },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: 'language', type: 'select', label: 'Language', required: true, testId: fdp_test_id_conventions_const_1.FDP_TestIdConventions.settingsLanguage,
|
|
70
|
+
options: [
|
|
71
|
+
{ label: 'English', value: 'en' },
|
|
72
|
+
{ label: 'Magyar', value: 'hu' },
|
|
73
|
+
{ label: 'Deutsch', value: 'de' },
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
REGISTRY['LOGIN'] = LOGIN;
|
|
79
|
+
REGISTRY['REGISTER'] = REGISTER;
|
|
80
|
+
REGISTRY['PASSWORD_RESET'] = PASSWORD_RESET;
|
|
81
|
+
REGISTRY['PROFILE'] = PROFILE;
|
|
82
|
+
REGISTRY['SETTINGS'] = SETTINGS;
|
|
83
|
+
class FDP_FormCatalog {
|
|
84
|
+
static LOGIN = LOGIN;
|
|
85
|
+
static REGISTER = REGISTER;
|
|
86
|
+
static PASSWORD_RESET = PASSWORD_RESET;
|
|
87
|
+
static PROFILE = PROFILE;
|
|
88
|
+
static SETTINGS = SETTINGS;
|
|
89
|
+
/** Visszaadja a regisztrált form Settings-et — null ha ismeretlen. */
|
|
90
|
+
static getForm(key) {
|
|
91
|
+
return REGISTRY[key] ?? null;
|
|
92
|
+
}
|
|
93
|
+
/** Custom form-Settings regisztrációja a katalógusba. */
|
|
94
|
+
static register(key, settings) {
|
|
95
|
+
REGISTRY[key] = settings;
|
|
96
|
+
}
|
|
97
|
+
/** A regisztrált form-kulcsok listája. */
|
|
98
|
+
static keys() {
|
|
99
|
+
return Object.keys(REGISTRY);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.FDP_FormCatalog = FDP_FormCatalog;
|
|
103
|
+
//# sourceMappingURL=fdp-form-catalog.const.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FDP_Init_Util — fdp-e2e-helpers v02.0.0 bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* Egy hivas a teszt-suite `globalSetup`-jaban (vagy direkt a test-fajl tetejen)
|
|
5
|
+
* konfigurálja a `dynamo-e2e/runtime` generic helpers-t az FDP-konvenciókkal:
|
|
6
|
+
* - `defaultEmailDomain = 'test.futdevpro.hu'` (a regi E2E_UniqueGenerator
|
|
7
|
+
* hard-coded behavior-jat reprodukalja)
|
|
8
|
+
*
|
|
9
|
+
* Ezzel a v02.0.0-ban a hardcoded `@test.futdevpro.hu` "automaticus" marad
|
|
10
|
+
* MINT consumer-projekt-szintu opt-in.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FDP_Init_Util {
|
|
13
|
+
/**
|
|
14
|
+
* Konfigurálja a `dynamo-e2e` generic helpers-eket FDP-default-okkal.
|
|
15
|
+
*
|
|
16
|
+
* Hívd meg egyszer a teszt-suite indulásakor.
|
|
17
|
+
*/
|
|
18
|
+
static setupDynamoE2E(opts?: {
|
|
19
|
+
emailDomain?: string;
|
|
20
|
+
}): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=fdp-init.util.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDP_Init_Util = void 0;
|
|
4
|
+
const dynamo_e2e_1 = require("@futdevpro/dynamo-e2e");
|
|
5
|
+
/**
|
|
6
|
+
* FDP_Init_Util — fdp-e2e-helpers v02.0.0 bootstrap.
|
|
7
|
+
*
|
|
8
|
+
* Egy hivas a teszt-suite `globalSetup`-jaban (vagy direkt a test-fajl tetejen)
|
|
9
|
+
* konfigurálja a `dynamo-e2e/runtime` generic helpers-t az FDP-konvenciókkal:
|
|
10
|
+
* - `defaultEmailDomain = 'test.futdevpro.hu'` (a regi E2E_UniqueGenerator
|
|
11
|
+
* hard-coded behavior-jat reprodukalja)
|
|
12
|
+
*
|
|
13
|
+
* Ezzel a v02.0.0-ban a hardcoded `@test.futdevpro.hu` "automaticus" marad
|
|
14
|
+
* MINT consumer-projekt-szintu opt-in.
|
|
15
|
+
*/
|
|
16
|
+
class FDP_Init_Util {
|
|
17
|
+
/**
|
|
18
|
+
* Konfigurálja a `dynamo-e2e` generic helpers-eket FDP-default-okkal.
|
|
19
|
+
*
|
|
20
|
+
* Hívd meg egyszer a teszt-suite indulásakor.
|
|
21
|
+
*/
|
|
22
|
+
static setupDynamoE2E(opts) {
|
|
23
|
+
dynamo_e2e_1.DyE2E_UniqueGenerator_Util.defaultEmailDomain = opts?.emailDomain ?? 'test.futdevpro.hu';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.FDP_Init_Util = FDP_Init_Util;
|
|
27
|
+
//# sourceMappingURL=fdp-init.util.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FDP_TestIdConventions — FDP-projekt-szintű testId-prefix konvenciók.
|
|
3
|
+
*
|
|
4
|
+
* Minden FDP-projekt-felület ezt a sémát használja (a `master-prompter`,
|
|
5
|
+
* `organizer`, `futdevpro`, `niche-datasets-space`, `fdp-auth-service` stb.).
|
|
6
|
+
*
|
|
7
|
+
* Projekt-szinten override-olható — de a default-érték a "köztes szabvány".
|
|
8
|
+
*/
|
|
9
|
+
export declare const FDP_TestIdConventions: {
|
|
10
|
+
readonly loginFormSelector: "a-fdp-login-form";
|
|
11
|
+
readonly loginEmail: "login-email";
|
|
12
|
+
readonly loginPassword: "login-password";
|
|
13
|
+
readonly loginSubmit: "login-submit";
|
|
14
|
+
readonly loginRememberMe: "login-remember";
|
|
15
|
+
readonly registerFormSelector: "a-fdp-register-form";
|
|
16
|
+
readonly registerUsername: "register-username";
|
|
17
|
+
readonly registerEmail: "register-email";
|
|
18
|
+
readonly registerPassword: "register-password";
|
|
19
|
+
readonly registerPasswordConfirm: "register-password-confirm";
|
|
20
|
+
readonly registerAcceptedTerms: "register-accepted-terms";
|
|
21
|
+
readonly registerSubmit: "register-submit";
|
|
22
|
+
readonly profileFormSelector: "a-fdp-profile-form";
|
|
23
|
+
readonly profileDisplayName: "profile-display-name";
|
|
24
|
+
readonly profileBio: "profile-bio";
|
|
25
|
+
readonly profileAvatar: "profile-avatar";
|
|
26
|
+
readonly profileBirthDate: "profile-birth-date";
|
|
27
|
+
readonly profilePlan: "profile-plan";
|
|
28
|
+
readonly profileSubmit: "profile-submit";
|
|
29
|
+
readonly passwordResetFormSelector: "a-fdp-password-reset-form";
|
|
30
|
+
readonly passwordResetEmail: "password-reset-email";
|
|
31
|
+
readonly passwordResetNew: "password-reset-new";
|
|
32
|
+
readonly passwordResetNewConfirm: "password-reset-new-confirm";
|
|
33
|
+
readonly passwordResetSubmit: "password-reset-submit";
|
|
34
|
+
readonly settingsFormSelector: "a-fdp-settings-form";
|
|
35
|
+
readonly settingsNotifications: "settings-notifications";
|
|
36
|
+
readonly settingsTheme: "settings-theme";
|
|
37
|
+
readonly settingsLanguage: "settings-language";
|
|
38
|
+
readonly settingsSubmit: "settings-submit";
|
|
39
|
+
readonly commonRoutes: {
|
|
40
|
+
readonly login: "/login";
|
|
41
|
+
readonly register: "/register";
|
|
42
|
+
readonly passwordReset: "/password-reset";
|
|
43
|
+
readonly profile: "/profile";
|
|
44
|
+
readonly settings: "/settings";
|
|
45
|
+
readonly dashboard: "/dashboard";
|
|
46
|
+
readonly home: "/home";
|
|
47
|
+
};
|
|
48
|
+
readonly successRouteRegex: RegExp;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=fdp-test-id-conventions.const.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDP_TestIdConventions = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* FDP_TestIdConventions — FDP-projekt-szintű testId-prefix konvenciók.
|
|
6
|
+
*
|
|
7
|
+
* Minden FDP-projekt-felület ezt a sémát használja (a `master-prompter`,
|
|
8
|
+
* `organizer`, `futdevpro`, `niche-datasets-space`, `fdp-auth-service` stb.).
|
|
9
|
+
*
|
|
10
|
+
* Projekt-szinten override-olható — de a default-érték a "köztes szabvány".
|
|
11
|
+
*/
|
|
12
|
+
exports.FDP_TestIdConventions = {
|
|
13
|
+
loginFormSelector: 'a-fdp-login-form',
|
|
14
|
+
loginEmail: 'login-email',
|
|
15
|
+
loginPassword: 'login-password',
|
|
16
|
+
loginSubmit: 'login-submit',
|
|
17
|
+
loginRememberMe: 'login-remember',
|
|
18
|
+
registerFormSelector: 'a-fdp-register-form',
|
|
19
|
+
registerUsername: 'register-username',
|
|
20
|
+
registerEmail: 'register-email',
|
|
21
|
+
registerPassword: 'register-password',
|
|
22
|
+
registerPasswordConfirm: 'register-password-confirm',
|
|
23
|
+
registerAcceptedTerms: 'register-accepted-terms',
|
|
24
|
+
registerSubmit: 'register-submit',
|
|
25
|
+
profileFormSelector: 'a-fdp-profile-form',
|
|
26
|
+
profileDisplayName: 'profile-display-name',
|
|
27
|
+
profileBio: 'profile-bio',
|
|
28
|
+
profileAvatar: 'profile-avatar',
|
|
29
|
+
profileBirthDate: 'profile-birth-date',
|
|
30
|
+
profilePlan: 'profile-plan',
|
|
31
|
+
profileSubmit: 'profile-submit',
|
|
32
|
+
passwordResetFormSelector: 'a-fdp-password-reset-form',
|
|
33
|
+
passwordResetEmail: 'password-reset-email',
|
|
34
|
+
passwordResetNew: 'password-reset-new',
|
|
35
|
+
passwordResetNewConfirm: 'password-reset-new-confirm',
|
|
36
|
+
passwordResetSubmit: 'password-reset-submit',
|
|
37
|
+
settingsFormSelector: 'a-fdp-settings-form',
|
|
38
|
+
settingsNotifications: 'settings-notifications',
|
|
39
|
+
settingsTheme: 'settings-theme',
|
|
40
|
+
settingsLanguage: 'settings-language',
|
|
41
|
+
settingsSubmit: 'settings-submit',
|
|
42
|
+
commonRoutes: {
|
|
43
|
+
login: '/login',
|
|
44
|
+
register: '/register',
|
|
45
|
+
passwordReset: '/password-reset',
|
|
46
|
+
profile: '/profile',
|
|
47
|
+
settings: '/settings',
|
|
48
|
+
dashboard: '/dashboard',
|
|
49
|
+
home: '/home',
|
|
50
|
+
},
|
|
51
|
+
successRouteRegex: /\/dashboard|\/home|\/projects|\/profile/,
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=fdp-test-id-conventions.const.js.map
|
|
@@ -4,6 +4,12 @@ import { E2E_User_Interface } from '../_models/interfaces/e2e-user.interface';
|
|
|
4
4
|
* E2E_LoggerService — strukturalt logging E2E test-flow-hoz metadata-val
|
|
5
5
|
* (user + environment + scenario + duration).
|
|
6
6
|
*
|
|
7
|
+
* @deprecated v02.0.0 ota — uj kodban hasznald a `DyE2E_LoggerService`-t
|
|
8
|
+
* (`@futdevpro/dynamo-e2e`-bol re-exported). A `DyE2E_LoggerService` stateless,
|
|
9
|
+
* NEM singleton (NEM kell `getInstance()`), és `DyFM_Log` runtime-dep nélkül
|
|
10
|
+
* fut. FDP-szintű DyFM_Log-bekötés: `DyE2E_LoggerService.setOutput(FDP_Output)`.
|
|
11
|
+
* Migration-guide: dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md
|
|
12
|
+
*
|
|
7
13
|
* Lift-and-shift a fdp-token-service `e2e/src/_shared/_services/
|
|
8
14
|
* e2e-logger.service.ts`-bol (BL-20260518-006).
|
|
9
15
|
*
|
|
@@ -7,6 +7,12 @@ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
|
|
|
7
7
|
* E2E_LoggerService — strukturalt logging E2E test-flow-hoz metadata-val
|
|
8
8
|
* (user + environment + scenario + duration).
|
|
9
9
|
*
|
|
10
|
+
* @deprecated v02.0.0 ota — uj kodban hasznald a `DyE2E_LoggerService`-t
|
|
11
|
+
* (`@futdevpro/dynamo-e2e`-bol re-exported). A `DyE2E_LoggerService` stateless,
|
|
12
|
+
* NEM singleton (NEM kell `getInstance()`), és `DyFM_Log` runtime-dep nélkül
|
|
13
|
+
* fut. FDP-szintű DyFM_Log-bekötés: `DyE2E_LoggerService.setOutput(FDP_Output)`.
|
|
14
|
+
* Migration-guide: dynamo-e2e/__documentations/migration-guide-fdp-helpers-v2.md
|
|
15
|
+
*
|
|
10
16
|
* Lift-and-shift a fdp-token-service `e2e/src/_shared/_services/
|
|
11
17
|
* e2e-logger.service.ts`-bol (BL-20260518-006).
|
|
12
18
|
*
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Page } from '@playwright/test';
|
|
2
|
+
import { DyE2E_LoginFlowHelper_Base } from '@futdevpro/dynamo-e2e';
|
|
3
|
+
/**
|
|
4
|
+
* FDPLoginFlowHelper — `DyE2E_LoginFlowHelper_Base` FDP-konkrét impl-je.
|
|
5
|
+
*
|
|
6
|
+
* Selectors + route-pattern a `FDP_TestIdConventions`-ból, `extractAuthState`
|
|
7
|
+
* a localStorage-ből olvassa az `fdp_token` + `fdp_refresh_token`-eket.
|
|
8
|
+
*
|
|
9
|
+
* Override-pattern: a projekt-specifikus FDP-app (pl. master-prompter) saját
|
|
10
|
+
* subclass-szal felülírhatja a default route-pattern-t vagy a token-kulcsokat.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const helper = new FDPLoginFlowHelper();
|
|
15
|
+
* const result = await helper.login(page, 'user@test.futdevpro.hu', 'password');
|
|
16
|
+
* if (result.success) {
|
|
17
|
+
* console.log('Logged in, token:', result.authState?.token);
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class FDPLoginFlowHelper extends DyE2E_LoginFlowHelper_Base {
|
|
22
|
+
loginFormSelector: string;
|
|
23
|
+
emailInputTestId: string;
|
|
24
|
+
passwordInputTestId: string;
|
|
25
|
+
submitButtonTestId: string;
|
|
26
|
+
successRouteRegex: RegExp;
|
|
27
|
+
loginRoute: string;
|
|
28
|
+
/** Token-localStorage-kulcs (override-olható subclass-ban). */
|
|
29
|
+
tokenKey: string;
|
|
30
|
+
refreshTokenKey: string;
|
|
31
|
+
protected extractAuthState(page: Page): Promise<{
|
|
32
|
+
token?: string;
|
|
33
|
+
refreshToken?: string;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=fdp-login-flow-helper.service.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDPLoginFlowHelper = void 0;
|
|
4
|
+
const dynamo_e2e_1 = require("@futdevpro/dynamo-e2e");
|
|
5
|
+
const fdp_test_id_conventions_const_1 = require("../_collections/fdp-test-id-conventions.const");
|
|
6
|
+
/**
|
|
7
|
+
* FDPLoginFlowHelper — `DyE2E_LoginFlowHelper_Base` FDP-konkrét impl-je.
|
|
8
|
+
*
|
|
9
|
+
* Selectors + route-pattern a `FDP_TestIdConventions`-ból, `extractAuthState`
|
|
10
|
+
* a localStorage-ből olvassa az `fdp_token` + `fdp_refresh_token`-eket.
|
|
11
|
+
*
|
|
12
|
+
* Override-pattern: a projekt-specifikus FDP-app (pl. master-prompter) saját
|
|
13
|
+
* subclass-szal felülírhatja a default route-pattern-t vagy a token-kulcsokat.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const helper = new FDPLoginFlowHelper();
|
|
18
|
+
* const result = await helper.login(page, 'user@test.futdevpro.hu', 'password');
|
|
19
|
+
* if (result.success) {
|
|
20
|
+
* console.log('Logged in, token:', result.authState?.token);
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
class FDPLoginFlowHelper extends dynamo_e2e_1.DyE2E_LoginFlowHelper_Base {
|
|
25
|
+
loginFormSelector = fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginFormSelector;
|
|
26
|
+
emailInputTestId = fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginEmail;
|
|
27
|
+
passwordInputTestId = fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginPassword;
|
|
28
|
+
submitButtonTestId = fdp_test_id_conventions_const_1.FDP_TestIdConventions.loginSubmit;
|
|
29
|
+
successRouteRegex = fdp_test_id_conventions_const_1.FDP_TestIdConventions.successRouteRegex;
|
|
30
|
+
loginRoute = fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.login;
|
|
31
|
+
/** Token-localStorage-kulcs (override-olható subclass-ban). */
|
|
32
|
+
tokenKey = 'fdp_token';
|
|
33
|
+
refreshTokenKey = 'fdp_refresh_token';
|
|
34
|
+
async extractAuthState(page) {
|
|
35
|
+
return {
|
|
36
|
+
token: await page.evaluate((k) => localStorage.getItem(k), this.tokenKey) ?? undefined,
|
|
37
|
+
refreshToken: await page.evaluate((k) => localStorage.getItem(k), this.refreshTokenKey) ?? undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.FDPLoginFlowHelper = FDPLoginFlowHelper;
|
|
42
|
+
//# sourceMappingURL=fdp-login-flow-helper.service.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FDP_StandardFormSuite_Generator — opinionated preset wrap a
|
|
3
|
+
* `DyE2E_FormSuite_Generator` köré FDP-default-okkal.
|
|
4
|
+
*
|
|
5
|
+
* Ezek a FDP-default-ok:
|
|
6
|
+
* - `formSelector`: 'a-fdp-form-new' vagy a `FDP_TestIdConventions`-ból
|
|
7
|
+
* pre-defined form-szelektor
|
|
8
|
+
* - `extraImports`: `import { FDP_Init_Util } from '@futdevpro/fdp-e2e-helpers';`
|
|
9
|
+
* - `describePrefix`: `'FDP: <formKey>'`
|
|
10
|
+
* - `runMode`: 'full' default
|
|
11
|
+
*
|
|
12
|
+
* Sample:
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { FDP_StandardFormSuite_Generator } from '@futdevpro/fdp-e2e-helpers';
|
|
15
|
+
*
|
|
16
|
+
* const spec = FDP_StandardFormSuite_Generator.emit({ formKey: 'LOGIN' });
|
|
17
|
+
* // → automatikusan emit-eli a FDP_FormCatalog.LOGIN settings-bol a teljes
|
|
18
|
+
* // form-suite-ot a FDP-konvenciókkal.
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export interface FDP_StandardFormSuite_Options {
|
|
22
|
+
/** Egy a `FDP_FormCatalog` kulcsai közül ('LOGIN' | 'REGISTER' | 'PASSWORD_RESET' | 'PROFILE' | 'SETTINGS'). */
|
|
23
|
+
formKey: string;
|
|
24
|
+
/** Override formRoute — default a `FDP_TestIdConventions.commonRoutes`-ból. */
|
|
25
|
+
formRoute?: string;
|
|
26
|
+
/** Override formSelector — default `a-fdp-form-new`. */
|
|
27
|
+
formSelector?: string;
|
|
28
|
+
/** Override suiteSettings. */
|
|
29
|
+
suiteSettings?: {
|
|
30
|
+
runMode?: 'smoke' | 'full' | 'nightly';
|
|
31
|
+
skipFormLevelTests?: boolean;
|
|
32
|
+
extraImports?: string[];
|
|
33
|
+
describePrefix?: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare class FDP_StandardFormSuite_Generator {
|
|
37
|
+
static emit(options: FDP_StandardFormSuite_Options): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=fdp-standard-form-suite-generator.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FDP_StandardFormSuite_Generator = void 0;
|
|
4
|
+
const dynamo_e2e_1 = require("@futdevpro/dynamo-e2e");
|
|
5
|
+
const fdp_form_catalog_const_1 = require("../_collections/fdp-form-catalog.const");
|
|
6
|
+
const fdp_test_id_conventions_const_1 = require("../_collections/fdp-test-id-conventions.const");
|
|
7
|
+
class FDP_StandardFormSuite_Generator {
|
|
8
|
+
static emit(options) {
|
|
9
|
+
const formSettings = fdp_form_catalog_const_1.FDP_FormCatalog.getForm(options.formKey);
|
|
10
|
+
if (!formSettings) {
|
|
11
|
+
throw new Error(`FDP_StandardFormSuite_Generator: unknown formKey '${options.formKey}'. Available: ${fdp_form_catalog_const_1.FDP_FormCatalog.keys().join(', ')}`);
|
|
12
|
+
}
|
|
13
|
+
// Default route — `FDP_TestIdConventions.commonRoutes`-ból, ha létezik
|
|
14
|
+
const routeLookup = {
|
|
15
|
+
LOGIN: fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.login,
|
|
16
|
+
REGISTER: fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.register,
|
|
17
|
+
PASSWORD_RESET: fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.passwordReset,
|
|
18
|
+
PROFILE: fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.profile,
|
|
19
|
+
SETTINGS: fdp_test_id_conventions_const_1.FDP_TestIdConventions.commonRoutes.settings,
|
|
20
|
+
};
|
|
21
|
+
const formRoute = options.formRoute ?? routeLookup[options.formKey] ?? '/';
|
|
22
|
+
const formSelector = options.formSelector ?? 'a-fdp-form-new';
|
|
23
|
+
const extraImports = [
|
|
24
|
+
`import { FDP_Init_Util } from '@futdevpro/fdp-e2e-helpers';`,
|
|
25
|
+
...(options.suiteSettings?.extraImports ?? []),
|
|
26
|
+
];
|
|
27
|
+
return dynamo_e2e_1.DyE2E_FormSuite_Generator.emit({
|
|
28
|
+
formSettings: formSettings,
|
|
29
|
+
formRoute: formRoute,
|
|
30
|
+
formSelector: formSelector,
|
|
31
|
+
suiteSettings: {
|
|
32
|
+
runMode: (options.suiteSettings?.runMode ?? 'full'),
|
|
33
|
+
skipFormLevelTests: options.suiteSettings?.skipFormLevelTests ?? false,
|
|
34
|
+
extraImports: extraImports,
|
|
35
|
+
describePrefix: options.suiteSettings?.describePrefix ?? `FDP: ${options.formKey}`,
|
|
36
|
+
},
|
|
37
|
+
headerComment: `FDP-flavored form-suite (preset). Auto-init: FDP_Init_Util.setupDynamoE2E()`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.FDP_StandardFormSuite_Generator = FDP_StandardFormSuite_Generator;
|
|
42
|
+
//# sourceMappingURL=fdp-standard-form-suite-generator.js.map
|
package/build/index.d.ts
CHANGED
|
@@ -3,6 +3,13 @@ export * from './_collections/e2e-unique-generator.util';
|
|
|
3
3
|
export * from './_collections/fdp-cwv-collector.util';
|
|
4
4
|
export * from './_collections/fdp-api-e2e.util';
|
|
5
5
|
export * from './_collections/fdp-browser-e2e.util';
|
|
6
|
+
export * from './_collections/dynamo-e2e-reexports';
|
|
7
|
+
export * from './_collections/fdp-init.util';
|
|
8
|
+
export * from './_collections/fdp-test-id-conventions.const';
|
|
9
|
+
export * from './_collections/fdp-form-catalog.const';
|
|
10
|
+
export * from './_collections/fdp-dyfm-logger-output';
|
|
11
|
+
export * from './_services/fdp-login-flow-helper.service';
|
|
12
|
+
export * from './_services/fdp-standard-form-suite-generator';
|
|
6
13
|
export * from './_services/e2e-config.service';
|
|
7
14
|
export * from './_services/e2e-logger.service';
|
|
8
15
|
export * from './_services/e2e-login-helper.service';
|
package/build/index.js
CHANGED
|
@@ -7,6 +7,17 @@ tslib_1.__exportStar(require("./_collections/e2e-unique-generator.util"), export
|
|
|
7
7
|
tslib_1.__exportStar(require("./_collections/fdp-cwv-collector.util"), exports);
|
|
8
8
|
tslib_1.__exportStar(require("./_collections/fdp-api-e2e.util"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./_collections/fdp-browser-e2e.util"), exports);
|
|
10
|
+
// MP-07 SP-D — v01.16.0 backward-compat re-exports a `@futdevpro/dynamo-e2e/runtime`-ról.
|
|
11
|
+
// (v02.0.0: a regi sajat impl-ek @deprecated; a re-export-ok az uj kanonikus API.)
|
|
12
|
+
tslib_1.__exportStar(require("./_collections/dynamo-e2e-reexports"), exports);
|
|
13
|
+
// MP-07 SP-F — v02.0.0 FDP-Init util (DyE2E setup FDP-default-okkal)
|
|
14
|
+
tslib_1.__exportStar(require("./_collections/fdp-init.util"), exports);
|
|
15
|
+
// MP-12 — FDP-flavored extensions a dynamo-e2e-en
|
|
16
|
+
tslib_1.__exportStar(require("./_collections/fdp-test-id-conventions.const"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./_collections/fdp-form-catalog.const"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./_collections/fdp-dyfm-logger-output"), exports);
|
|
19
|
+
tslib_1.__exportStar(require("./_services/fdp-login-flow-helper.service"), exports);
|
|
20
|
+
tslib_1.__exportStar(require("./_services/fdp-standard-form-suite-generator"), exports);
|
|
10
21
|
// SERVICES
|
|
11
22
|
tslib_1.__exportStar(require("./_services/e2e-config.service"), exports);
|
|
12
23
|
tslib_1.__exportStar(require("./_services/e2e-logger.service"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/fdp-e2e-helpers",
|
|
3
|
-
"version": "01.15.
|
|
3
|
+
"version": "01.15.27",
|
|
4
4
|
"description": "Shared E2E test helpers for FDP-stack apps. First util: E2E_HardDelete_Util. Stateless utility-collection — NOT a framework.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "shared-package",
|
|
@@ -71,18 +71,19 @@
|
|
|
71
71
|
],
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"@futdevpro/fsm-dynamo": "1.15.23",
|
|
74
|
-
"@futdevpro/nts-dynamo": "1.15.
|
|
74
|
+
"@futdevpro/nts-dynamo": "1.15.48",
|
|
75
75
|
"@playwright/test": ">=1.49.0"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
+
"@futdevpro/dynamo-e2e": "^1.5.0",
|
|
78
79
|
"axios": "~1.8.1",
|
|
79
80
|
"dotenv": "^16.4.5",
|
|
80
81
|
"tslib": "^2.6.2"
|
|
81
82
|
},
|
|
82
83
|
"devDependencies": {
|
|
83
|
-
"@futdevpro/dynamo-eslint": "1.15.
|
|
84
|
+
"@futdevpro/dynamo-eslint": "1.15.14",
|
|
84
85
|
"@futdevpro/fsm-dynamo": "1.15.23",
|
|
85
|
-
"@futdevpro/nts-dynamo": "1.15.
|
|
86
|
+
"@futdevpro/nts-dynamo": "1.15.48",
|
|
86
87
|
"@playwright/test": "^1.49.0",
|
|
87
88
|
"@types/jasmine": "^5.1.5",
|
|
88
89
|
"@typescript-eslint/eslint-plugin": "^8.41.0",
|