callman-core 1.23.0 → 1.25.0
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runner/runCollection.d.ts.map +1 -1
- package/dist/runner/runCollection.js +25 -5
- package/dist/runner/runCollection.js.map +1 -1
- package/dist/scenario-runner/adapters/helpers/failure-messages.d.ts +7 -1
- package/dist/scenario-runner/adapters/helpers/failure-messages.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/helpers/failure-messages.js.map +1 -1
- package/dist/scenario-runner/adapters/helpers/request-verdict.d.ts +21 -0
- package/dist/scenario-runner/adapters/helpers/request-verdict.d.ts.map +1 -0
- package/dist/scenario-runner/adapters/helpers/request-verdict.js +26 -0
- package/dist/scenario-runner/adapters/helpers/request-verdict.js.map +1 -0
- package/dist/scenario-runner/adapters/index.d.ts +1 -0
- package/dist/scenario-runner/adapters/index.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/index.js +4 -0
- package/dist/scenario-runner/adapters/index.js.map +1 -1
- package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/request-executor.js +7 -4
- package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
- package/dist/scenario-runner/types.d.ts +7 -0
- package/dist/scenario-runner/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui-test/compose.d.ts +146 -0
- package/dist/ui-test/compose.d.ts.map +1 -0
- package/dist/ui-test/compose.js +320 -0
- package/dist/ui-test/compose.js.map +1 -0
- package/dist-cjs/index.js +1 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/runner/runCollection.js +25 -5
- package/dist-cjs/runner/runCollection.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/helpers/failure-messages.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/helpers/request-verdict.js +30 -0
- package/dist-cjs/scenario-runner/adapters/helpers/request-verdict.js.map +1 -0
- package/dist-cjs/scenario-runner/adapters/index.js +6 -1
- package/dist-cjs/scenario-runner/adapters/index.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/request-executor.js +6 -3
- package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
- package/dist-cjs/ui-test/compose.js +341 -0
- package/dist-cjs/ui-test/compose.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,UAAU,GAAG,eAAe,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG/B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,IAAI,CAAC,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI-test flow composition — the ONE implementation of "turn a stored flow
|
|
3
|
+
* into the YAML the driver runs", shared by the desktop (Electron run) and
|
|
4
|
+
* the backend ui-runner (scheduled run). Both consumers MUST call
|
|
5
|
+
* `composeFlowForRun` so a flow behaves identically on a QA's machine and on
|
|
6
|
+
* the schedule.
|
|
7
|
+
*
|
|
8
|
+
* Rules (ported verbatim from the desktop, which is the reference behaviour):
|
|
9
|
+
* - A flow = optional config header (url / appId / env / tags …) + `---` +
|
|
10
|
+
* a YAML list of steps.
|
|
11
|
+
* - `- runFlow: "Name"` lines are inlined from the library BY NAME,
|
|
12
|
+
* recursively, with cycle protection; the flow's OWN name is seeded into the
|
|
13
|
+
* visited set so a self-reference is never expanded.
|
|
14
|
+
* - Every inlined sub-flow gets ITS OWN dataset applied first (a reused Login
|
|
15
|
+
* sub-flow keeps its `{{user}}` / `{{pass}}`).
|
|
16
|
+
* - The run dataset is applied TEXTUALLY over the whole expanded document —
|
|
17
|
+
* header included — before parsing, so `{{baseUrl}}` in `url:` works and
|
|
18
|
+
* dataset values win over a header `env:` key of the same name.
|
|
19
|
+
* - Unknown `{{tokens}}` are left intact (never collapse to "").
|
|
20
|
+
* - Web only: when the flow's own `url:` is the example.com placeholder, the
|
|
21
|
+
* entry URL falls back to the first precondition sub-flow's real URL.
|
|
22
|
+
*
|
|
23
|
+
* Pure string code — no YAML parser, no Node/Electron APIs — so it can live
|
|
24
|
+
* in callman-core.
|
|
25
|
+
*/
|
|
26
|
+
/** Return everything before the first `---` separator (config block). */
|
|
27
|
+
export declare function extractHeader(yamlContent: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Return the steps block (everything after the first `---`). When no separator
|
|
30
|
+
* exists, the entire content is treated as the body. Leading newline is
|
|
31
|
+
* stripped so the result starts with the first step.
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractBody(yamlContent: string): string;
|
|
34
|
+
/** Split a flow body into top-level step blocks (a `- ` line at column 0 plus
|
|
35
|
+
* its indented sub-lines). Continuation/indented lines stay with their step. */
|
|
36
|
+
export declare function splitTopLevelSteps(body: string): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Per-step provenance for a flow once its `- runFlow: "X"` references are
|
|
39
|
+
* inlined: returns one entry PER top-level executed step (same order the driver
|
|
40
|
+
* runs them), each being the name of the sub-flow that step came from, or "" for
|
|
41
|
+
* the parent flow's own steps. `flowMap` maps flow NAME → body (extractBody).
|
|
42
|
+
*/
|
|
43
|
+
export declare function flattenStepSources(content: string, flowMap: Map<string, string>, visited?: Set<string>, source?: string): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Tag each executed step with the imported sub-flow it came from (or leave it
|
|
46
|
+
* untagged for the parent flow's own steps). Skips the driver's leading
|
|
47
|
+
* config step(s) ("Apply configuration") which aren't YAML steps. Best-effort:
|
|
48
|
+
* returns the steps unchanged when the flow imports no sub-flows.
|
|
49
|
+
*/
|
|
50
|
+
export declare function tagStepSources<T extends {
|
|
51
|
+
command: string;
|
|
52
|
+
source?: string;
|
|
53
|
+
}>(steps: T[], content: string, flowMap: Map<string, string>): T[];
|
|
54
|
+
/**
|
|
55
|
+
* Read the leading `- runFlow: "Name"` block of a flow as its "preconditions"
|
|
56
|
+
* (sub-flows that run first — e.g. Login, Register). Only the CONSECUTIVE
|
|
57
|
+
* runFlow lines at the very start of the body count.
|
|
58
|
+
*/
|
|
59
|
+
export declare function extractPreconditions(content: string): {
|
|
60
|
+
names: string[];
|
|
61
|
+
rest: string;
|
|
62
|
+
};
|
|
63
|
+
/** Rewrite a flow's precondition block to exactly `names` (preserving the
|
|
64
|
+
* config header and the flow's own steps). */
|
|
65
|
+
export declare function setPreconditions(content: string, names: string[]): string;
|
|
66
|
+
/** The flow's config `url:` (from the header block), or "" when absent. */
|
|
67
|
+
export declare function extractUrl(content: string): string;
|
|
68
|
+
/** True for a usable start URL — a real http(s) address that ISN'T the template
|
|
69
|
+
* `example.com/.org` placeholder every new flow ships with. */
|
|
70
|
+
export declare function isRealUrl(url: string): boolean;
|
|
71
|
+
/** Set (or insert) the header `url:` to `url`, touching only the config block so
|
|
72
|
+
* step fields named `url` are never rewritten. */
|
|
73
|
+
export declare function setUrl(content: string, url: string): string;
|
|
74
|
+
/** The URL a run/mirror should actually START on: the flow's own real `url:`,
|
|
75
|
+
* otherwise the first precondition sub-flow's real URL (recursively). */
|
|
76
|
+
export declare function effectiveEntryUrl(content: string, contentByName: Map<string, string>, visited?: Set<string>): string;
|
|
77
|
+
/**
|
|
78
|
+
* Replace `- runFlow: "Name"` lines with the inlined commands of the
|
|
79
|
+
* referenced flow (by name). Recursive, with visited-set cycle protection.
|
|
80
|
+
* `flowMap` maps a flow NAME to its body (use `extractBody` on the content).
|
|
81
|
+
* Unknown / visited names are left as-is.
|
|
82
|
+
*/
|
|
83
|
+
export declare function resolveRunFlowRefs(content: string, flowMap: Map<string, string>, visited: Set<string>): string;
|
|
84
|
+
/** Names of `- runFlow:` references still present in an EXPANDED body — i.e.
|
|
85
|
+
* sub-flows the library could not provide. Self-references (own name) are
|
|
86
|
+
* reported too; the caller decides whether that is an error. */
|
|
87
|
+
export declare function listUnresolvedRunFlowRefs(expandedContent: string): string[];
|
|
88
|
+
/** Replace `{{key}}` occurrences in `content` with the matching dataset value.
|
|
89
|
+
* GUARDED: only keys present in the dataset are replaced. */
|
|
90
|
+
export declare function applyDataset(content: string, dataset?: Record<string, string> | null): string;
|
|
91
|
+
/** The dataset keys referenced by `{{key}}` anywhere in `content`. */
|
|
92
|
+
export declare function datasetKeysUsedIn(content: string): string[];
|
|
93
|
+
/** Per-flow run settings the QA can toggle; persisted on the flow so a
|
|
94
|
+
* scheduled run honours the same choices as a desktop run. */
|
|
95
|
+
export interface UiTestRunSettings {
|
|
96
|
+
screenshotOnSuccess: boolean;
|
|
97
|
+
screenshotOnFailure: boolean;
|
|
98
|
+
autoRetryTransient: boolean;
|
|
99
|
+
captureNetwork: boolean;
|
|
100
|
+
}
|
|
101
|
+
export type UiTestRunSettingsPatch = {
|
|
102
|
+
[K in keyof UiTestRunSettings]?: UiTestRunSettings[K] | null;
|
|
103
|
+
};
|
|
104
|
+
/** The ONE default table for both sides. */
|
|
105
|
+
export declare const RUN_SETTING_DEFAULTS: Readonly<UiTestRunSettings>;
|
|
106
|
+
/** Fill missing / null settings from the defaults. */
|
|
107
|
+
export declare function resolveRunSettings(partial?: UiTestRunSettingsPatch | null): UiTestRunSettings;
|
|
108
|
+
/** Commands that only make sense on android/ios (the M mobile engine). A web
|
|
109
|
+
* run silently passes them; the desktop preflight and the server report warn.
|
|
110
|
+
* Keep in sync with the desktop step catalog's MOBILE_ONLY_STEP_KEYS. */
|
|
111
|
+
export declare const MOBILE_ONLY_COMMANDS: ReadonlySet<string>;
|
|
112
|
+
/** The distinct mobile-only commands used by the top-level steps of `body`. */
|
|
113
|
+
export declare function findMobileOnlyCommands(body: string): string[];
|
|
114
|
+
export interface ComposeFlowInput {
|
|
115
|
+
flow: {
|
|
116
|
+
name: string;
|
|
117
|
+
content: string;
|
|
118
|
+
platform: string;
|
|
119
|
+
};
|
|
120
|
+
/** Every flow visible to the runner (the parent itself may be included). */
|
|
121
|
+
library: Array<{
|
|
122
|
+
name: string;
|
|
123
|
+
content: string;
|
|
124
|
+
dataset?: Record<string, string> | null;
|
|
125
|
+
}>;
|
|
126
|
+
/** The resolved run dataset (static values + DB-sourced values). */
|
|
127
|
+
runDataset?: Record<string, string> | null;
|
|
128
|
+
/** Per-step ▶ on the desktop passes a one-step override. */
|
|
129
|
+
contentOverride?: string;
|
|
130
|
+
/** Web: swap the example.com placeholder for a precondition's real URL. */
|
|
131
|
+
applyEntryUrlFallback?: boolean;
|
|
132
|
+
}
|
|
133
|
+
export interface ComposeFlowOutput {
|
|
134
|
+
/** The YAML to parse and run. */
|
|
135
|
+
content: string;
|
|
136
|
+
/** name → body (with the sub-flow's own dataset applied) — for tagStepSources. */
|
|
137
|
+
flowMap: Map<string, string>;
|
|
138
|
+
/** The URL the run starts on ("" when the flow has none). */
|
|
139
|
+
entryUrl: string;
|
|
140
|
+
/** `runFlow` names the library could not resolve. */
|
|
141
|
+
unresolved: string[];
|
|
142
|
+
/** Mobile-only commands present in the expanded body. */
|
|
143
|
+
mobileOnly: string[];
|
|
144
|
+
}
|
|
145
|
+
export declare function composeFlowForRun(input: ComposeFlowInput): ComposeFlowOutput;
|
|
146
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/ui-test/compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI-test flow composition — the ONE implementation of "turn a stored flow
|
|
3
|
+
* into the YAML the driver runs", shared by the desktop (Electron run) and
|
|
4
|
+
* the backend ui-runner (scheduled run). Both consumers MUST call
|
|
5
|
+
* `composeFlowForRun` so a flow behaves identically on a QA's machine and on
|
|
6
|
+
* the schedule.
|
|
7
|
+
*
|
|
8
|
+
* Rules (ported verbatim from the desktop, which is the reference behaviour):
|
|
9
|
+
* - A flow = optional config header (url / appId / env / tags …) + `---` +
|
|
10
|
+
* a YAML list of steps.
|
|
11
|
+
* - `- runFlow: "Name"` lines are inlined from the library BY NAME,
|
|
12
|
+
* recursively, with cycle protection; the flow's OWN name is seeded into the
|
|
13
|
+
* visited set so a self-reference is never expanded.
|
|
14
|
+
* - Every inlined sub-flow gets ITS OWN dataset applied first (a reused Login
|
|
15
|
+
* sub-flow keeps its `{{user}}` / `{{pass}}`).
|
|
16
|
+
* - The run dataset is applied TEXTUALLY over the whole expanded document —
|
|
17
|
+
* header included — before parsing, so `{{baseUrl}}` in `url:` works and
|
|
18
|
+
* dataset values win over a header `env:` key of the same name.
|
|
19
|
+
* - Unknown `{{tokens}}` are left intact (never collapse to "").
|
|
20
|
+
* - Web only: when the flow's own `url:` is the example.com placeholder, the
|
|
21
|
+
* entry URL falls back to the first precondition sub-flow's real URL.
|
|
22
|
+
*
|
|
23
|
+
* Pure string code — no YAML parser, no Node/Electron APIs — so it can live
|
|
24
|
+
* in callman-core.
|
|
25
|
+
*/
|
|
26
|
+
// ── Header / body ───────────────────────────────────────────────────────────
|
|
27
|
+
const SEPARATOR_RE = /^[ \t]*---[ \t]*$/m;
|
|
28
|
+
/** Return everything before the first `---` separator (config block). */
|
|
29
|
+
export function extractHeader(yamlContent) {
|
|
30
|
+
const m = SEPARATOR_RE.exec(yamlContent);
|
|
31
|
+
if (!m)
|
|
32
|
+
return "";
|
|
33
|
+
return yamlContent.slice(0, yamlContent.indexOf(m[0]));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Return the steps block (everything after the first `---`). When no separator
|
|
37
|
+
* exists, the entire content is treated as the body. Leading newline is
|
|
38
|
+
* stripped so the result starts with the first step.
|
|
39
|
+
*/
|
|
40
|
+
export function extractBody(yamlContent) {
|
|
41
|
+
const m = SEPARATOR_RE.exec(yamlContent);
|
|
42
|
+
if (!m)
|
|
43
|
+
return yamlContent.trimStart().trimEnd();
|
|
44
|
+
return yamlContent
|
|
45
|
+
.slice(yamlContent.indexOf(m[0]) + m[0].length)
|
|
46
|
+
.replace(/^\r?\n/, "")
|
|
47
|
+
.trimEnd();
|
|
48
|
+
}
|
|
49
|
+
const RUNFLOW_LINE_RE = /^[ \t]*-[ \t]+runFlow:[ \t]+(?:"([^"]+)"|'([^']+)')[ \t]*$/;
|
|
50
|
+
/** Split a flow body into top-level step blocks (a `- ` line at column 0 plus
|
|
51
|
+
* its indented sub-lines). Continuation/indented lines stay with their step. */
|
|
52
|
+
export function splitTopLevelSteps(body) {
|
|
53
|
+
const blocks = [];
|
|
54
|
+
let cur = [];
|
|
55
|
+
for (const line of body.split("\n")) {
|
|
56
|
+
if (/^-\s/.test(line)) {
|
|
57
|
+
if (cur.length)
|
|
58
|
+
blocks.push(cur.join("\n"));
|
|
59
|
+
cur = [line];
|
|
60
|
+
}
|
|
61
|
+
else if (cur.length) {
|
|
62
|
+
cur.push(line);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (cur.length)
|
|
66
|
+
blocks.push(cur.join("\n"));
|
|
67
|
+
return blocks;
|
|
68
|
+
}
|
|
69
|
+
// ── Step provenance ─────────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* Per-step provenance for a flow once its `- runFlow: "X"` references are
|
|
72
|
+
* inlined: returns one entry PER top-level executed step (same order the driver
|
|
73
|
+
* runs them), each being the name of the sub-flow that step came from, or "" for
|
|
74
|
+
* the parent flow's own steps. `flowMap` maps flow NAME → body (extractBody).
|
|
75
|
+
*/
|
|
76
|
+
export function flattenStepSources(content, flowMap, visited = new Set(), source = "") {
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const block of splitTopLevelSteps(extractBody(content))) {
|
|
79
|
+
const m = RUNFLOW_LINE_RE.exec(block.split("\n")[0]);
|
|
80
|
+
const name = m ? (m[1] ?? m[2]).trim() : null;
|
|
81
|
+
if (name && !visited.has(name) && flowMap.has(name)) {
|
|
82
|
+
const next = new Set(visited);
|
|
83
|
+
next.add(name);
|
|
84
|
+
out.push(...flattenStepSources(flowMap.get(name) ?? "", flowMap, next, name));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
out.push(source);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Tag each executed step with the imported sub-flow it came from (or leave it
|
|
94
|
+
* untagged for the parent flow's own steps). Skips the driver's leading
|
|
95
|
+
* config step(s) ("Apply configuration") which aren't YAML steps. Best-effort:
|
|
96
|
+
* returns the steps unchanged when the flow imports no sub-flows.
|
|
97
|
+
*/
|
|
98
|
+
export function tagStepSources(steps, content, flowMap) {
|
|
99
|
+
const sources = flattenStepSources(content, flowMap);
|
|
100
|
+
if (!sources.some(Boolean))
|
|
101
|
+
return steps;
|
|
102
|
+
let offset = 0;
|
|
103
|
+
while (offset < steps.length && /^apply config/i.test(steps[offset].command))
|
|
104
|
+
offset++;
|
|
105
|
+
return steps.map((s, i) => {
|
|
106
|
+
const src = sources[i - offset];
|
|
107
|
+
return src ? { ...s, source: src } : s;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// ── Preconditions (leading runFlow block) ───────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Read the leading `- runFlow: "Name"` block of a flow as its "preconditions"
|
|
113
|
+
* (sub-flows that run first — e.g. Login, Register). Only the CONSECUTIVE
|
|
114
|
+
* runFlow lines at the very start of the body count.
|
|
115
|
+
*/
|
|
116
|
+
export function extractPreconditions(content) {
|
|
117
|
+
const body = extractBody(content);
|
|
118
|
+
const lines = body.split("\n");
|
|
119
|
+
const names = [];
|
|
120
|
+
let i = 0;
|
|
121
|
+
for (; i < lines.length; i++) {
|
|
122
|
+
const m = RUNFLOW_LINE_RE.exec(lines[i]);
|
|
123
|
+
if (!m)
|
|
124
|
+
break;
|
|
125
|
+
names.push((m[1] ?? m[2]).trim());
|
|
126
|
+
}
|
|
127
|
+
return { names, rest: lines.slice(i).join("\n").replace(/^\n+/, "") };
|
|
128
|
+
}
|
|
129
|
+
/** Rewrite a flow's precondition block to exactly `names` (preserving the
|
|
130
|
+
* config header and the flow's own steps). */
|
|
131
|
+
export function setPreconditions(content, names) {
|
|
132
|
+
const header = extractHeader(content).trimEnd();
|
|
133
|
+
const { rest } = extractPreconditions(content);
|
|
134
|
+
const pre = names.map((n) => `- runFlow: "${n.replace(/"/g, '\\"')}"`).join("\n");
|
|
135
|
+
const body = [pre, rest].filter((p) => p.trim().length > 0).join("\n");
|
|
136
|
+
if (!header)
|
|
137
|
+
return body;
|
|
138
|
+
return `${header}\n---\n${body}`;
|
|
139
|
+
}
|
|
140
|
+
// ── Entry URL ───────────────────────────────────────────────────────────────
|
|
141
|
+
const URL_HEADER_RE = /^[ \t]*url\s*:[ \t]*(.+?)[ \t]*$/m;
|
|
142
|
+
/** The flow's config `url:` (from the header block), or "" when absent. */
|
|
143
|
+
export function extractUrl(content) {
|
|
144
|
+
return extractHeader(content).match(URL_HEADER_RE)?.[1]?.trim() ?? "";
|
|
145
|
+
}
|
|
146
|
+
/** True for a usable start URL — a real http(s) address that ISN'T the template
|
|
147
|
+
* `example.com/.org` placeholder every new flow ships with. */
|
|
148
|
+
export function isRealUrl(url) {
|
|
149
|
+
return /^https?:\/\//i.test(url) && !/^https?:\/\/(www\.)?example\.(com|org)\/?$/i.test(url);
|
|
150
|
+
}
|
|
151
|
+
/** Set (or insert) the header `url:` to `url`, touching only the config block so
|
|
152
|
+
* step fields named `url` are never rewritten. */
|
|
153
|
+
export function setUrl(content, url) {
|
|
154
|
+
const m = SEPARATOR_RE.exec(content);
|
|
155
|
+
const sepIdx = m ? content.indexOf(m[0]) : -1;
|
|
156
|
+
const header = sepIdx >= 0 ? content.slice(0, sepIdx) : content;
|
|
157
|
+
const rest = sepIdx >= 0 ? content.slice(sepIdx) : "";
|
|
158
|
+
const newHeader = URL_HEADER_RE.test(header)
|
|
159
|
+
? header.replace(URL_HEADER_RE, `url: ${url}`)
|
|
160
|
+
: `url: ${url}\n${header}`;
|
|
161
|
+
return newHeader + rest;
|
|
162
|
+
}
|
|
163
|
+
/** The URL a run/mirror should actually START on: the flow's own real `url:`,
|
|
164
|
+
* otherwise the first precondition sub-flow's real URL (recursively). */
|
|
165
|
+
export function effectiveEntryUrl(content, contentByName, visited = new Set()) {
|
|
166
|
+
const own = extractUrl(content);
|
|
167
|
+
if (isRealUrl(own))
|
|
168
|
+
return own;
|
|
169
|
+
const { names } = extractPreconditions(content);
|
|
170
|
+
for (const name of names) {
|
|
171
|
+
if (visited.has(name))
|
|
172
|
+
continue;
|
|
173
|
+
const sub = contentByName.get(name);
|
|
174
|
+
if (!sub)
|
|
175
|
+
continue;
|
|
176
|
+
const next = new Set(visited);
|
|
177
|
+
next.add(name);
|
|
178
|
+
const subUrl = effectiveEntryUrl(sub, contentByName, next);
|
|
179
|
+
if (isRealUrl(subUrl))
|
|
180
|
+
return subUrl;
|
|
181
|
+
}
|
|
182
|
+
return own;
|
|
183
|
+
}
|
|
184
|
+
// ── runFlow inlining ────────────────────────────────────────────────────────
|
|
185
|
+
const RUNFLOW_GLOBAL_RE = /^([ \t]*)(-[ \t]+)runFlow:[ \t]+(?:"([^"]+)"|'([^']+)')[ \t]*$/gm;
|
|
186
|
+
/**
|
|
187
|
+
* Replace `- runFlow: "Name"` lines with the inlined commands of the
|
|
188
|
+
* referenced flow (by name). Recursive, with visited-set cycle protection.
|
|
189
|
+
* `flowMap` maps a flow NAME to its body (use `extractBody` on the content).
|
|
190
|
+
* Unknown / visited names are left as-is.
|
|
191
|
+
*/
|
|
192
|
+
export function resolveRunFlowRefs(content, flowMap, visited) {
|
|
193
|
+
return content.replace(RUNFLOW_GLOBAL_RE, (match, indent, _dash, dq, sq) => {
|
|
194
|
+
const name = (dq ?? sq ?? "").trim();
|
|
195
|
+
if (!name || visited.has(name))
|
|
196
|
+
return match;
|
|
197
|
+
const body = flowMap.get(name);
|
|
198
|
+
if (!body)
|
|
199
|
+
return match;
|
|
200
|
+
const childVisited = new Set(visited);
|
|
201
|
+
childVisited.add(name);
|
|
202
|
+
const expanded = resolveRunFlowRefs(body, flowMap, childVisited);
|
|
203
|
+
const lines = expanded.split("\n");
|
|
204
|
+
const nonEmpty = lines.filter((l) => l.trim());
|
|
205
|
+
const minIndent = nonEmpty.length
|
|
206
|
+
? Math.min(...nonEmpty.map((l) => (/^[ \t]*/.exec(l)?.[0] ?? "").length))
|
|
207
|
+
: 0;
|
|
208
|
+
return lines.map((line) => (line.trim() ? indent + line.slice(minIndent) : line)).join("\n");
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/** Names of `- runFlow:` references still present in an EXPANDED body — i.e.
|
|
212
|
+
* sub-flows the library could not provide. Self-references (own name) are
|
|
213
|
+
* reported too; the caller decides whether that is an error. */
|
|
214
|
+
export function listUnresolvedRunFlowRefs(expandedContent) {
|
|
215
|
+
const names = new Set();
|
|
216
|
+
for (const m of expandedContent.matchAll(RUNFLOW_GLOBAL_RE)) {
|
|
217
|
+
const name = (m[3] ?? m[4] ?? "").trim();
|
|
218
|
+
if (name)
|
|
219
|
+
names.add(name);
|
|
220
|
+
}
|
|
221
|
+
return [...names];
|
|
222
|
+
}
|
|
223
|
+
// ── Dataset ─────────────────────────────────────────────────────────────────
|
|
224
|
+
const TOKEN = /\{\{\s*([\w.$-]+)\s*\}\}/g;
|
|
225
|
+
/** Replace `{{key}}` occurrences in `content` with the matching dataset value.
|
|
226
|
+
* GUARDED: only keys present in the dataset are replaced. */
|
|
227
|
+
export function applyDataset(content, dataset) {
|
|
228
|
+
if (!dataset)
|
|
229
|
+
return content;
|
|
230
|
+
const keys = Object.keys(dataset);
|
|
231
|
+
if (keys.length === 0)
|
|
232
|
+
return content;
|
|
233
|
+
return content.replace(TOKEN, (match, key) => Object.prototype.hasOwnProperty.call(dataset, key) ? dataset[key] : match);
|
|
234
|
+
}
|
|
235
|
+
/** The dataset keys referenced by `{{key}}` anywhere in `content`. */
|
|
236
|
+
export function datasetKeysUsedIn(content) {
|
|
237
|
+
const used = new Set();
|
|
238
|
+
for (const m of content.matchAll(TOKEN))
|
|
239
|
+
used.add(m[1]);
|
|
240
|
+
return [...used];
|
|
241
|
+
}
|
|
242
|
+
/** The ONE default table for both sides. */
|
|
243
|
+
export const RUN_SETTING_DEFAULTS = Object.freeze({
|
|
244
|
+
screenshotOnSuccess: true,
|
|
245
|
+
screenshotOnFailure: true,
|
|
246
|
+
autoRetryTransient: true,
|
|
247
|
+
captureNetwork: false,
|
|
248
|
+
});
|
|
249
|
+
/** Fill missing / null settings from the defaults. */
|
|
250
|
+
export function resolveRunSettings(partial) {
|
|
251
|
+
const out = { ...RUN_SETTING_DEFAULTS };
|
|
252
|
+
if (!partial)
|
|
253
|
+
return out;
|
|
254
|
+
for (const key of Object.keys(RUN_SETTING_DEFAULTS)) {
|
|
255
|
+
const v = partial[key];
|
|
256
|
+
if (typeof v === "boolean")
|
|
257
|
+
out[key] = v;
|
|
258
|
+
}
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
// ── Mobile-only commands ────────────────────────────────────────────────────
|
|
262
|
+
/** Commands that only make sense on android/ios (the M mobile engine). A web
|
|
263
|
+
* run silently passes them; the desktop preflight and the server report warn.
|
|
264
|
+
* Keep in sync with the desktop step catalog's MOBILE_ONLY_STEP_KEYS. */
|
|
265
|
+
export const MOBILE_ONLY_COMMANDS = new Set([
|
|
266
|
+
"launchApp",
|
|
267
|
+
"hideKeyboard",
|
|
268
|
+
"clearState",
|
|
269
|
+
"clearKeychain",
|
|
270
|
+
"killApp",
|
|
271
|
+
"stopApp",
|
|
272
|
+
"setLocation",
|
|
273
|
+
"setPermissions",
|
|
274
|
+
"setOrientation",
|
|
275
|
+
"setAirplaneMode",
|
|
276
|
+
"toggleAirplaneMode",
|
|
277
|
+
"travel",
|
|
278
|
+
"addMedia",
|
|
279
|
+
]);
|
|
280
|
+
const STEP_KEY_RE = /^-[ \t]+([A-Za-z][\w-]*)\b/;
|
|
281
|
+
/** The distinct mobile-only commands used by the top-level steps of `body`. */
|
|
282
|
+
export function findMobileOnlyCommands(body) {
|
|
283
|
+
const found = new Set();
|
|
284
|
+
for (const block of splitTopLevelSteps(extractBody(body))) {
|
|
285
|
+
const key = STEP_KEY_RE.exec(block.split("\n")[0])?.[1];
|
|
286
|
+
if (key && MOBILE_ONLY_COMMANDS.has(key))
|
|
287
|
+
found.add(key);
|
|
288
|
+
}
|
|
289
|
+
return [...found];
|
|
290
|
+
}
|
|
291
|
+
export function composeFlowForRun(input) {
|
|
292
|
+
const { flow, library } = input;
|
|
293
|
+
const flowMap = new Map();
|
|
294
|
+
const contentByName = new Map();
|
|
295
|
+
for (const f of library) {
|
|
296
|
+
if (!flowMap.has(f.name)) {
|
|
297
|
+
flowMap.set(f.name, applyDataset(extractBody(f.content), f.dataset));
|
|
298
|
+
contentByName.set(f.name, f.content);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const source = input.contentOverride ?? flow.content;
|
|
302
|
+
const expanded = resolveRunFlowRefs(source, flowMap, new Set([flow.name]));
|
|
303
|
+
let content = applyDataset(expanded, input.runDataset);
|
|
304
|
+
if (input.applyEntryUrlFallback &&
|
|
305
|
+
!input.contentOverride &&
|
|
306
|
+
flow.platform === "web" &&
|
|
307
|
+
!isRealUrl(extractUrl(flow.content))) {
|
|
308
|
+
const eff = effectiveEntryUrl(flow.content, contentByName);
|
|
309
|
+
if (isRealUrl(eff))
|
|
310
|
+
content = setUrl(content, eff);
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
content,
|
|
314
|
+
flowMap,
|
|
315
|
+
entryUrl: extractUrl(content),
|
|
316
|
+
unresolved: listUnresolvedRunFlowRefs(content),
|
|
317
|
+
mobileOnly: findMobileOnlyCommands(content),
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/ui-test/compose.ts"],"names":[],"mappings":"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"}
|
package/dist-cjs/index.js
CHANGED
|
@@ -93,6 +93,7 @@ Object.defineProperty(exports, "getSoapEnvelopeTemplate", { enumerable: true, ge
|
|
|
93
93
|
// extraction (jsonRepair) — one source for backend hosted generation and
|
|
94
94
|
// desktop local-CLI generation.
|
|
95
95
|
__exportStar(require("./ai/index.js"), exports);
|
|
96
|
+
__exportStar(require("./ui-test/compose.js"), exports);
|
|
96
97
|
__exportStar(require("./scenario-runner/index.js"), exports);
|
|
97
98
|
__exportStar(require("./host/index.js"), exports);
|
|
98
99
|
__exportStar(require("./types/index.js"), exports);
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8DAA0D;AAAjD,iHAAA,aAAa,OAAA;AACtB,8DAAuD;AAA9C,8GAAA,UAAU,OAAA;AACnB,8EAA0E;AAAjE,iIAAA,qBAAqB,OAAA;AAC9B,iEAA6D;AAApD,mHAAA,cAAc,OAAA;AACvB,iDAQ6B;AAP3B,+GAAA,kBAAkB,OAAA;AAClB,oHAAA,uBAAuB,OAAA;AACvB,wGAAA,WAAW,OAAA;AAMb,yCAMwB;AALtB,0GAAA,gBAAgB,OAAA;AAChB,kGAAA,QAAQ,OAAA;AACR,sGAAA,YAAY,OAAA;AACZ,4GAAA,kBAAkB,OAAA;AAGpB,6CAAoD;AAA3C,4GAAA,gBAAgB,OAAA;AACzB,mDAK6B;AAJ3B,4GAAA,aAAa,OAAA;AACb,mHAAA,oBAAoB,OAAA;AACpB,sHAAA,uBAAuB,OAAA;AAGzB,uDAAmD;AAA1C,uGAAA,QAAQ,OAAA;AACjB,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,wDAAsC;AACtC,oDAAqE;AAA5D,4GAAA,aAAa,OAAA;AAAE,6GAAA,cAAc,OAAA;AACtC,kEAAgE;AAAvD,uHAAA,iBAAiB,OAAA;AA2B1B,kEAKqC;AAJnC,qHAAA,eAAe,OAAA;AAKjB,oEAGsC;AAFpC,2HAAA,oBAAoB,OAAA;AAGtB,8CAI2B;AAHzB,gHAAA,oBAAoB,OAAA;AACpB,gHAAA,oBAAoB,OAAA;AACpB,gHAAA,oBAAoB,OAAA;AAEtB,iEAA+E;AAAtE,4GAAA,WAAW,OAAA;AAAE,gHAAA,eAAe,OAAA;AACrC,uDAGoC;AAFlC,uHAAA,2BAA2B,OAAA;AAC3B,+GAAA,mBAAmB,OAAA;AAErB,yEAG6C;AAF3C,mIAAA,8BAA8B,OAAA;AAC9B,2HAAA,sBAAsB,OAAA;AAExB,wEAKyC;AAJvC,yHAAA,iBAAiB,OAAA;AACjB,iIAAA,yBAAyB,OAAA;AACzB,6HAAA,qBAAqB,OAAA;AAGvB,8DAKoC;AAJlC,sHAAA,mBAAmB,OAAA;AACnB,yHAAA,sBAAsB,OAAA;AACtB,2HAAA,wBAAwB,OAAA;AAG1B,oDAK+B;AAJ7B,uHAAA,yBAAyB,OAAA;AACzB,+GAAA,iBAAiB,OAAA;AACjB,8GAAA,gBAAgB,OAAA;AAGlB,gEAA2F;AAAlF,0HAAA,sBAAsB,OAAA;AAC/B,kDAAkD;AAClD,oDAI6B;AAH3B,0HAAA,0BAA0B,OAAA;AAI5B,sDAK8B;AAJ5B,sHAAA,qBAAqB,OAAA;AACrB,uHAAA,sBAAsB,OAAA;AAIxB,kDAI4B;AAH1B,wHAAA,yBAAyB,OAAA;AACzB,wHAAA,yBAAyB,OAAA;AACzB,sHAAA,uBAAuB,OAAA;AAEzB,8EAA8E;AAC9E,yEAAyE;AACzE,gCAAgC;AAChC,gDAA8B;AAC9B,6DAA2C;AAC3C,kDAAgC;AAChC,mDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8DAA0D;AAAjD,iHAAA,aAAa,OAAA;AACtB,8DAAuD;AAA9C,8GAAA,UAAU,OAAA;AACnB,8EAA0E;AAAjE,iIAAA,qBAAqB,OAAA;AAC9B,iEAA6D;AAApD,mHAAA,cAAc,OAAA;AACvB,iDAQ6B;AAP3B,+GAAA,kBAAkB,OAAA;AAClB,oHAAA,uBAAuB,OAAA;AACvB,wGAAA,WAAW,OAAA;AAMb,yCAMwB;AALtB,0GAAA,gBAAgB,OAAA;AAChB,kGAAA,QAAQ,OAAA;AACR,sGAAA,YAAY,OAAA;AACZ,4GAAA,kBAAkB,OAAA;AAGpB,6CAAoD;AAA3C,4GAAA,gBAAgB,OAAA;AACzB,mDAK6B;AAJ3B,4GAAA,aAAa,OAAA;AACb,mHAAA,oBAAoB,OAAA;AACpB,sHAAA,uBAAuB,OAAA;AAGzB,uDAAmD;AAA1C,uGAAA,QAAQ,OAAA;AACjB,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,wDAAsC;AACtC,oDAAqE;AAA5D,4GAAA,aAAa,OAAA;AAAE,6GAAA,cAAc,OAAA;AACtC,kEAAgE;AAAvD,uHAAA,iBAAiB,OAAA;AA2B1B,kEAKqC;AAJnC,qHAAA,eAAe,OAAA;AAKjB,oEAGsC;AAFpC,2HAAA,oBAAoB,OAAA;AAGtB,8CAI2B;AAHzB,gHAAA,oBAAoB,OAAA;AACpB,gHAAA,oBAAoB,OAAA;AACpB,gHAAA,oBAAoB,OAAA;AAEtB,iEAA+E;AAAtE,4GAAA,WAAW,OAAA;AAAE,gHAAA,eAAe,OAAA;AACrC,uDAGoC;AAFlC,uHAAA,2BAA2B,OAAA;AAC3B,+GAAA,mBAAmB,OAAA;AAErB,yEAG6C;AAF3C,mIAAA,8BAA8B,OAAA;AAC9B,2HAAA,sBAAsB,OAAA;AAExB,wEAKyC;AAJvC,yHAAA,iBAAiB,OAAA;AACjB,iIAAA,yBAAyB,OAAA;AACzB,6HAAA,qBAAqB,OAAA;AAGvB,8DAKoC;AAJlC,sHAAA,mBAAmB,OAAA;AACnB,yHAAA,sBAAsB,OAAA;AACtB,2HAAA,wBAAwB,OAAA;AAG1B,oDAK+B;AAJ7B,uHAAA,yBAAyB,OAAA;AACzB,+GAAA,iBAAiB,OAAA;AACjB,8GAAA,gBAAgB,OAAA;AAGlB,gEAA2F;AAAlF,0HAAA,sBAAsB,OAAA;AAC/B,kDAAkD;AAClD,oDAI6B;AAH3B,0HAAA,0BAA0B,OAAA;AAI5B,sDAK8B;AAJ5B,sHAAA,qBAAqB,OAAA;AACrB,uHAAA,sBAAsB,OAAA;AAIxB,kDAI4B;AAH1B,wHAAA,yBAAyB,OAAA;AACzB,wHAAA,yBAAyB,OAAA;AACzB,sHAAA,uBAAuB,OAAA;AAEzB,8EAA8E;AAC9E,yEAAyE;AACzE,gCAAgC;AAChC,gDAA8B;AAC9B,uDAAqC;AACrC,6DAA2C;AAC3C,kDAAgC;AAChC,mDAAiC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runCollection = void 0;
|
|
4
|
+
const expected_status_js_1 = require("../scenario-runner/adapters/helpers/expected-status.js");
|
|
4
5
|
const envStore_js_1 = require("../variables/envStore.js");
|
|
6
|
+
const resolver_js_1 = require("../variables/resolver.js");
|
|
5
7
|
const requestRunner_js_1 = require("./requestRunner.js");
|
|
6
8
|
const getEnvStore = (env) => {
|
|
7
9
|
if (env instanceof envStore_js_1.EnvStore) {
|
|
@@ -10,21 +12,35 @@ const getEnvStore = (env) => {
|
|
|
10
12
|
return new envStore_js_1.EnvStore(env);
|
|
11
13
|
};
|
|
12
14
|
const hasFailure = (results) => results.some((result) => result.status === "FAIL");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// Same precedence as a scenario request node: a valid, matched expectation
|
|
16
|
+
// replaces the 2xx/3xx rule and nothing else — failing scripts or contracts
|
|
17
|
+
// still fail the request. Until this existed, `callme run collection.json`
|
|
18
|
+
// against an endpoint that is SUPPOSED to return 403 was red with no way out.
|
|
19
|
+
const isRequestPassed = (result, expectedStatusExpression) => {
|
|
20
|
+
if (hasFailure(result.scriptResults) || hasFailure(result.contractResults)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const expectation = (0, expected_status_js_1.evaluateScenarioExpectedStatus)(expectedStatusExpression, result.status);
|
|
24
|
+
if (expectation) {
|
|
25
|
+
return expectation.valid && expectation.matched;
|
|
26
|
+
}
|
|
27
|
+
return result.status >= 200 && result.status < 400;
|
|
28
|
+
};
|
|
17
29
|
const runCollection = async ({ collection, env, connections, featurePolicy, onRequestStart, onRequestComplete, }) => {
|
|
18
30
|
const envStore = getEnvStore(env);
|
|
19
31
|
const results = [];
|
|
20
32
|
let previousResponse = null;
|
|
21
33
|
const runnableRequests = collection.requests.filter((request) => request.isEnabledInRunner !== false);
|
|
34
|
+
let passed = 0;
|
|
22
35
|
for (const [index, request] of runnableRequests.entries()) {
|
|
23
36
|
onRequestStart?.({
|
|
24
37
|
request,
|
|
25
38
|
index,
|
|
26
39
|
total: runnableRequests.length,
|
|
27
40
|
});
|
|
41
|
+
// The scope the request itself resolves against — captured before the
|
|
42
|
+
// call, because `previousResponse` advances to THIS request's response.
|
|
43
|
+
const resolveContext = { env: envStore, response: previousResponse, request };
|
|
28
44
|
const runResult = await (0, requestRunner_js_1.runRequest)({
|
|
29
45
|
request,
|
|
30
46
|
env: envStore,
|
|
@@ -34,6 +50,11 @@ const runCollection = async ({ collection, env, connections, featurePolicy, onRe
|
|
|
34
50
|
});
|
|
35
51
|
previousResponse = runResult.response;
|
|
36
52
|
results.push(runResult.result);
|
|
53
|
+
if (isRequestPassed(runResult.result, request.expectedStatus?.trim()
|
|
54
|
+
? (0, resolver_js_1.resolveTemplateValue)(request.expectedStatus, resolveContext)
|
|
55
|
+
: "")) {
|
|
56
|
+
passed += 1;
|
|
57
|
+
}
|
|
37
58
|
onRequestComplete?.({
|
|
38
59
|
request,
|
|
39
60
|
index,
|
|
@@ -41,7 +62,6 @@ const runCollection = async ({ collection, env, connections, featurePolicy, onRe
|
|
|
41
62
|
result: runResult.result,
|
|
42
63
|
});
|
|
43
64
|
}
|
|
44
|
-
const passed = results.filter(isRequestPassed).length;
|
|
45
65
|
return {
|
|
46
66
|
results,
|
|
47
67
|
summary: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runCollection.js","sourceRoot":"","sources":["../../src/runner/runCollection.ts"],"names":[],"mappings":";;;AAOA,0DAAoD;AACpD,yDAAgD;AAEhD,MAAM,WAAW,GAAG,CAClB,GAA8B,EACpB,EAAE;IACZ,IAAI,GAAG,YAAY,sBAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,sBAAQ,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAqB,EAAW,EAAE,CACpD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAErD,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"runCollection.js","sourceRoot":"","sources":["../../src/runner/runCollection.ts"],"names":[],"mappings":"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"}
|