@gooddata/sdk-e2e-utils 11.60.0-alpha.3 → 11.60.0-alpha.4
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/esm/create-test/feature-hub/mock.d.ts +5 -0
- package/esm/create-test/feature-hub/mock.d.ts.map +1 -0
- package/esm/create-test/feature-hub/mock.js +15 -0
- package/esm/create-test/feature-hub/types.d.ts +21 -0
- package/esm/create-test/feature-hub/types.d.ts.map +1 -0
- package/esm/create-test/feature-hub/types.js +2 -0
- package/esm/create-test/goodmock/admin.d.ts +34 -0
- package/esm/create-test/goodmock/admin.d.ts.map +1 -0
- package/esm/create-test/goodmock/admin.js +99 -0
- package/esm/create-test/goodmock/mode.d.ts +14 -0
- package/esm/create-test/goodmock/mode.d.ts.map +1 -0
- package/esm/create-test/goodmock/mode.js +17 -0
- package/esm/create-test/goodmock/playwright.d.ts +5 -0
- package/esm/create-test/goodmock/playwright.d.ts.map +1 -0
- package/esm/create-test/goodmock/playwright.js +37 -0
- package/esm/create-test/goodmock/snapshot/assert-no-leak-patterns.d.ts +9 -0
- package/esm/create-test/goodmock/snapshot/assert-no-leak-patterns.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/assert-no-leak-patterns.js +20 -0
- package/esm/create-test/goodmock/snapshot/assert-no-secret-leaks.d.ts +4 -0
- package/esm/create-test/goodmock/snapshot/assert-no-secret-leaks.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/assert-no-secret-leaks.js +14 -0
- package/esm/create-test/goodmock/snapshot/build-masked-form-pattern.d.ts +2 -0
- package/esm/create-test/goodmock/snapshot/build-masked-form-pattern.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/build-masked-form-pattern.js +17 -0
- package/esm/create-test/goodmock/snapshot/get-effective-secret-mappings.d.ts +3 -0
- package/esm/create-test/goodmock/snapshot/get-effective-secret-mappings.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/get-effective-secret-mappings.js +2 -0
- package/esm/create-test/goodmock/snapshot/replace-secrets.d.ts +10 -0
- package/esm/create-test/goodmock/snapshot/replace-secrets.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/replace-secrets.js +23 -0
- package/esm/create-test/goodmock/snapshot/sanitize-credentials.d.ts +4 -0
- package/esm/create-test/goodmock/snapshot/sanitize-credentials.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/sanitize-credentials.js +41 -0
- package/esm/create-test/goodmock/snapshot/sanitize-workspace-ids.d.ts +4 -0
- package/esm/create-test/goodmock/snapshot/sanitize-workspace-ids.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/sanitize-workspace-ids.js +21 -0
- package/esm/create-test/goodmock/snapshot/snapshot-and-save-recording.d.ts +50 -0
- package/esm/create-test/goodmock/snapshot/snapshot-and-save-recording.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/snapshot-and-save-recording.js +64 -0
- package/esm/create-test/goodmock/snapshot/snapshot-param.d.ts +11 -0
- package/esm/create-test/goodmock/snapshot/snapshot-param.d.ts.map +1 -0
- package/esm/create-test/goodmock/snapshot/snapshot-param.js +9 -0
- package/esm/create-test/goodmock/types.d.ts +60 -0
- package/esm/create-test/goodmock/types.d.ts.map +1 -0
- package/esm/create-test/goodmock/types.js +2 -0
- package/esm/create-test/playwright/call-original-fn.d.ts +17 -0
- package/esm/create-test/playwright/call-original-fn.d.ts.map +1 -0
- package/esm/create-test/playwright/call-original-fn.js +25 -0
- package/esm/create-test/playwright/describe/factory.d.ts +27 -0
- package/esm/create-test/playwright/describe/factory.d.ts.map +1 -0
- package/esm/create-test/playwright/describe/factory.js +18 -0
- package/esm/create-test/playwright/fixtures.d.ts +7 -0
- package/esm/create-test/playwright/fixtures.d.ts.map +1 -0
- package/esm/create-test/playwright/fixtures.js +2 -0
- package/esm/create-test/playwright/playwright-types.d.ts +42 -0
- package/esm/create-test/playwright/playwright-types.d.ts.map +1 -0
- package/esm/create-test/playwright/playwright-types.js +2 -0
- package/esm/create-test/playwright/test/factory.d.ts +7 -0
- package/esm/create-test/playwright/test/factory.d.ts.map +1 -0
- package/esm/create-test/playwright/test/factory.js +42 -0
- package/esm/create-test/playwright/test/types.d.ts +27 -0
- package/esm/create-test/playwright/test/types.d.ts.map +1 -0
- package/esm/create-test/playwright/test/types.js +2 -0
- package/esm/create-test/playwright/top-level-describe/build-suite-callback.d.ts +9 -0
- package/esm/create-test/playwright/top-level-describe/build-suite-callback.d.ts.map +1 -0
- package/esm/create-test/playwright/top-level-describe/build-suite-callback.js +17 -0
- package/esm/create-test/playwright/top-level-describe/factory.d.ts +8 -0
- package/esm/create-test/playwright/top-level-describe/factory.d.ts.map +1 -0
- package/esm/create-test/playwright/top-level-describe/factory.js +12 -0
- package/esm/create-test/playwright/top-level-describe/types.d.ts +17 -0
- package/esm/create-test/playwright/top-level-describe/types.d.ts.map +1 -0
- package/esm/create-test/playwright/top-level-describe/types.js +2 -0
- package/esm/create-test/playwright/types.d.ts +17 -0
- package/esm/create-test/playwright/types.d.ts.map +1 -0
- package/esm/create-test/playwright/types.js +2 -0
- package/esm/create-test/playwright/with-describe-details.d.ts +6 -0
- package/esm/create-test/playwright/with-describe-details.d.ts.map +1 -0
- package/esm/create-test/playwright/with-describe-details.js +39 -0
- package/esm/index.d.ts +14 -3
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +8 -3
- package/esm/sdk-e2e-utils.d.ts +112 -38
- package/package.json +3 -3
- package/esm/goodmock.d.ts +0 -138
- package/esm/goodmock.d.ts.map +0 -1
- package/esm/goodmock.js +0 -284
- package/esm/playwright.d.ts +0 -97
- package/esm/playwright.d.ts.map +0 -1
- package/esm/playwright.js +0 -189
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-param.d.ts","sourceRoot":"","sources":["../../../../src/create-test/goodmock/snapshot/snapshot-param.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;IACvB,cAAc;QAAI,iBAAiB;;IACnC,kBAAkB;QACd,OAAO;QACP,gBAAgB;QAChB,mBAAmB;;CAE1B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
export interface IGoodmockMapping {
|
|
5
|
+
request: {
|
|
6
|
+
url?: string;
|
|
7
|
+
urlPath?: string;
|
|
8
|
+
bodyPatterns?: unknown;
|
|
9
|
+
};
|
|
10
|
+
response: {
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
jsonBody?: unknown;
|
|
13
|
+
body?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export interface IWorkspaceIdMapping {
|
|
20
|
+
sourceWorkspaceId: string;
|
|
21
|
+
targetWorkspaceId: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
* Rewrite of a secret value in saved recordings. Every occurrence of `secret` (request bodies,
|
|
26
|
+
* response bodies, URLs) is replaced with `placeholder`, so tests can type the placeholder at
|
|
27
|
+
* replay time and still match the recorded request exactly.
|
|
28
|
+
*/
|
|
29
|
+
export interface ISecretMapping {
|
|
30
|
+
secret: string;
|
|
31
|
+
placeholder: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
* A credential shape that must never appear in a saved recording (checked against the fully
|
|
36
|
+
* serialized output). Provide domain-specific shapes (e.g. a provider's API key format) via
|
|
37
|
+
* {@link ISnapshotAndSaveRecordingOptions.leakPatterns} — this module has no built-in patterns of
|
|
38
|
+
* its own, since it has no knowledge of what a given consumer's traffic considers a secret.
|
|
39
|
+
*/
|
|
40
|
+
export interface ILeakPattern {
|
|
41
|
+
label: string;
|
|
42
|
+
pattern: RegExp;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
export interface IGoodmockOptions {
|
|
48
|
+
host: string;
|
|
49
|
+
backendHost: string;
|
|
50
|
+
getMappingPath: (specFile: string) => string;
|
|
51
|
+
workspaceIdMappings?: IWorkspaceIdMapping | IWorkspaceIdMapping[];
|
|
52
|
+
baseUrl?: string;
|
|
53
|
+
/** Secret values replaced by placeholders in saved recordings (see {@link ISecretMapping}). */
|
|
54
|
+
secretMappings?: ISecretMapping[];
|
|
55
|
+
/** Credential-shaped patterns that must never appear in saved recordings (see {@link ILeakPattern}). */
|
|
56
|
+
leakPatterns?: ILeakPattern[];
|
|
57
|
+
/** Consumer-supplied redaction hook for domain-specific secrets (see snapshotAndSaveRecording). */
|
|
58
|
+
sanitizeMappings?: (mappings: IGoodmockMapping[]) => IGoodmockMapping[];
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/create-test/goodmock/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpE,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,wGAAwG;IACxG,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;IAC9B,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,CAAC;CAC3E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TestDetails } from "@playwright/test";
|
|
2
|
+
import type { Describe, DescribeFixme, DescribeOnly, DescribeSkip } from "./playwright-types.js";
|
|
3
|
+
import type { ITestDetails } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export type Callback = () => void;
|
|
8
|
+
export type OriginalFn = Describe | DescribeFixme | DescribeOnly | DescribeSkip;
|
|
9
|
+
/** Call a Playwright describe function, passing details only when there are any. */
|
|
10
|
+
export declare function callOriginalFn(originalFn: OriginalFn, title: string, pwDetails: TestDetails | undefined, callback: Callback): void;
|
|
11
|
+
/** Strip custom fields before passing details to Playwright. */
|
|
12
|
+
export declare function toPlaywrightDetails(details: ITestDetails | undefined): TestDetails | undefined;
|
|
13
|
+
export declare function parseArgs(detailsOrFn: ITestDetails | Callback, func?: Callback): {
|
|
14
|
+
details: ITestDetails | undefined;
|
|
15
|
+
fn: Callback;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=call-original-fn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-original-fn.d.ts","sourceRoot":"","sources":["../../../src/create-test/playwright/call-original-fn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AAEhF,oFAAoF;AACpF,wBAAgB,cAAc,CAC1B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,QAAQ,EAAE,QAAQ,GACnB,IAAI,CAMN;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAK9F;AAED,wBAAgB,SAAS,CACrB,WAAW,EAAE,YAAY,GAAG,QAAQ,EACpC,IAAI,CAAC,EAAE,QAAQ,GAChB;IAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,CAMrD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
/** Call a Playwright describe function, passing details only when there are any. */
|
|
3
|
+
export function callOriginalFn(originalFn, title, pwDetails, callback) {
|
|
4
|
+
if (pwDetails) {
|
|
5
|
+
originalFn(title, pwDetails, callback);
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
originalFn(title, callback);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Strip custom fields before passing details to Playwright. */
|
|
12
|
+
export function toPlaywrightDetails(details) {
|
|
13
|
+
if (!details)
|
|
14
|
+
return undefined;
|
|
15
|
+
// oxlint-disable-next-line @typescript-eslint/no-unused-vars
|
|
16
|
+
const { workspaceSettings: _ws, additionalWindowProperties: _awp, ...rest } = details;
|
|
17
|
+
return Object.keys(rest).length > 0 ? rest : undefined;
|
|
18
|
+
}
|
|
19
|
+
export function parseArgs(detailsOrFn, func) {
|
|
20
|
+
const hasDetails = typeof detailsOrFn !== "function";
|
|
21
|
+
return {
|
|
22
|
+
details: hasDetails ? detailsOrFn : undefined,
|
|
23
|
+
fn: hasDetails ? func : detailsOrFn,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Callback, type OriginalFn } from "../call-original-fn.js";
|
|
2
|
+
import type { DescribeConfigure, DescribeFixme, DescribeOnly, DescribeParallel, DescribeSerial, Test } from "../playwright-types.js";
|
|
3
|
+
import type { ITestDetails, WindowProperties, WorkspaceSettings } from "../types.js";
|
|
4
|
+
export interface IGetInsideTopLevelDescribe {
|
|
5
|
+
(): boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
* Call signatures of the overridden `test.describe` and `test.describe.skip`.
|
|
10
|
+
*/
|
|
11
|
+
export interface IDescribeFunction {
|
|
12
|
+
(title: string, callback: Callback): void;
|
|
13
|
+
(title: string, details: ITestDetails, callback: Callback): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export interface IDescribe extends IDescribeFunction {
|
|
19
|
+
skip: IDescribeFunction;
|
|
20
|
+
only: DescribeOnly;
|
|
21
|
+
configure: DescribeConfigure;
|
|
22
|
+
fixme: DescribeFixme;
|
|
23
|
+
serial: DescribeSerial;
|
|
24
|
+
parallel: DescribeParallel;
|
|
25
|
+
}
|
|
26
|
+
export declare function makeDescribeFunction(originalFn: OriginalFn, testInstance: Test, settingsStack: WorkspaceSettings[], awpStack: WindowProperties[], getInsideTopLevelDescribe: IGetInsideTopLevelDescribe): IDescribeFunction;
|
|
27
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/describe/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,UAAU,EAIlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,IAAI,EACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrF,MAAM,WAAW,0BAA0B;IACvC,IAAI,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1C,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,iBAAiB;IAChD,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAaD,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,IAAI,EAClB,aAAa,EAAE,iBAAiB,EAAE,EAClC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,yBAAyB,EAAE,0BAA0B,GACtD,iBAAiB,CAanB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { callOriginalFn, parseArgs, toPlaywrightDetails, } from "../call-original-fn.js";
|
|
3
|
+
import { withDescribeDetails } from "../with-describe-details.js";
|
|
4
|
+
/** Normalize the three describe overloads: `(title, cb)` and `(title, details, cb)`. */
|
|
5
|
+
function parseDescribeArgs(detailsOrCb, cb) {
|
|
6
|
+
const { details, fn } = parseArgs(detailsOrCb, cb);
|
|
7
|
+
return { details, callback: fn };
|
|
8
|
+
}
|
|
9
|
+
export function makeDescribeFunction(originalFn, testInstance, settingsStack, awpStack, getInsideTopLevelDescribe) {
|
|
10
|
+
return (title, detailsOrCb, cb) => {
|
|
11
|
+
const { details, callback } = parseDescribeArgs(detailsOrCb, cb);
|
|
12
|
+
if (!getInsideTopLevelDescribe()) {
|
|
13
|
+
const call = title === undefined ? "test.describe()" : `test.describe("${title}")`;
|
|
14
|
+
throw new Error(`${call} must be nested inside a test.topLevelDescribe() block.`);
|
|
15
|
+
}
|
|
16
|
+
callOriginalFn(originalFn, title, toPlaywrightDetails(details), () => withDescribeDetails(testInstance, settingsStack, awpStack, details, callback));
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Fixtures as PlaywrightFixtures } from "@playwright/test";
|
|
2
|
+
import { type BaseTestArgs, type BaseWorkerArgs } from "./playwright-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export type Fixtures<T extends {} = {}, W extends {} = {}> = PlaywrightFixtures<T, W, BaseTestArgs, BaseWorkerArgs>;
|
|
7
|
+
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/create-test/playwright/fixtures.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,kBAAkB,CAC3E,CAAC,EACD,CAAC,EACD,YAAY,EACZ,cAAc,CACjB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PlaywrightTestArgs, PlaywrightTestOptions, PlaywrightWorkerArgs, PlaywrightWorkerOptions, test } from "@playwright/test";
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export type BaseTestArgs = PlaywrightTestArgs & PlaywrightTestOptions;
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export type BaseWorkerArgs = PlaywrightWorkerArgs & PlaywrightWorkerOptions;
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export type Test = typeof test;
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export type Describe = typeof test.describe;
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export type DescribeOnly = typeof test.describe.only;
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export type DescribeConfigure = typeof test.describe.configure;
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export type DescribeFixme = typeof test.describe.fixme;
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export type DescribeSerial = typeof test.describe.serial;
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export type DescribeParallel = typeof test.describe.parallel;
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
export type DescribeSkip = typeof test.describe.skip;
|
|
42
|
+
//# sourceMappingURL=playwright-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-types.d.ts","sourceRoot":"","sources":["../../../src/create-test/playwright/playwright-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,IAAI,EACP,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,uBAAuB,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/test/factory.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAyDzG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
// oxlint-disable typescript-eslint/no-empty-object-type
|
|
3
|
+
import { test } from "@playwright/test";
|
|
4
|
+
import { makeDescribeFunction } from "../describe/factory.js";
|
|
5
|
+
import { makeTopLevelDescribeFunction } from "../top-level-describe/factory.js";
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* @param options -
|
|
9
|
+
*/
|
|
10
|
+
export function createTest(options) {
|
|
11
|
+
// Tracks whether we're inside a topLevelDescribe during synchronous registration.
|
|
12
|
+
let insideTopLevelDescribe = false;
|
|
13
|
+
function getInsideTopLevelDescribe() {
|
|
14
|
+
return insideTopLevelDescribe;
|
|
15
|
+
}
|
|
16
|
+
function setInsideTopLevelDescribe(value) {
|
|
17
|
+
insideTopLevelDescribe = value;
|
|
18
|
+
}
|
|
19
|
+
// Stacks track workspace settings / additionalWindowProperties hierarchy during
|
|
20
|
+
// synchronous describe registration. Each level merges on top of the parent's.
|
|
21
|
+
// The beforeEach at each level captures the fully-merged snapshot, so the
|
|
22
|
+
// innermost beforeEach (which runs last) wins.
|
|
23
|
+
const settingsStack = [];
|
|
24
|
+
const awpStack = [];
|
|
25
|
+
const testInstance = options.fixtures ? test.extend(options.fixtures) : test;
|
|
26
|
+
const makeDescribeWrapper = (originalFn) => makeDescribeFunction(originalFn, testInstance, settingsStack, awpStack, getInsideTopLevelDescribe);
|
|
27
|
+
const makeTopLevelDescribeWrapper = (originalFn) => makeTopLevelDescribeFunction(originalFn, testInstance, options, settingsStack, awpStack, setInsideTopLevelDescribe);
|
|
28
|
+
const describe = Object.assign(makeDescribeWrapper(testInstance.describe), testInstance.describe, {
|
|
29
|
+
only: makeDescribeWrapper(testInstance.describe.only),
|
|
30
|
+
fixme: makeDescribeWrapper(testInstance.describe.fixme),
|
|
31
|
+
skip: makeDescribeWrapper(testInstance.describe.skip),
|
|
32
|
+
});
|
|
33
|
+
const topLevelDescribe = Object.assign(makeTopLevelDescribeWrapper(testInstance.describe), {
|
|
34
|
+
skip: makeTopLevelDescribeWrapper(testInstance.describe.skip),
|
|
35
|
+
});
|
|
36
|
+
return Object.assign(testInstance.bind(undefined), testInstance, {
|
|
37
|
+
/** Build the overridden `test.describe` (with its `.skip`, `.only`, `.fixme`) for a single `createTest` instance. */
|
|
38
|
+
describe,
|
|
39
|
+
/** Build `test.topLevelDescribe` (with its `.skip`) for a single `createTest` instance. */
|
|
40
|
+
topLevelDescribe,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IFeatureHubEnvironment } from "../../feature-hub/types.js";
|
|
2
|
+
import type { IGoodmockOptions } from "../../goodmock/types.js";
|
|
3
|
+
import type { IDescribe } from "../describe/factory.js";
|
|
4
|
+
import type { Fixtures } from "../fixtures.js";
|
|
5
|
+
import type { Test } from "../playwright-types.js";
|
|
6
|
+
import type { ITopLevelDescribe } from "../top-level-describe/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export interface ICustomCreateTestOptions {
|
|
11
|
+
featureHubResponse: IFeatureHubEnvironment[];
|
|
12
|
+
goodmock?: IGoodmockOptions;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export interface ICreateTestOptions<T extends {} = {}, W extends {} = {}> extends ICustomCreateTestOptions {
|
|
18
|
+
fixtures?: Fixtures<T, W>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export type ITest = Test & {
|
|
24
|
+
topLevelDescribe: ITopLevelDescribe;
|
|
25
|
+
describe: IDescribe;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/test/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,wBAAwB;IACtG,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;IACvB,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,QAAQ,EAAE,SAAS,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Callback } from "../call-original-fn.js";
|
|
2
|
+
import type { Test } from "../playwright-types.js";
|
|
3
|
+
import type { ICustomCreateTestOptions } from "../test/types.js";
|
|
4
|
+
import type { ITestDetails, WindowProperties, WorkspaceSettings } from "../types.js";
|
|
5
|
+
export interface ISetInsideTopLevelDescribe {
|
|
6
|
+
(value: boolean): void;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildSuiteCallback(testInstance: Test, options: ICustomCreateTestOptions, settingsStack: WorkspaceSettings[], awpStack: WindowProperties[], setInsideTopLevelDescribe: ISetInsideTopLevelDescribe, specName: string, details: ITestDetails | undefined, fn: Callback): Callback;
|
|
9
|
+
//# sourceMappingURL=build-suite-callback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-suite-callback.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/top-level-describe/build-suite-callback.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrF,MAAM,WAAW,0BAA0B;IACvC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,IAAI,EAClB,OAAO,EAAE,wBAAwB,EACjC,aAAa,EAAE,iBAAiB,EAAE,EAClC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,yBAAyB,EAAE,0BAA0B,EACrD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,EAAE,EAAE,QAAQ,GACb,QAAQ,CAcV"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { registerFeatureHubMock } from "../../feature-hub/mock.js";
|
|
3
|
+
import { registerGoodmockHooks } from "../../goodmock/playwright.js";
|
|
4
|
+
import { withDescribeDetails } from "../with-describe-details.js";
|
|
5
|
+
export function buildSuiteCallback(testInstance, options, settingsStack, awpStack, setInsideTopLevelDescribe, specName, details, fn) {
|
|
6
|
+
return () => {
|
|
7
|
+
registerFeatureHubMock(testInstance, options.featureHubResponse);
|
|
8
|
+
if (options.goodmock?.host) {
|
|
9
|
+
registerGoodmockHooks(testInstance, options.goodmock, specName);
|
|
10
|
+
}
|
|
11
|
+
// Workspace settings + additional window properties — merge with parent
|
|
12
|
+
// stack and inject beforeEach. Wraps fn() so nested describes inherit.
|
|
13
|
+
setInsideTopLevelDescribe(true);
|
|
14
|
+
withDescribeDetails(testInstance, settingsStack, awpStack, details, fn);
|
|
15
|
+
setInsideTopLevelDescribe(false);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type OriginalFn } from "../call-original-fn.js";
|
|
2
|
+
import type { Test } from "../playwright-types.js";
|
|
3
|
+
import type { ICreateTestOptions } from "../test/types.js";
|
|
4
|
+
import type { WorkspaceSettings } from "../types.js";
|
|
5
|
+
import { type ISetInsideTopLevelDescribe } from "./build-suite-callback.js";
|
|
6
|
+
import type { ITopLevelDescribeFunction } from "./types.js";
|
|
7
|
+
export declare function makeTopLevelDescribeFunction<T extends {} = {}, W extends {} = {}>(originalFn: OriginalFn, testInstance: Test, options: ICreateTestOptions<T, W>, settingsStack: WorkspaceSettings[], awpStack: WorkspaceSettings[], setInsideTopLevelDescribe: ISetInsideTopLevelDescribe): ITopLevelDescribeFunction;
|
|
8
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/top-level-describe/factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,UAAU,EAIlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAgB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,KAAK,0BAA0B,EAAsB,MAAM,2BAA2B,CAAC;AAChG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAC7E,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,IAAI,EAClB,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EACjC,aAAa,EAAE,iBAAiB,EAAE,EAClC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,yBAAyB,EAAE,0BAA0B,GACtD,yBAAyB,CAiB3B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
// oxlint-disable typescript/no-empty-object-type
|
|
3
|
+
import { callOriginalFn, parseArgs, toPlaywrightDetails, } from "../call-original-fn.js";
|
|
4
|
+
import { buildSuiteCallback } from "./build-suite-callback.js";
|
|
5
|
+
export function makeTopLevelDescribeFunction(originalFn, testInstance, options, settingsStack, awpStack, setInsideTopLevelDescribe) {
|
|
6
|
+
return (suiteName, specName, detailsOrFn, func) => {
|
|
7
|
+
const { details, fn } = parseArgs(detailsOrFn, func);
|
|
8
|
+
const suite = buildSuiteCallback(testInstance, options, settingsStack, awpStack, setInsideTopLevelDescribe, specName, details, fn);
|
|
9
|
+
const pwDetails = toPlaywrightDetails(details);
|
|
10
|
+
callOriginalFn(originalFn, suiteName, pwDetails, suite);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Callback } from "../call-original-fn.js";
|
|
2
|
+
import type { ITestDetails } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
* Call signatures of the overridden `test.describe` and `test.describe.skip`.
|
|
6
|
+
*/
|
|
7
|
+
export interface ITopLevelDescribeFunction {
|
|
8
|
+
(suiteName: string, specName: string, fn: Callback): void;
|
|
9
|
+
(suiteName: string, specName: string, details: ITestDetails, fn: Callback): void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export interface ITopLevelDescribe extends ITopLevelDescribeFunction {
|
|
15
|
+
skip: ITopLevelDescribeFunction;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/create-test/playwright/top-level-describe/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACtC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1D,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;CACpF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,yBAAyB;IAChE,IAAI,EAAE,yBAAyB,CAAC;CAOnC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TestDetails } from "@playwright/test";
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export type WorkspaceSettings = Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export type WindowProperties = Record<string, unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export interface ITestDetails extends TestDetails {
|
|
14
|
+
workspaceSettings?: WorkspaceSettings;
|
|
15
|
+
additionalWindowProperties?: WindowProperties;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/create-test/playwright/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0BAA0B,CAAC,EAAE,gBAAgB,CAAC;CACjD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Callback } from "./call-original-fn.js";
|
|
2
|
+
import type { Test } from "./playwright-types.js";
|
|
3
|
+
import type { ITestDetails, WindowProperties, WorkspaceSettings } from "./types.js";
|
|
4
|
+
/** Push merged settings/awp onto stacks, register a single beforeEach, call fn, pop. */
|
|
5
|
+
export declare function withDescribeDetails(testInstance: Test, settingsStack: WorkspaceSettings[], awpStack: WindowProperties[], details: ITestDetails | undefined, fn: Callback): void;
|
|
6
|
+
//# sourceMappingURL=with-describe-details.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-describe-details.d.ts","sourceRoot":"","sources":["../../../src/create-test/playwright/with-describe-details.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpF,wFAAwF;AACxF,wBAAgB,mBAAmB,CAC/B,YAAY,EAAE,IAAI,EAClB,aAAa,EAAE,iBAAiB,EAAE,EAClC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,EAAE,EAAE,QAAQ,QAmBf"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
function peekOrEmpty(stack) {
|
|
3
|
+
return stack.length > 0 ? stack[stack.length - 1] : {};
|
|
4
|
+
}
|
|
5
|
+
/** Push merged settings/awp onto stacks, register a single beforeEach, call fn, pop. */
|
|
6
|
+
export function withDescribeDetails(testInstance, settingsStack, awpStack, details, fn) {
|
|
7
|
+
const ws = details?.workspaceSettings;
|
|
8
|
+
const awp = details?.additionalWindowProperties;
|
|
9
|
+
if (!ws && !awp) {
|
|
10
|
+
fn();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const mergedSettings = ws ? { ...peekOrEmpty(settingsStack), ...ws } : peekOrEmpty(settingsStack);
|
|
14
|
+
const mergedAwp = awp ? { ...peekOrEmpty(awpStack), ...awp } : peekOrEmpty(awpStack);
|
|
15
|
+
if (ws)
|
|
16
|
+
settingsStack.push(mergedSettings);
|
|
17
|
+
if (awp)
|
|
18
|
+
awpStack.push(mergedAwp);
|
|
19
|
+
injectWindowProperties(testInstance, mergedSettings, mergedAwp);
|
|
20
|
+
fn();
|
|
21
|
+
if (awp)
|
|
22
|
+
awpStack.pop();
|
|
23
|
+
if (ws)
|
|
24
|
+
settingsStack.pop();
|
|
25
|
+
}
|
|
26
|
+
/** Inject workspace settings and additional window properties via a single addInitScript. */
|
|
27
|
+
function injectWindowProperties(testInst, settings, awp) {
|
|
28
|
+
testInst.beforeEach(async ({ page }) => {
|
|
29
|
+
await page.addInitScript((args) => {
|
|
30
|
+
const w = window;
|
|
31
|
+
if (Object.keys(args.s).length > 0) {
|
|
32
|
+
w["customWorkspaceSettings"] = args.s;
|
|
33
|
+
}
|
|
34
|
+
for (const [key, value] of Object.entries(args.a)) {
|
|
35
|
+
w[key] = value;
|
|
36
|
+
}
|
|
37
|
+
}, { s: settings, a: awp });
|
|
38
|
+
});
|
|
39
|
+
}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
export { authHeader, authedRouteFetch, injectAuthHeader } from "./auth.js";
|
|
2
|
-
export { type IGoodmockMapping, type ILeakPattern, type ISecretMapping, type ISnapshotAndSaveRecordingOptions, type IWorkspaceIdMapping, loadMappings, resetMappings, resetScenarios, mockLogRequests, goodmockMode, GoodmockMode, startRecording, snapshotAndSaveRecording, } from "./goodmock.js";
|
|
3
|
-
export { type BaseTestArgs, type BaseWorkerArgs, type ICreateTestOptions, type IDescribeFunction, type IE2eTest, type IE2eTestDetails, type IFeatureHubEnvironment, type IFeatureHubFeature, type IGoodmockOptions, createTest, } from "./playwright.js";
|
|
4
|
-
export { clickByBoundingBox, hoverByBoundingBox } from "./helpers/mouse-actions.js";
|
|
5
2
|
export { GOODMOCK_HOST, API_TOKEN, BACKEND_HOST, getBaseUrl, getEnvWithFallback, getWorkspaceId, getDangerWorkspaceId, } from "./constants.js";
|
|
3
|
+
export type { IFeatureHubEnvironment, IFeatureHubFeature } from "./create-test/feature-hub/types.js";
|
|
4
|
+
export type { IGoodmockMapping, ILeakPattern, ISecretMapping, IWorkspaceIdMapping, IGoodmockOptions, } from "./create-test/goodmock/types.js";
|
|
5
|
+
export { loadMappings, resetMappings, resetScenarios, mockLogRequests, startRecording, } from "./create-test/goodmock/admin.js";
|
|
6
|
+
export { goodmockMode, GoodmockMode } from "./create-test/goodmock/mode.js";
|
|
7
|
+
export { snapshotAndSaveRecording, type ISnapshotAndSaveRecordingOptions, } from "./create-test/goodmock/snapshot/snapshot-and-save-recording.js";
|
|
8
|
+
export type { Callback } from "./create-test/playwright/call-original-fn.js";
|
|
9
|
+
export type { IDescribe, IDescribeFunction } from "./create-test/playwright/describe/factory.js";
|
|
10
|
+
export type { Fixtures } from "./create-test/playwright/fixtures.js";
|
|
11
|
+
export type { BaseTestArgs, BaseWorkerArgs, DescribeConfigure, DescribeFixme, DescribeOnly, DescribeParallel, DescribeSerial, DescribeSkip, Test, } from "./create-test/playwright/playwright-types.js";
|
|
12
|
+
export { createTest } from "./create-test/playwright/test/factory.js";
|
|
13
|
+
export type { ICreateTestOptions, ICustomCreateTestOptions, ITest, } from "./create-test/playwright/test/types.js";
|
|
14
|
+
export type { ITestDetails, WindowProperties, WorkspaceSettings } from "./create-test/playwright/types.js";
|
|
15
|
+
export type { ITopLevelDescribe, ITopLevelDescribeFunction, } from "./create-test/playwright/top-level-describe/types.js";
|
|
16
|
+
export { clickByBoundingBox, hoverByBoundingBox } from "./helpers/mouse-actions.js";
|
|
6
17
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG3E,OAAO,EACH,aAAa,EACb,SAAS,EACT,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGrG,YAAY,EACR,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACH,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EACH,wBAAwB,EACxB,KAAK,gCAAgC,GACxC,MAAM,gEAAgE,CAAC;AAGxE,YAAY,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAC7E,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjG,YAAY,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,YAAY,EACR,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,IAAI,GACP,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACtE,YAAY,EACR,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,GACR,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3G,YAAY,EACR,iBAAiB,EACjB,yBAAyB,GAC5B,MAAM,sDAAsD,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
// oxlint-disable no-barrel-files/no-barrel-files
|
|
3
|
+
// auth
|
|
3
4
|
export { authHeader, authedRouteFetch, injectAuthHeader } from "./auth.js";
|
|
4
|
-
|
|
5
|
-
export { createTest, } from "./playwright.js";
|
|
6
|
-
export { clickByBoundingBox, hoverByBoundingBox } from "./helpers/mouse-actions.js";
|
|
5
|
+
// constants
|
|
7
6
|
export { GOODMOCK_HOST, API_TOKEN, BACKEND_HOST, getBaseUrl, getEnvWithFallback, getWorkspaceId, getDangerWorkspaceId, } from "./constants.js";
|
|
7
|
+
export { loadMappings, resetMappings, resetScenarios, mockLogRequests, startRecording, } from "./create-test/goodmock/admin.js";
|
|
8
|
+
export { goodmockMode, GoodmockMode } from "./create-test/goodmock/mode.js";
|
|
9
|
+
export { snapshotAndSaveRecording, } from "./create-test/goodmock/snapshot/snapshot-and-save-recording.js";
|
|
10
|
+
export { createTest } from "./create-test/playwright/test/factory.js";
|
|
11
|
+
// helpers
|
|
12
|
+
export { clickByBoundingBox, hoverByBoundingBox } from "./helpers/mouse-actions.js";
|