@gherkle/runner 0.1.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/README.md +482 -0
- package/bin/gherkle-runner.js +111 -0
- package/dist/__tests__/agent-executor-selection.test.d.ts +15 -0
- package/dist/__tests__/agent-executor-selection.test.d.ts.map +1 -0
- package/dist/__tests__/agent-executor-selection.test.js +192 -0
- package/dist/__tests__/agent-executor-selection.test.js.map +1 -0
- package/dist/__tests__/envelope-mapper.test.d.ts +17 -0
- package/dist/__tests__/envelope-mapper.test.d.ts.map +1 -0
- package/dist/__tests__/envelope-mapper.test.js +217 -0
- package/dist/__tests__/envelope-mapper.test.js.map +1 -0
- package/dist/__tests__/gherkin-parser.test.d.ts +2 -0
- package/dist/__tests__/gherkin-parser.test.d.ts.map +1 -0
- package/dist/__tests__/gherkin-parser.test.js +375 -0
- package/dist/__tests__/gherkin-parser.test.js.map +1 -0
- package/dist/__tests__/integration-fork.test.d.ts +16 -0
- package/dist/__tests__/integration-fork.test.d.ts.map +1 -0
- package/dist/__tests__/integration-fork.test.js +141 -0
- package/dist/__tests__/integration-fork.test.js.map +1 -0
- package/dist/__tests__/tmpdir-materialization.test.d.ts +18 -0
- package/dist/__tests__/tmpdir-materialization.test.d.ts.map +1 -0
- package/dist/__tests__/tmpdir-materialization.test.js +177 -0
- package/dist/__tests__/tmpdir-materialization.test.js.map +1 -0
- package/dist/agent.d.ts +71 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +312 -0
- package/dist/agent.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +165 -0
- package/dist/config.js.map +1 -0
- package/dist/frameworks/cucumber-subprocess.d.ts +129 -0
- package/dist/frameworks/cucumber-subprocess.d.ts.map +1 -0
- package/dist/frameworks/cucumber-subprocess.js +469 -0
- package/dist/frameworks/cucumber-subprocess.js.map +1 -0
- package/dist/frameworks/playwright.d.ts +22 -0
- package/dist/frameworks/playwright.d.ts.map +1 -0
- package/dist/frameworks/playwright.js +234 -0
- package/dist/frameworks/playwright.js.map +1 -0
- package/dist/gherkin-parser.d.ts +22 -0
- package/dist/gherkin-parser.d.ts.map +1 -0
- package/dist/gherkin-parser.js +148 -0
- package/dist/gherkin-parser.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/step-registry.d.ts +30 -0
- package/dist/step-registry.d.ts.map +1 -0
- package/dist/step-registry.js +160 -0
- package/dist/step-registry.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/workers/cucumber-worker.d.ts +29 -0
- package/dist/workers/cucumber-worker.d.ts.map +1 -0
- package/dist/workers/cucumber-worker.js +191 -0
- package/dist/workers/cucumber-worker.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for GherkleAgent.executeRun executor selection logic.
|
|
4
|
+
*
|
|
5
|
+
* The agent branches based on the incoming 'execute' WebSocket message:
|
|
6
|
+
* stepDefinitions non-empty → CucumberSubprocessExecutor.executeAll
|
|
7
|
+
* empty + stepDefinitionsPath set → PlaywrightExecutor.execute (BYO)
|
|
8
|
+
* empty + no path → throw "No step definitions"
|
|
9
|
+
*
|
|
10
|
+
* Also covers:
|
|
11
|
+
* - Busy-guard (refuses 2nd 'execute' while first is in flight)
|
|
12
|
+
* - cancelRun routes to currentCucumberExecutor.cancel()
|
|
13
|
+
* - cancelRun for non-matching runId is a no-op
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const vitest_1 = require("vitest");
|
|
17
|
+
// vi.mock hoists above imports — use vi.hoisted for shared spies so the
|
|
18
|
+
// references stay live across the mock factory and the test body.
|
|
19
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
20
|
+
executeAll: vitest_1.vi.fn(),
|
|
21
|
+
cancel: vitest_1.vi.fn(),
|
|
22
|
+
playwrightExecute: vitest_1.vi.fn(),
|
|
23
|
+
}));
|
|
24
|
+
vitest_1.vi.mock('../frameworks/cucumber-subprocess', () => {
|
|
25
|
+
class CucumberSubprocessExecutor {
|
|
26
|
+
executeAll = mocks.executeAll;
|
|
27
|
+
cancel = mocks.cancel;
|
|
28
|
+
}
|
|
29
|
+
return { CucumberSubprocessExecutor };
|
|
30
|
+
});
|
|
31
|
+
vitest_1.vi.mock('../frameworks/playwright', () => {
|
|
32
|
+
class PlaywrightExecutor {
|
|
33
|
+
execute = mocks.playwrightExecute;
|
|
34
|
+
}
|
|
35
|
+
return { PlaywrightExecutor };
|
|
36
|
+
});
|
|
37
|
+
// Stub the ws module: we never actually open a socket here.
|
|
38
|
+
vitest_1.vi.mock('ws', () => ({
|
|
39
|
+
default: class FakeWS {
|
|
40
|
+
readyState = 1;
|
|
41
|
+
static OPEN = 1;
|
|
42
|
+
on() { }
|
|
43
|
+
send() { }
|
|
44
|
+
close() { }
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
const agent_1 = require("../agent");
|
|
48
|
+
const baseConfig = {
|
|
49
|
+
token: 'tok',
|
|
50
|
+
apiUrl: 'http://localhost:3000',
|
|
51
|
+
name: 'test-runner',
|
|
52
|
+
labels: [],
|
|
53
|
+
framework: 'playwright',
|
|
54
|
+
featuresPath: 'features',
|
|
55
|
+
stepDefinitionsPath: 'tests/steps',
|
|
56
|
+
supportPath: 'tests/support',
|
|
57
|
+
browsers: ['chromium'],
|
|
58
|
+
headless: true,
|
|
59
|
+
testTimeout: 30000,
|
|
60
|
+
stepTimeout: 10000,
|
|
61
|
+
screenshots: 'on-failure',
|
|
62
|
+
video: 'never',
|
|
63
|
+
env: {},
|
|
64
|
+
};
|
|
65
|
+
const baseTestConfig = {
|
|
66
|
+
framework: 'playwright',
|
|
67
|
+
language: 'typescript',
|
|
68
|
+
stepDefinitionsPath: '',
|
|
69
|
+
supportFilesPath: '',
|
|
70
|
+
config: {},
|
|
71
|
+
};
|
|
72
|
+
const feature = {
|
|
73
|
+
id: 'feat-1',
|
|
74
|
+
name: 'features/login.feature',
|
|
75
|
+
path: 'features/login.feature',
|
|
76
|
+
content: 'Feature: x\n Scenario: y\n Given z\n',
|
|
77
|
+
};
|
|
78
|
+
const stepDef = {
|
|
79
|
+
featureId: 'feat-1',
|
|
80
|
+
filename: 'steps.js',
|
|
81
|
+
content: '// steps',
|
|
82
|
+
language: 'javascript',
|
|
83
|
+
};
|
|
84
|
+
// Drive the private executeRun directly. Going through handleMessage would
|
|
85
|
+
// also work but requires a fake WebSocket plumbing — too much for unit tests
|
|
86
|
+
// that only care about branching logic.
|
|
87
|
+
function runIt(agent, args = {}) {
|
|
88
|
+
const a = agent;
|
|
89
|
+
return a.executeRun(args.runId ?? 'run-1', args.features ?? [feature], args.stepDefs ?? [], args.env ?? {}, args.testConfig ?? baseTestConfig);
|
|
90
|
+
}
|
|
91
|
+
(0, vitest_1.describe)('GherkleAgent.executeRun executor selection', () => {
|
|
92
|
+
(0, vitest_1.beforeEach)(() => {
|
|
93
|
+
vitest_1.vi.clearAllMocks();
|
|
94
|
+
mocks.executeAll.mockResolvedValue([]);
|
|
95
|
+
mocks.playwrightExecute.mockResolvedValue([]);
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.afterEach)(() => {
|
|
98
|
+
vitest_1.vi.clearAllMocks();
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.it)('routes to CucumberSubprocessExecutor when stepDefinitions is non-empty', async () => {
|
|
101
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
102
|
+
await runIt(agent, { stepDefs: [stepDef] });
|
|
103
|
+
(0, vitest_1.expect)(mocks.executeAll).toHaveBeenCalledOnce();
|
|
104
|
+
(0, vitest_1.expect)(mocks.playwrightExecute).not.toHaveBeenCalled();
|
|
105
|
+
// Confirm the features + step-defs + env reach the executor.
|
|
106
|
+
const [features, stepDefs, env] = mocks.executeAll.mock.calls[0];
|
|
107
|
+
(0, vitest_1.expect)(features).toEqual([feature]);
|
|
108
|
+
(0, vitest_1.expect)(stepDefs).toEqual([stepDef]);
|
|
109
|
+
(0, vitest_1.expect)(env).toEqual({});
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.it)('routes to PlaywrightExecutor when empty + stepDefinitionsPath is set', async () => {
|
|
112
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
113
|
+
const cfg = { ...baseTestConfig, stepDefinitionsPath: 'tests/steps' };
|
|
114
|
+
await runIt(agent, { stepDefs: [], testConfig: cfg });
|
|
115
|
+
(0, vitest_1.expect)(mocks.playwrightExecute).toHaveBeenCalledOnce();
|
|
116
|
+
(0, vitest_1.expect)(mocks.executeAll).not.toHaveBeenCalled();
|
|
117
|
+
});
|
|
118
|
+
(0, vitest_1.it)('errors the run when stepDefs is empty AND no stepDefinitionsPath configured', async () => {
|
|
119
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
120
|
+
const cfg = { ...baseTestConfig, stepDefinitionsPath: '' };
|
|
121
|
+
const sendSpy = vitest_1.vi.spyOn(agent, 'send');
|
|
122
|
+
await runIt(agent, { stepDefs: [], testConfig: cfg });
|
|
123
|
+
// Neither executor invoked; error message sent over WS.
|
|
124
|
+
(0, vitest_1.expect)(mocks.executeAll).not.toHaveBeenCalled();
|
|
125
|
+
(0, vitest_1.expect)(mocks.playwrightExecute).not.toHaveBeenCalled();
|
|
126
|
+
const errorCall = sendSpy.mock.calls.find((c) => c[0].type === 'error');
|
|
127
|
+
(0, vitest_1.expect)(errorCall).toBeDefined();
|
|
128
|
+
(0, vitest_1.expect)(errorCall[0].message).toMatch(/no step definitions/i);
|
|
129
|
+
});
|
|
130
|
+
(0, vitest_1.it)('passes BASE_URL env to the cucumber executor', async () => {
|
|
131
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
132
|
+
await runIt(agent, {
|
|
133
|
+
stepDefs: [stepDef],
|
|
134
|
+
env: { BASE_URL: 'https://staging.example.com' },
|
|
135
|
+
});
|
|
136
|
+
const [, , env] = mocks.executeAll.mock.calls[0];
|
|
137
|
+
(0, vitest_1.expect)(env).toEqual({ BASE_URL: 'https://staging.example.com' });
|
|
138
|
+
});
|
|
139
|
+
(0, vitest_1.it)('refuses a 2nd concurrent run while the first is in flight (busy-guard)', async () => {
|
|
140
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
141
|
+
// Make the first run hang so we can observe the 2nd dispatch
|
|
142
|
+
let resolveFirst = () => { };
|
|
143
|
+
mocks.executeAll.mockImplementationOnce(() => new Promise((res) => { resolveFirst = res; }));
|
|
144
|
+
const first = runIt(agent, { runId: 'run-1', stepDefs: [stepDef] });
|
|
145
|
+
// Microtask: allow first to enter executor and set currentRunId
|
|
146
|
+
await new Promise((r) => setImmediate(r));
|
|
147
|
+
const sendSpy = vitest_1.vi.spyOn(agent, 'send');
|
|
148
|
+
await runIt(agent, { runId: 'run-2', stepDefs: [stepDef] });
|
|
149
|
+
// 2nd dispatch did NOT call the executor a second time
|
|
150
|
+
(0, vitest_1.expect)(mocks.executeAll).toHaveBeenCalledTimes(1);
|
|
151
|
+
// 2nd dispatch DID send an error + a fast run:completed (so the server
|
|
152
|
+
// doesn't think run-2 is stuck running forever)
|
|
153
|
+
const errorMsg = sendSpy.mock.calls.find((c) => c[0].type === 'error');
|
|
154
|
+
(0, vitest_1.expect)(errorMsg).toBeDefined();
|
|
155
|
+
(0, vitest_1.expect)(errorMsg[0].runId).toBe('run-2');
|
|
156
|
+
// Unblock first so the test exits cleanly
|
|
157
|
+
resolveFirst([]);
|
|
158
|
+
await first;
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.describe)('GherkleAgent.cancelRun', () => {
|
|
162
|
+
(0, vitest_1.beforeEach)(() => {
|
|
163
|
+
vitest_1.vi.clearAllMocks();
|
|
164
|
+
mocks.executeAll.mockResolvedValue([]);
|
|
165
|
+
});
|
|
166
|
+
(0, vitest_1.it)('cancels the in-flight cucumber executor when runId matches', async () => {
|
|
167
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
168
|
+
let resolveExec = () => { };
|
|
169
|
+
mocks.executeAll.mockImplementationOnce(() => new Promise((res) => { resolveExec = res; }));
|
|
170
|
+
const runP = runIt(agent, { runId: 'run-cancel', stepDefs: [stepDef] });
|
|
171
|
+
await new Promise((r) => setImmediate(r));
|
|
172
|
+
// Drive cancel through the public message handler
|
|
173
|
+
const a = agent;
|
|
174
|
+
await a.handleMessage({ type: 'cancel', runId: 'run-cancel' });
|
|
175
|
+
(0, vitest_1.expect)(mocks.cancel).toHaveBeenCalledOnce();
|
|
176
|
+
resolveExec([]);
|
|
177
|
+
await runP;
|
|
178
|
+
});
|
|
179
|
+
(0, vitest_1.it)('is a no-op when cancelling a non-matching runId', async () => {
|
|
180
|
+
const agent = new agent_1.GherkleAgent(baseConfig);
|
|
181
|
+
let resolveExec = () => { };
|
|
182
|
+
mocks.executeAll.mockImplementationOnce(() => new Promise((res) => { resolveExec = res; }));
|
|
183
|
+
const runP = runIt(agent, { runId: 'run-active', stepDefs: [stepDef] });
|
|
184
|
+
await new Promise((r) => setImmediate(r));
|
|
185
|
+
const a = agent;
|
|
186
|
+
await a.handleMessage({ type: 'cancel', runId: 'run-different' });
|
|
187
|
+
(0, vitest_1.expect)(mocks.cancel).not.toHaveBeenCalled();
|
|
188
|
+
resolveExec([]);
|
|
189
|
+
await runP;
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
//# sourceMappingURL=agent-executor-selection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-executor-selection.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-executor-selection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for createEnvelopeMapper — the pure-function piece of
|
|
3
|
+
* CucumberSubprocessExecutor that translates Cucumber.js envelope streams
|
|
4
|
+
* into runner scenario/step events.
|
|
5
|
+
*
|
|
6
|
+
* Cucumber envelopes arrive in topological order:
|
|
7
|
+
* pickle → testCase → testCaseStarted → testStepFinished(s) → testCaseFinished
|
|
8
|
+
* Tests here verify:
|
|
9
|
+
* - Correct id chain (pickleId is the stable scenarioId we emit)
|
|
10
|
+
* - Feature mapping (DB path resolution from tmpdir uri)
|
|
11
|
+
* - Status semantics (Cucumber's enum → runner's TestStatus)
|
|
12
|
+
* - Scenario rollup (any failed → failed; all skipped → skipped; else passed)
|
|
13
|
+
* - Out-of-order / partial input must not crash
|
|
14
|
+
* - Duration aggregation
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=envelope-mapper.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/envelope-mapper.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for createEnvelopeMapper — the pure-function piece of
|
|
4
|
+
* CucumberSubprocessExecutor that translates Cucumber.js envelope streams
|
|
5
|
+
* into runner scenario/step events.
|
|
6
|
+
*
|
|
7
|
+
* Cucumber envelopes arrive in topological order:
|
|
8
|
+
* pickle → testCase → testCaseStarted → testStepFinished(s) → testCaseFinished
|
|
9
|
+
* Tests here verify:
|
|
10
|
+
* - Correct id chain (pickleId is the stable scenarioId we emit)
|
|
11
|
+
* - Feature mapping (DB path resolution from tmpdir uri)
|
|
12
|
+
* - Status semantics (Cucumber's enum → runner's TestStatus)
|
|
13
|
+
* - Scenario rollup (any failed → failed; all skipped → skipped; else passed)
|
|
14
|
+
* - Out-of-order / partial input must not crash
|
|
15
|
+
* - Duration aggregation
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const vitest_1 = require("vitest");
|
|
19
|
+
const cucumber_subprocess_1 = require("../frameworks/cucumber-subprocess");
|
|
20
|
+
function makeCallbacks() {
|
|
21
|
+
const started = [];
|
|
22
|
+
const steps = [];
|
|
23
|
+
const finished = [];
|
|
24
|
+
return {
|
|
25
|
+
started,
|
|
26
|
+
steps,
|
|
27
|
+
finished,
|
|
28
|
+
callbacks: {
|
|
29
|
+
onScenarioStart: (id, name, feature) => started.push([id, name, feature]),
|
|
30
|
+
onStepComplete: (id, step) => steps.push([id, step]),
|
|
31
|
+
onScenarioComplete: (id, status, durationMs, err) => finished.push([id, status, durationMs, err]),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Mimics the envelope shapes Cucumber.js emits (subset we consume). The
|
|
36
|
+
// runner's mapper accesses these by property name, so duck typing is enough.
|
|
37
|
+
const envFactory = {
|
|
38
|
+
pickle: (id, name, uri) => ({
|
|
39
|
+
pickle: { id, name, uri },
|
|
40
|
+
}),
|
|
41
|
+
testCase: (id, pickleId) => ({
|
|
42
|
+
testCase: { id, pickleId },
|
|
43
|
+
}),
|
|
44
|
+
testCaseStarted: (id, testCaseId) => ({
|
|
45
|
+
testCaseStarted: { id, testCaseId },
|
|
46
|
+
}),
|
|
47
|
+
testStepFinished: (testCaseStartedId, status, nanos = 0, message) => ({
|
|
48
|
+
testStepFinished: {
|
|
49
|
+
testCaseStartedId,
|
|
50
|
+
testStepResult: {
|
|
51
|
+
status,
|
|
52
|
+
duration: { seconds: 0, nanos },
|
|
53
|
+
message,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
57
|
+
testCaseFinished: (testCaseStartedId) => ({
|
|
58
|
+
testCaseFinished: { testCaseStartedId },
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
(0, vitest_1.describe)('createEnvelopeMapper', () => {
|
|
62
|
+
(0, vitest_1.describe)('happy path: single feature, single scenario, all pass', () => {
|
|
63
|
+
(0, vitest_1.it)('emits onScenarioStart, onStepComplete, onScenarioComplete in order', () => {
|
|
64
|
+
const { callbacks, started, steps, finished } = makeCallbacks();
|
|
65
|
+
const featureMap = new Map([['feat-123', 'features/login/auth.feature']]);
|
|
66
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(featureMap, callbacks);
|
|
67
|
+
mapper.handle(envFactory.pickle('p1', 'User logs in', 'features/feat-123.feature'));
|
|
68
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
69
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
70
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'PASSED', 100_000_000));
|
|
71
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'PASSED', 200_000_000));
|
|
72
|
+
mapper.handle(envFactory.testCaseFinished('tcs1'));
|
|
73
|
+
// pickleId is the stable scenarioId emitted to the runner
|
|
74
|
+
(0, vitest_1.expect)(started).toEqual([['p1', 'User logs in', 'features/login/auth.feature']]);
|
|
75
|
+
(0, vitest_1.expect)(steps).toHaveLength(2);
|
|
76
|
+
(0, vitest_1.expect)(steps[0][1].status).toBe('passed');
|
|
77
|
+
(0, vitest_1.expect)(steps[0][1].durationMs).toBe(100);
|
|
78
|
+
(0, vitest_1.expect)(steps[1][1].durationMs).toBe(200);
|
|
79
|
+
// Rollup: all passed → passed; total duration sums step durations
|
|
80
|
+
(0, vitest_1.expect)(finished).toEqual([['p1', 'passed', 300, undefined]]);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
(0, vitest_1.describe)('feature id mapping', () => {
|
|
84
|
+
(0, vitest_1.it)('falls back to pickle.uri when featureId is not in the map', () => {
|
|
85
|
+
const { callbacks, started } = makeCallbacks();
|
|
86
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
87
|
+
mapper.handle(envFactory.pickle('p1', 'Scenario', 'features/unknown-id.feature'));
|
|
88
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
89
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
90
|
+
// Falls back to the pickle uri — caller can still attribute, just
|
|
91
|
+
// through the legacy/default-feature path on the server.
|
|
92
|
+
(0, vitest_1.expect)(started[0][2]).toBe('features/unknown-id.feature');
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)('attributes multiple features to their correct DB paths', () => {
|
|
95
|
+
const { callbacks, started } = makeCallbacks();
|
|
96
|
+
const featureMap = new Map([
|
|
97
|
+
['feat-a', 'features/login.feature'],
|
|
98
|
+
['feat-b', 'features/signup.feature'],
|
|
99
|
+
]);
|
|
100
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(featureMap, callbacks);
|
|
101
|
+
mapper.handle(envFactory.pickle('p1', 'Login', 'features/feat-a.feature'));
|
|
102
|
+
mapper.handle(envFactory.pickle('p2', 'Signup', 'features/feat-b.feature'));
|
|
103
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
104
|
+
mapper.handle(envFactory.testCase('tc2', 'p2'));
|
|
105
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
106
|
+
mapper.handle(envFactory.testCaseStarted('tcs2', 'tc2'));
|
|
107
|
+
(0, vitest_1.expect)(started[0]).toEqual(['p1', 'Login', 'features/login.feature']);
|
|
108
|
+
(0, vitest_1.expect)(started[1]).toEqual(['p2', 'Signup', 'features/signup.feature']);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.describe)('status mapping', () => {
|
|
112
|
+
vitest_1.it.each([
|
|
113
|
+
['PASSED', 'passed'],
|
|
114
|
+
['SKIPPED', 'skipped'],
|
|
115
|
+
['FAILED', 'failed'],
|
|
116
|
+
['UNDEFINED', 'failed'],
|
|
117
|
+
['PENDING', 'failed'],
|
|
118
|
+
['AMBIGUOUS', 'failed'],
|
|
119
|
+
['UNKNOWN_TO_RUNNER', 'failed'],
|
|
120
|
+
])('maps Cucumber %s → runner %s', (cucumberStatus, runnerStatus) => {
|
|
121
|
+
const { callbacks, steps } = makeCallbacks();
|
|
122
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
123
|
+
mapper.handle(envFactory.pickle('p1', 'S', 'features/x.feature'));
|
|
124
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
125
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
126
|
+
mapper.handle(envFactory.testStepFinished('tcs1', cucumberStatus));
|
|
127
|
+
(0, vitest_1.expect)(steps[0][1].status).toBe(runnerStatus);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
(0, vitest_1.describe)('scenario rollup at testCaseFinished', () => {
|
|
131
|
+
(0, vitest_1.it)('rolls up to failed when any step failed', () => {
|
|
132
|
+
const { callbacks, finished } = makeCallbacks();
|
|
133
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
134
|
+
mapper.handle(envFactory.pickle('p1', 'S', 'features/x.feature'));
|
|
135
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
136
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
137
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'PASSED', 100_000_000));
|
|
138
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'FAILED', 50_000_000, 'boom'));
|
|
139
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'SKIPPED'));
|
|
140
|
+
mapper.handle(envFactory.testCaseFinished('tcs1'));
|
|
141
|
+
(0, vitest_1.expect)(finished).toEqual([['p1', 'failed', 150, 'boom']]);
|
|
142
|
+
});
|
|
143
|
+
(0, vitest_1.it)('rolls up to skipped when every step was skipped', () => {
|
|
144
|
+
const { callbacks, finished } = makeCallbacks();
|
|
145
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
146
|
+
mapper.handle(envFactory.pickle('p1', 'S', 'features/x.feature'));
|
|
147
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
148
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
149
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'SKIPPED'));
|
|
150
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'SKIPPED'));
|
|
151
|
+
mapper.handle(envFactory.testCaseFinished('tcs1'));
|
|
152
|
+
(0, vitest_1.expect)(finished[0][1]).toBe('skipped');
|
|
153
|
+
});
|
|
154
|
+
(0, vitest_1.it)('rolls up to passed when no steps recorded (degenerate but possible)', () => {
|
|
155
|
+
const { callbacks, finished } = makeCallbacks();
|
|
156
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
157
|
+
mapper.handle(envFactory.pickle('p1', 'S', 'features/x.feature'));
|
|
158
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
159
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
160
|
+
mapper.handle(envFactory.testCaseFinished('tcs1'));
|
|
161
|
+
(0, vitest_1.expect)(finished[0][1]).toBe('passed');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
(0, vitest_1.describe)('defensive: out-of-order / missing envelopes', () => {
|
|
165
|
+
(0, vitest_1.it)('skips testStepFinished arriving before testCase / testCaseStarted', () => {
|
|
166
|
+
const { callbacks, steps, finished } = makeCallbacks();
|
|
167
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
168
|
+
// Step result arrives with no preceding pickle/testCase/testCaseStarted
|
|
169
|
+
mapper.handle(envFactory.testStepFinished('phantom-tcs', 'PASSED'));
|
|
170
|
+
mapper.handle(envFactory.testCaseFinished('phantom-tcs'));
|
|
171
|
+
// Nothing should be emitted — defensive guards keep us alive
|
|
172
|
+
(0, vitest_1.expect)(steps).toHaveLength(0);
|
|
173
|
+
(0, vitest_1.expect)(finished).toHaveLength(0);
|
|
174
|
+
});
|
|
175
|
+
(0, vitest_1.it)('handles unknown envelope shapes without crashing', () => {
|
|
176
|
+
const { callbacks } = makeCallbacks();
|
|
177
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
178
|
+
// Cucumber 11+ may add new envelope types; our mapper must be forward-compatible
|
|
179
|
+
(0, vitest_1.expect)(() => mapper.handle({ someUnknownEnvelope: { id: 'x' } })).not.toThrow();
|
|
180
|
+
(0, vitest_1.expect)(() => mapper.handle(undefined)).not.toThrow();
|
|
181
|
+
(0, vitest_1.expect)(() => mapper.handle(null)).not.toThrow();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
(0, vitest_1.describe)('getScenarios()', () => {
|
|
185
|
+
(0, vitest_1.it)('returns all accumulated scenarios after the run', () => {
|
|
186
|
+
const { callbacks } = makeCallbacks();
|
|
187
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map([['feat-a', 'features/a.feature']]), callbacks);
|
|
188
|
+
mapper.handle(envFactory.pickle('p1', 'S1', 'features/feat-a.feature'));
|
|
189
|
+
mapper.handle(envFactory.testCase('tc1', 'p1'));
|
|
190
|
+
mapper.handle(envFactory.testCaseStarted('tcs1', 'tc1'));
|
|
191
|
+
mapper.handle(envFactory.testStepFinished('tcs1', 'PASSED', 1_000_000));
|
|
192
|
+
mapper.handle(envFactory.testCaseFinished('tcs1'));
|
|
193
|
+
const scenarios = mapper.getScenarios();
|
|
194
|
+
(0, vitest_1.expect)(scenarios).toHaveLength(1);
|
|
195
|
+
(0, vitest_1.expect)(scenarios[0]).toMatchObject({
|
|
196
|
+
scenarioId: 'p1',
|
|
197
|
+
scenarioName: 'S1',
|
|
198
|
+
featureId: 'feat-a',
|
|
199
|
+
status: 'passed',
|
|
200
|
+
});
|
|
201
|
+
(0, vitest_1.expect)(scenarios[0].steps).toHaveLength(1);
|
|
202
|
+
});
|
|
203
|
+
(0, vitest_1.it)('returns an empty array when no scenarios were processed', () => {
|
|
204
|
+
const { callbacks } = makeCallbacks();
|
|
205
|
+
const mapper = (0, cucumber_subprocess_1.createEnvelopeMapper)(new Map(), callbacks);
|
|
206
|
+
(0, vitest_1.expect)(mapper.getScenarios()).toEqual([]);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
// Sanity-check that vi is actually imported and functional.
|
|
211
|
+
(0, vitest_1.describe)('module imports', () => {
|
|
212
|
+
(0, vitest_1.it)('createEnvelopeMapper is exported', () => {
|
|
213
|
+
(0, vitest_1.expect)(typeof cucumber_subprocess_1.createEnvelopeMapper).toBe('function');
|
|
214
|
+
(0, vitest_1.expect)(vitest_1.vi).toBeDefined();
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=envelope-mapper.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/envelope-mapper.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gherkin-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gherkin-parser.test.ts"],"names":[],"mappings":""}
|