@cloudbeat/cucumber 1.0.0-beta.1
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 +11 -0
- package/out/CbCucumberReporter.d.ts +40 -0
- package/out/CbCucumberReporter.js +350 -0
- package/out/CbCucumberReporter.js.map +1 -0
- package/out/index.d.ts +4 -0
- package/out/index.js +12 -0
- package/out/index.js.map +1 -0
- package/out/pw-utils.d.ts +3 -0
- package/out/pw-utils.js +265 -0
- package/out/pw-utils.js.map +1 -0
- package/out/types.d.ts +282 -0
- package/out/types.js +3 -0
- package/out/types.js.map +1 -0
- package/out/utils.d.ts +9 -0
- package/out/utils.js +136 -0
- package/out/utils.js.map +1 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Formatter } from '@cucumber/cucumber';
|
|
2
|
+
import { ReporterOptions } from './types';
|
|
3
|
+
declare class CbCucumberReporter extends Formatter {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private stats;
|
|
6
|
+
private cbTestResult?;
|
|
7
|
+
private playwrightSteps;
|
|
8
|
+
private acceptedPickleIds;
|
|
9
|
+
private parsedGherkinDocumentMap;
|
|
10
|
+
private parsedPickleMap;
|
|
11
|
+
private parsedTestCaseMap;
|
|
12
|
+
private parsedStepDefinitionMap;
|
|
13
|
+
private startedTestCaseMap;
|
|
14
|
+
private startedCbSuiteMap;
|
|
15
|
+
private startedCbCaseMap;
|
|
16
|
+
private startedCbStepMap;
|
|
17
|
+
private attachmentsByTestStepIdMap;
|
|
18
|
+
private runId?;
|
|
19
|
+
private instanceId?;
|
|
20
|
+
private agentId?;
|
|
21
|
+
private resultFilePath?;
|
|
22
|
+
constructor(options: ReporterOptions);
|
|
23
|
+
private setupEventListeners;
|
|
24
|
+
private handleEnvelope;
|
|
25
|
+
private onTestRunHookStarted;
|
|
26
|
+
private onTestCase;
|
|
27
|
+
private onGherkinDocument;
|
|
28
|
+
private onPickle;
|
|
29
|
+
private onAttachment;
|
|
30
|
+
private onTestRunStarted;
|
|
31
|
+
private onTestRunFinished;
|
|
32
|
+
private onTestCaseStarted;
|
|
33
|
+
private onTestCaseFinished;
|
|
34
|
+
private onTestStepStarted;
|
|
35
|
+
private onTestStepFinished;
|
|
36
|
+
private getStatusInfo;
|
|
37
|
+
private updateScenarioStats;
|
|
38
|
+
private updateStepStats;
|
|
39
|
+
}
|
|
40
|
+
export default CbCucumberReporter;
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const types_1 = require("@cloudbeat/types");
|
|
4
|
+
const cucumber_1 = require("@cucumber/cucumber");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
class CbCucumberReporter extends cucumber_1.Formatter {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super(options);
|
|
9
|
+
this.stats = {
|
|
10
|
+
scenarios: { total: 0, passed: 0, failed: 0, skipped: 0 },
|
|
11
|
+
steps: { total: 0, passed: 0, failed: 0, skipped: 0, pending: 0 },
|
|
12
|
+
};
|
|
13
|
+
this.playwrightSteps = new Map();
|
|
14
|
+
this.acceptedPickleIds = new Set();
|
|
15
|
+
this.parsedGherkinDocumentMap = new Map();
|
|
16
|
+
this.parsedPickleMap = new Map();
|
|
17
|
+
this.parsedTestCaseMap = new Map();
|
|
18
|
+
this.parsedStepDefinitionMap = new Map();
|
|
19
|
+
this.startedTestCaseMap = new Map();
|
|
20
|
+
this.startedCbSuiteMap = new Map();
|
|
21
|
+
this.startedCbCaseMap = new Map();
|
|
22
|
+
this.startedCbStepMap = new Map();
|
|
23
|
+
this.attachmentsByTestStepIdMap = new Map();
|
|
24
|
+
this.options = options;
|
|
25
|
+
if (process.env.CB_AGENT
|
|
26
|
+
&& process.env.CB_AGENT === 'true'
|
|
27
|
+
&& (options.runId || process.env.CB_RUN_ID)
|
|
28
|
+
&& (options.instanceId || process.env.CB_INSTANCE_ID)
|
|
29
|
+
&& (options.agentId || process.env.CB_AGENT_ID)) {
|
|
30
|
+
this.runId = options.runId || process.env.CB_RUN_ID;
|
|
31
|
+
this.instanceId = options.instanceId || process.env.CB_INSTANCE_ID;
|
|
32
|
+
this.agentId = options.agentId || process.env.CB_AGENT_ID;
|
|
33
|
+
this.resultFilePath = (0, utils_1.getResultFilePath)(options.outputDir);
|
|
34
|
+
this.cbTestResult = {
|
|
35
|
+
startTime: (new Date()).getTime(),
|
|
36
|
+
runId: this.runId,
|
|
37
|
+
instanceId: this.instanceId,
|
|
38
|
+
agentId: this.agentId,
|
|
39
|
+
suites: [],
|
|
40
|
+
metadata: {
|
|
41
|
+
framework: 'Cucumber',
|
|
42
|
+
language: 'JavaScript',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
this.setupEventListeners();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
setupEventListeners() {
|
|
49
|
+
this.options.eventBroadcaster.on('envelope', this.handleEnvelope.bind(this));
|
|
50
|
+
}
|
|
51
|
+
handleEnvelope(envelope) {
|
|
52
|
+
if (envelope.testRunStarted) {
|
|
53
|
+
this.onTestRunStarted(envelope.testRunStarted);
|
|
54
|
+
}
|
|
55
|
+
else if (envelope.testRunFinished) {
|
|
56
|
+
this.onTestRunFinished(envelope.testRunFinished);
|
|
57
|
+
}
|
|
58
|
+
else if (envelope.testCase) {
|
|
59
|
+
this.onTestCase(envelope.testCase);
|
|
60
|
+
}
|
|
61
|
+
else if (envelope.gherkinDocument) {
|
|
62
|
+
this.onGherkinDocument(envelope.gherkinDocument);
|
|
63
|
+
}
|
|
64
|
+
else if (envelope.pickle) {
|
|
65
|
+
this.onPickle(envelope.pickle);
|
|
66
|
+
}
|
|
67
|
+
else if (envelope.attachment) {
|
|
68
|
+
this.onAttachment(envelope.attachment);
|
|
69
|
+
}
|
|
70
|
+
else if (envelope.stepDefinition) {
|
|
71
|
+
this.parsedStepDefinitionMap.set(envelope.stepDefinition.id, envelope.stepDefinition);
|
|
72
|
+
}
|
|
73
|
+
else if (envelope.testCaseStarted) {
|
|
74
|
+
this.onTestCaseStarted(envelope.testCaseStarted);
|
|
75
|
+
}
|
|
76
|
+
else if (envelope.testCaseFinished) {
|
|
77
|
+
this.onTestCaseFinished(envelope.testCaseFinished);
|
|
78
|
+
}
|
|
79
|
+
else if (envelope.testStepStarted) {
|
|
80
|
+
this.onTestStepStarted(envelope.testStepStarted);
|
|
81
|
+
}
|
|
82
|
+
else if (envelope.testStepFinished) {
|
|
83
|
+
this.onTestStepFinished(envelope.testStepFinished);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
if (envelope.meta || envelope.source || envelope.hook || envelope.attachment) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
console.log('Other envelope', envelope);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
onTestRunHookStarted(testRunHookStarted) {
|
|
93
|
+
console.log('testRunHookStarted', testRunHookStarted);
|
|
94
|
+
process.exit(0);
|
|
95
|
+
}
|
|
96
|
+
onTestCase(testCase) {
|
|
97
|
+
this.acceptedPickleIds.add(testCase.pickleId);
|
|
98
|
+
this.parsedTestCaseMap.set(testCase.id, testCase);
|
|
99
|
+
}
|
|
100
|
+
onGherkinDocument(gherkinDocument) {
|
|
101
|
+
var _a;
|
|
102
|
+
if (!gherkinDocument.feature || !gherkinDocument.uri) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.parsedGherkinDocumentMap.set(gherkinDocument.uri, gherkinDocument);
|
|
106
|
+
const cbSuite = {
|
|
107
|
+
id: (0, utils_1.generateId)(),
|
|
108
|
+
name: (_a = gherkinDocument.feature) === null || _a === void 0 ? void 0 : _a.name,
|
|
109
|
+
startTime: (new Date()).getTime(),
|
|
110
|
+
duration: 0,
|
|
111
|
+
fqn: gherkinDocument.uri,
|
|
112
|
+
status: types_1.ResultStatusEnum.SKIPPED,
|
|
113
|
+
iterationNum: 1,
|
|
114
|
+
suites: [],
|
|
115
|
+
hooks: [],
|
|
116
|
+
cases: [],
|
|
117
|
+
};
|
|
118
|
+
cbSuite.endTime = cbSuite.startTime;
|
|
119
|
+
this.startedCbSuiteMap.set(gherkinDocument.uri, cbSuite);
|
|
120
|
+
this.cbTestResult.suites.push(cbSuite);
|
|
121
|
+
}
|
|
122
|
+
onPickle(pickle) {
|
|
123
|
+
this.parsedPickleMap.set(pickle.id, pickle);
|
|
124
|
+
}
|
|
125
|
+
onAttachment(attachment) {
|
|
126
|
+
const { testStepId } = attachment;
|
|
127
|
+
if (testStepId) {
|
|
128
|
+
if (!this.attachmentsByTestStepIdMap.has(testStepId)) {
|
|
129
|
+
this.attachmentsByTestStepIdMap.set(testStepId, []);
|
|
130
|
+
}
|
|
131
|
+
const attachments = this.attachmentsByTestStepIdMap.get(testStepId);
|
|
132
|
+
attachments.push(attachment);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
onTestRunStarted(testRunStarted) {
|
|
136
|
+
this.cbTestResult.startTime = (new Date()).getTime();
|
|
137
|
+
}
|
|
138
|
+
onTestRunFinished(testRunFinished) {
|
|
139
|
+
if (!this.cbTestResult) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.cbTestResult.endTime = (new Date()).getTime();
|
|
143
|
+
this.cbTestResult.duration = this.cbTestResult.endTime - this.cbTestResult.startTime;
|
|
144
|
+
const hasFailures = this.stats.scenarios.failed > 0 || this.stats.steps.failed > 0;
|
|
145
|
+
this.cbTestResult.status = testRunFinished.success === false || hasFailures
|
|
146
|
+
? types_1.ResultStatusEnum.FAILED : types_1.ResultStatusEnum.PASSED;
|
|
147
|
+
(0, utils_1.generateResultFile)(this.cbTestResult, this.resultFilePath);
|
|
148
|
+
if (testRunFinished.success === false || hasFailures) {
|
|
149
|
+
console.log('❌ Test run completed with failures');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log('✅ Test run completed successfully');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
onTestCaseStarted(testCaseStarted) {
|
|
156
|
+
const testCase = this.parsedTestCaseMap.get(testCaseStarted.testCaseId);
|
|
157
|
+
if (!testCase) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const pickle = this.parsedPickleMap.get(testCase.pickleId);
|
|
161
|
+
if (!pickle) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const gherkinDocument = this.parsedGherkinDocumentMap.get(pickle.uri);
|
|
165
|
+
if (!gherkinDocument) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.startedTestCaseMap.set(testCaseStarted.id, testCaseStarted);
|
|
169
|
+
const cbCaseResult = {
|
|
170
|
+
id: (0, utils_1.generateId)(),
|
|
171
|
+
name: pickle.name,
|
|
172
|
+
startTime: (new Date()).getTime(),
|
|
173
|
+
fqn: `${pickle.uri}:${pickle.name}`,
|
|
174
|
+
iterationNum: 1,
|
|
175
|
+
reRunCount: testCaseStarted.attempt,
|
|
176
|
+
steps: [],
|
|
177
|
+
};
|
|
178
|
+
const cbParentSuite = this.startedCbSuiteMap.get(gherkinDocument.uri);
|
|
179
|
+
if (!cbParentSuite) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (cbParentSuite.duration === 0) {
|
|
183
|
+
cbParentSuite.startTime = cbCaseResult.startTime;
|
|
184
|
+
cbParentSuite.endTime = undefined;
|
|
185
|
+
cbParentSuite.duration = undefined;
|
|
186
|
+
cbParentSuite.status = types_1.ResultStatusEnum.PASSED;
|
|
187
|
+
}
|
|
188
|
+
cbParentSuite.cases.push(cbCaseResult);
|
|
189
|
+
this.startedCbCaseMap.set(testCaseStarted.id, cbCaseResult);
|
|
190
|
+
}
|
|
191
|
+
onTestCaseFinished(testCaseFinished) {
|
|
192
|
+
const cbCaseResult = this.startedCbCaseMap.get(testCaseFinished.testCaseStartedId);
|
|
193
|
+
if (!cbCaseResult) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const startedTestCase = this.startedTestCaseMap.get(testCaseFinished.testCaseStartedId);
|
|
197
|
+
if (!startedTestCase) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const testCase = this.parsedTestCaseMap.get(startedTestCase.testCaseId);
|
|
201
|
+
if (!testCase) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const pickle = this.parsedPickleMap.get(testCase.pickleId);
|
|
205
|
+
if (!pickle) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const gherkinDoc = this.parsedGherkinDocumentMap.get(pickle.uri);
|
|
209
|
+
if (!gherkinDoc) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const cbParentSuite = this.startedCbSuiteMap.get(gherkinDoc.uri);
|
|
213
|
+
if (!cbParentSuite) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
cbCaseResult.endTime = (new Date()).getTime();
|
|
217
|
+
cbCaseResult.duration = cbCaseResult.endTime - cbCaseResult.startTime;
|
|
218
|
+
cbParentSuite.endTime = cbCaseResult.endTime;
|
|
219
|
+
cbParentSuite.duration = cbParentSuite.endTime - cbParentSuite.startTime;
|
|
220
|
+
const cukeResult = testCaseFinished.result;
|
|
221
|
+
if (cukeResult) {
|
|
222
|
+
cbCaseResult.status = cukeResult.status === 'FAILED' ? types_1.ResultStatusEnum.FAILED : types_1.ResultStatusEnum.PASSED;
|
|
223
|
+
if (cukeResult.message) {
|
|
224
|
+
cbCaseResult.failure = {
|
|
225
|
+
type: 'CUCUMBER_ERROR',
|
|
226
|
+
message: cukeResult.message,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
cbCaseResult.status = (0, utils_1.determineTestCaseStatus)(cbCaseResult);
|
|
232
|
+
}
|
|
233
|
+
if (cbCaseResult.status === types_1.ResultStatusEnum.FAILED) {
|
|
234
|
+
cbParentSuite.status = types_1.ResultStatusEnum.FAILED;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
onTestStepStarted(testStepStarted) {
|
|
238
|
+
var _a;
|
|
239
|
+
const startedTestCase = this.startedTestCaseMap.get(testStepStarted.testCaseStartedId);
|
|
240
|
+
if (!startedTestCase) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const cbCaseResult = this.startedCbCaseMap.get(testStepStarted.testCaseStartedId);
|
|
244
|
+
if (!cbCaseResult) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const testCase = this.parsedTestCaseMap.get(startedTestCase.testCaseId);
|
|
248
|
+
if (!testCase) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const pickle = this.parsedPickleMap.get(testCase.pickleId);
|
|
252
|
+
if (!pickle) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (!testStepStarted.testStepId) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const testCaseStartedStep = testCase.testSteps.find(step => step.id === testStepStarted.testStepId);
|
|
259
|
+
if (!(testCaseStartedStep === null || testCaseStartedStep === void 0 ? void 0 : testCaseStartedStep.stepDefinitionIds) || !testCaseStartedStep.stepDefinitionIds.length) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const pickleStepId = testCaseStartedStep.pickleStepId;
|
|
263
|
+
const pickleStep = pickle.steps.find(step => step.id === pickleStepId);
|
|
264
|
+
if (!pickleStep) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const cbStepResult = {
|
|
268
|
+
id: (0, utils_1.generateId)(),
|
|
269
|
+
name: pickleStep.text,
|
|
270
|
+
type: types_1.StepTypeEnum.GHERKIN,
|
|
271
|
+
startTime: (new Date()).getTime(),
|
|
272
|
+
fqn: `${cbCaseResult.fqn}:${pickleStep.text}`,
|
|
273
|
+
location: pickleStep.locations && pickleStep.locations.length ? `${pickle.uri}:${pickleStep.locations[0].line}` : undefined,
|
|
274
|
+
extra: {
|
|
275
|
+
gherkin: {
|
|
276
|
+
type: (0, utils_1.getGherkinStepExtraType)(pickleStep.type),
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
steps: [],
|
|
280
|
+
};
|
|
281
|
+
(_a = cbCaseResult.steps) === null || _a === void 0 ? void 0 : _a.push(cbStepResult);
|
|
282
|
+
this.startedCbStepMap.set(testStepStarted.testStepId, cbStepResult);
|
|
283
|
+
}
|
|
284
|
+
onTestStepFinished(testStepFinished) {
|
|
285
|
+
const { testStepResult, testStepId, testCaseStartedId } = testStepFinished;
|
|
286
|
+
const cbStepResult = this.startedCbStepMap.get(testStepId);
|
|
287
|
+
if (!cbStepResult) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const attachments = this.attachmentsByTestStepIdMap.get(testStepId);
|
|
291
|
+
cbStepResult.endTime = (new Date()).getTime();
|
|
292
|
+
cbStepResult.duration = cbStepResult.endTime - cbStepResult.startTime;
|
|
293
|
+
cbStepResult.status = types_1.ResultStatusEnum.PASSED;
|
|
294
|
+
(0, utils_1.addPlaywrightStepsFromAttachments)(cbStepResult, attachments);
|
|
295
|
+
if (testStepResult && testStepResult.status === 'FAILED') {
|
|
296
|
+
cbStepResult.status = types_1.ResultStatusEnum.FAILED;
|
|
297
|
+
if (testStepResult.exception) {
|
|
298
|
+
cbStepResult.failure = (0, utils_1.getFailureFromException)(testStepResult.exception);
|
|
299
|
+
}
|
|
300
|
+
else if (testStepResult.message) {
|
|
301
|
+
cbStepResult.failure = (0, utils_1.getFailureFromMessage)(testStepResult.message);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
getStatusInfo(status) {
|
|
306
|
+
switch (status) {
|
|
307
|
+
case 'PASSED':
|
|
308
|
+
return { status: 'PASSED', emoji: '✅' };
|
|
309
|
+
case 'FAILED':
|
|
310
|
+
return { status: 'FAILED', emoji: '❌' };
|
|
311
|
+
case 'SKIPPED':
|
|
312
|
+
return { status: 'SKIPPED', emoji: '⏭️' };
|
|
313
|
+
case 'PENDING':
|
|
314
|
+
return { status: 'PENDING', emoji: '⏳' };
|
|
315
|
+
default:
|
|
316
|
+
return { status, emoji: '❓' };
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
updateScenarioStats(status) {
|
|
320
|
+
switch (status) {
|
|
321
|
+
case 'PASSED':
|
|
322
|
+
this.stats.scenarios.passed++;
|
|
323
|
+
break;
|
|
324
|
+
case 'FAILED':
|
|
325
|
+
this.stats.scenarios.failed++;
|
|
326
|
+
break;
|
|
327
|
+
case 'SKIPPED':
|
|
328
|
+
this.stats.scenarios.skipped++;
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
updateStepStats(status) {
|
|
333
|
+
switch (status) {
|
|
334
|
+
case 'PASSED':
|
|
335
|
+
this.stats.steps.passed++;
|
|
336
|
+
break;
|
|
337
|
+
case 'FAILED':
|
|
338
|
+
this.stats.steps.failed++;
|
|
339
|
+
break;
|
|
340
|
+
case 'SKIPPED':
|
|
341
|
+
this.stats.steps.skipped++;
|
|
342
|
+
break;
|
|
343
|
+
case 'PENDING':
|
|
344
|
+
this.stats.steps.pending++;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.default = CbCucumberReporter;
|
|
350
|
+
//# sourceMappingURL=CbCucumberReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CbCucumberReporter.js","sourceRoot":"","sources":["../src/CbCucumberReporter.ts"],"names":[],"mappings":"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"}
|
package/out/index.d.ts
ADDED
package/out/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.wrapExpect = exports.wrapPlaywrightPage = void 0;
|
|
7
|
+
const CbCucumberReporter_1 = __importDefault(require("./CbCucumberReporter"));
|
|
8
|
+
const pw_utils_1 = require("./pw-utils");
|
|
9
|
+
Object.defineProperty(exports, "wrapExpect", { enumerable: true, get: function () { return pw_utils_1.wrapExpect; } });
|
|
10
|
+
Object.defineProperty(exports, "wrapPlaywrightPage", { enumerable: true, get: function () { return pw_utils_1.wrapPlaywrightPage; } });
|
|
11
|
+
exports.default = CbCucumberReporter_1.default;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
package/out/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAsD;AACtD,yCAA4D;AAI/B,2FAJpB,qBAAU,OAIoB;AAA9B,mGAJY,6BAAkB,OAIZ;AAF3B,kBAAe,4BAAkB,CAAC"}
|
package/out/pw-utils.js
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapPlaywrightPage = wrapPlaywrightPage;
|
|
4
|
+
exports.wrapExpect = wrapExpect;
|
|
5
|
+
const CAPTURE_METHODS = [
|
|
6
|
+
'goto', 'click', 'fill', 'type', 'press', 'waitForSelector',
|
|
7
|
+
'waitForTimeout', 'screenshot', 'evaluate', 'locator',
|
|
8
|
+
'getByText', 'getByRole', 'getByTestId', 'getByPlaceholder',
|
|
9
|
+
'selectOption', 'check', 'uncheck', 'hover', 'focus', 'blur',
|
|
10
|
+
'waitFor', 'getAttribute',
|
|
11
|
+
];
|
|
12
|
+
function shouldCaptureMethod(method) {
|
|
13
|
+
return CAPTURE_METHODS.includes(method);
|
|
14
|
+
}
|
|
15
|
+
function shouldCaptureExpectationMethod(method) {
|
|
16
|
+
const captureMethods = [
|
|
17
|
+
'toBe', 'toEqual', 'toStrictEqual', 'toBeTruthy', 'toBeFalsy', 'toBeNull',
|
|
18
|
+
'toBeUndefined', 'toBeDefined', 'toContain', 'toHaveLength', 'toMatch',
|
|
19
|
+
'toThrow', 'toHaveBeenCalled', 'toHaveBeenCalledWith', 'toHaveBeenCalledTimes',
|
|
20
|
+
'toBeVisible', 'toBeHidden', 'toBeEnabled', 'toBeDisabled', 'toBeEditable',
|
|
21
|
+
'toBeEmpty', 'toBeChecked', 'toBeFocused', 'toContainText', 'toHaveAttribute',
|
|
22
|
+
'toHaveClass', 'toHaveCSS', 'toHaveId', 'toHaveJSProperty', 'toHaveText',
|
|
23
|
+
'toHaveValue', 'toHaveTitle', 'toHaveURL', 'toHaveCount', 'toHaveScreenshot',
|
|
24
|
+
'not',
|
|
25
|
+
];
|
|
26
|
+
return captureMethods.includes(method);
|
|
27
|
+
}
|
|
28
|
+
function wrapPlaywrightPage(page, world) {
|
|
29
|
+
return new Proxy(page, {
|
|
30
|
+
get(target, prop, receiver) {
|
|
31
|
+
const originalValue = Reflect.get(target, prop, receiver);
|
|
32
|
+
if (prop === 'locator') {
|
|
33
|
+
return function (...args) {
|
|
34
|
+
const locator = originalValue.apply(target, args);
|
|
35
|
+
return createLocatorProxy(locator, args[0], world);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (typeof prop === 'string' && typeof originalValue === 'function' && shouldCaptureMethod(prop)) {
|
|
39
|
+
return function (...args) {
|
|
40
|
+
const event = {
|
|
41
|
+
type: 'page_action',
|
|
42
|
+
method: prop,
|
|
43
|
+
args: serializeArgs(args),
|
|
44
|
+
start: new Date().getTime(),
|
|
45
|
+
success: true,
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
const result = originalValue.apply(this, args);
|
|
49
|
+
if (result && typeof result.then === 'function') {
|
|
50
|
+
return result.then((value) => {
|
|
51
|
+
event.end = new Date().getTime();
|
|
52
|
+
event.result = sanitizeResult(value);
|
|
53
|
+
attachEvent(world, event);
|
|
54
|
+
return value;
|
|
55
|
+
}, (error) => {
|
|
56
|
+
event.end = new Date().getTime();
|
|
57
|
+
event.success = false;
|
|
58
|
+
event.error = {
|
|
59
|
+
type: error.name,
|
|
60
|
+
message: error.message,
|
|
61
|
+
stack: error.stack,
|
|
62
|
+
};
|
|
63
|
+
attachEvent(world, event);
|
|
64
|
+
throw error;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
event.end = new Date().getTime();
|
|
69
|
+
event.result = sanitizeResult(result);
|
|
70
|
+
attachEvent(world, event);
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
event.end = new Date().getTime();
|
|
76
|
+
event.success = false;
|
|
77
|
+
event.error = {
|
|
78
|
+
type: error.name,
|
|
79
|
+
message: error.message,
|
|
80
|
+
stack: error.stack,
|
|
81
|
+
};
|
|
82
|
+
attachEvent(world, event);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return originalValue;
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function createLocatorProxy(locator, selector, world) {
|
|
92
|
+
return new Proxy(locator, {
|
|
93
|
+
get(target, prop) {
|
|
94
|
+
const originalValue = target[prop];
|
|
95
|
+
if (typeof originalValue === 'function' && shouldCaptureMethod(prop)) {
|
|
96
|
+
return function (...args) {
|
|
97
|
+
const event = {
|
|
98
|
+
type: 'locator_action',
|
|
99
|
+
method: prop,
|
|
100
|
+
selector: selector,
|
|
101
|
+
args: serializeArgs(args),
|
|
102
|
+
start: new Date().getTime(),
|
|
103
|
+
success: true,
|
|
104
|
+
};
|
|
105
|
+
const result = originalValue.apply(target, args);
|
|
106
|
+
if (result && typeof result.then === 'function') {
|
|
107
|
+
return result.then((value) => {
|
|
108
|
+
event.end = new Date().getTime();
|
|
109
|
+
event.result = sanitizeResult(value);
|
|
110
|
+
attachEvent(world, event);
|
|
111
|
+
return value;
|
|
112
|
+
}, (error) => {
|
|
113
|
+
event.end = new Date().getTime();
|
|
114
|
+
event.success = false;
|
|
115
|
+
event.error = {
|
|
116
|
+
type: error.name,
|
|
117
|
+
message: error.message,
|
|
118
|
+
stack: error.stack,
|
|
119
|
+
};
|
|
120
|
+
attachEvent(world, event);
|
|
121
|
+
throw error;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
event.end = new Date().getTime();
|
|
125
|
+
event.result = sanitizeResult(result);
|
|
126
|
+
attachEvent(world, event);
|
|
127
|
+
return result;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return originalValue;
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function attachEvent(world, event) {
|
|
135
|
+
try {
|
|
136
|
+
const jsonData = JSON.stringify(event);
|
|
137
|
+
world.attach(jsonData, 'application/json;x-origin=cloudbeat');
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.warn('Failed to attach Playwright event:', error.message);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function serializeArgs(args) {
|
|
144
|
+
return args.map(arg => {
|
|
145
|
+
return serializeValue(arg);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function serializeValue(value) {
|
|
149
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value == null) {
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
if (typeof value === 'object') {
|
|
153
|
+
try {
|
|
154
|
+
return JSON.parse(JSON.stringify(value));
|
|
155
|
+
}
|
|
156
|
+
catch (_a) {
|
|
157
|
+
if (value.constructor && value.constructor.name) {
|
|
158
|
+
return `[${value.constructor.name}]`;
|
|
159
|
+
}
|
|
160
|
+
return '[Object]';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return '[Unknown]';
|
|
164
|
+
}
|
|
165
|
+
function sanitizeResult(result) {
|
|
166
|
+
if (result == null) {
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
if (typeof result === 'string' || typeof result === 'number' || typeof result === 'boolean') {
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
if (typeof result === 'object' && result.constructor && result.constructor.name) {
|
|
173
|
+
return `[${result.constructor.name}]`;
|
|
174
|
+
}
|
|
175
|
+
return '[Unknown]';
|
|
176
|
+
}
|
|
177
|
+
function isPlaywrightExpect(expectFunction) {
|
|
178
|
+
return expectFunction && expectFunction.name === 'expect' &&
|
|
179
|
+
expectFunction.toString().includes('playwright') ||
|
|
180
|
+
expectFunction.soft !== undefined;
|
|
181
|
+
}
|
|
182
|
+
function wrapExpect(originalExpect, world) {
|
|
183
|
+
return new Proxy(originalExpect, {
|
|
184
|
+
apply(target, thisArg, argumentsList) {
|
|
185
|
+
const actual = argumentsList[0];
|
|
186
|
+
const event = {
|
|
187
|
+
type: 'assertion',
|
|
188
|
+
method: 'expect',
|
|
189
|
+
args: serializeArgs(argumentsList),
|
|
190
|
+
start: new Date().getTime(),
|
|
191
|
+
success: true,
|
|
192
|
+
assertionType: isPlaywrightExpect(target) ? 'playwright_expect' : 'expect',
|
|
193
|
+
actual: serializeValue(actual),
|
|
194
|
+
};
|
|
195
|
+
try {
|
|
196
|
+
const result = target.apply(thisArg, argumentsList);
|
|
197
|
+
if (result && typeof result === 'object') {
|
|
198
|
+
return createExpectationProxy(result, event, world);
|
|
199
|
+
}
|
|
200
|
+
event.end = new Date().getTime();
|
|
201
|
+
attachEvent(world, event);
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
event.end = new Date().getTime();
|
|
206
|
+
event.success = false;
|
|
207
|
+
event.error = {
|
|
208
|
+
type: error.name,
|
|
209
|
+
message: error.message,
|
|
210
|
+
stack: error.stack,
|
|
211
|
+
};
|
|
212
|
+
attachEvent(world, event);
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function createExpectationProxy(expectation, baseEvent, world) {
|
|
219
|
+
return new Proxy(expectation, {
|
|
220
|
+
get(target, prop) {
|
|
221
|
+
const originalValue = target[prop];
|
|
222
|
+
if (typeof originalValue === 'function' && shouldCaptureExpectationMethod(prop)) {
|
|
223
|
+
return function (...args) {
|
|
224
|
+
const event = Object.assign(Object.assign({}, baseEvent), { method: `expect.${prop}`, args: serializeArgs(args), start: new Date().getTime(), expected: args.length > 0 ? serializeValue(args[0]) : undefined, success: true });
|
|
225
|
+
try {
|
|
226
|
+
const result = originalValue.apply(target, args);
|
|
227
|
+
if (result && typeof result.then === 'function') {
|
|
228
|
+
return result.then((value) => {
|
|
229
|
+
event.end = new Date().getTime();
|
|
230
|
+
attachEvent(world, event);
|
|
231
|
+
return value;
|
|
232
|
+
}, (error) => {
|
|
233
|
+
event.end = new Date().getTime();
|
|
234
|
+
event.success = false;
|
|
235
|
+
event.error = {
|
|
236
|
+
type: error.name,
|
|
237
|
+
message: error.message,
|
|
238
|
+
stack: error.stack,
|
|
239
|
+
};
|
|
240
|
+
attachEvent(world, event);
|
|
241
|
+
throw error;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
event.end = new Date().getTime();
|
|
245
|
+
attachEvent(world, event);
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
event.end = new Date().getTime();
|
|
250
|
+
event.success = false;
|
|
251
|
+
event.error = {
|
|
252
|
+
type: error.name,
|
|
253
|
+
message: error.message,
|
|
254
|
+
stack: error.stack,
|
|
255
|
+
};
|
|
256
|
+
attachEvent(world, event);
|
|
257
|
+
throw error;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
return originalValue;
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=pw-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-utils.js","sourceRoot":"","sources":["../src/pw-utils.ts"],"names":[],"mappings":"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"}
|
package/out/types.d.ts
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { IFormatterOptions } from '@cucumber/cucumber';
|
|
3
|
+
import StepDefinition from '@cucumber/cucumber/lib/models/step_definition';
|
|
4
|
+
export interface Envelope {
|
|
5
|
+
testRunStarted?: TestRunStarted;
|
|
6
|
+
testRunFinished?: TestRunFinished;
|
|
7
|
+
testRunHookStarted?: TestRunHookStarted;
|
|
8
|
+
testRunHookFinished?: TestRunHookFinished;
|
|
9
|
+
testCaseStarted?: TestCaseStarted;
|
|
10
|
+
testCaseFinished?: TestCaseFinished;
|
|
11
|
+
testStepStarted?: TestStepStarted;
|
|
12
|
+
testStepFinished?: TestStepFinished;
|
|
13
|
+
gherkinDocument?: GherkinDocument;
|
|
14
|
+
testCase?: TestCase;
|
|
15
|
+
pickle?: Pickle;
|
|
16
|
+
stepDefinition?: StepDefinition;
|
|
17
|
+
attachment?: Attachment;
|
|
18
|
+
}
|
|
19
|
+
export interface Attachment {
|
|
20
|
+
testCaseStartedId?: string;
|
|
21
|
+
testStepId?: string;
|
|
22
|
+
body: string;
|
|
23
|
+
mediaType: string;
|
|
24
|
+
contentEncoding?: 'IDENTITY' | 'BASE64';
|
|
25
|
+
fileName?: string;
|
|
26
|
+
source?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface TestRunHookStarted {
|
|
29
|
+
id: string;
|
|
30
|
+
hookId: string;
|
|
31
|
+
testRunStartedId: string;
|
|
32
|
+
timestamp: {
|
|
33
|
+
seconds: number;
|
|
34
|
+
nanos: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface TestRunHookFinished {
|
|
38
|
+
testRunHookStartedId: string;
|
|
39
|
+
result: {
|
|
40
|
+
status: "UNKNOWN" | "PASSED" | "SKIPPED" | "PENDING" | "UNDEFINED" | "AMBIGUOUS" | "FAILED";
|
|
41
|
+
duration?: {
|
|
42
|
+
seconds: number;
|
|
43
|
+
nanos: number;
|
|
44
|
+
};
|
|
45
|
+
message?: string;
|
|
46
|
+
};
|
|
47
|
+
timestamp: {
|
|
48
|
+
seconds: number;
|
|
49
|
+
nanos: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface TestCaseLocation {
|
|
53
|
+
line: number;
|
|
54
|
+
column: number;
|
|
55
|
+
}
|
|
56
|
+
export interface TestCaseTag {
|
|
57
|
+
name: string;
|
|
58
|
+
location: TestCaseLocation;
|
|
59
|
+
}
|
|
60
|
+
export interface TestStep {
|
|
61
|
+
id: string;
|
|
62
|
+
pickleStepId?: string;
|
|
63
|
+
hookId?: string;
|
|
64
|
+
stepDefinitionIds?: string[];
|
|
65
|
+
}
|
|
66
|
+
export interface TestCase {
|
|
67
|
+
id: string;
|
|
68
|
+
pickleId: string;
|
|
69
|
+
testSteps: TestStep[];
|
|
70
|
+
tags: TestCaseTag[];
|
|
71
|
+
}
|
|
72
|
+
export interface GherkinDocumentLocation {
|
|
73
|
+
line: number;
|
|
74
|
+
column: number;
|
|
75
|
+
}
|
|
76
|
+
export interface GherkinTag {
|
|
77
|
+
name: string;
|
|
78
|
+
location: GherkinDocumentLocation;
|
|
79
|
+
}
|
|
80
|
+
export interface GherkinStep {
|
|
81
|
+
location: GherkinDocumentLocation;
|
|
82
|
+
keyword: string;
|
|
83
|
+
text: string;
|
|
84
|
+
docString?: {
|
|
85
|
+
location: GherkinDocumentLocation;
|
|
86
|
+
contentType?: string;
|
|
87
|
+
content: string;
|
|
88
|
+
};
|
|
89
|
+
dataTable?: {
|
|
90
|
+
location: GherkinDocumentLocation;
|
|
91
|
+
rows: {
|
|
92
|
+
location: GherkinDocumentLocation;
|
|
93
|
+
cells: {
|
|
94
|
+
location: GherkinDocumentLocation;
|
|
95
|
+
value: string;
|
|
96
|
+
}[];
|
|
97
|
+
}[];
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export interface GherkinScenarioExample {
|
|
101
|
+
location: GherkinDocumentLocation;
|
|
102
|
+
tags: GherkinTag[];
|
|
103
|
+
keyword: string;
|
|
104
|
+
name: string;
|
|
105
|
+
description: string;
|
|
106
|
+
tableHeader: {
|
|
107
|
+
location: GherkinDocumentLocation;
|
|
108
|
+
cells: {
|
|
109
|
+
location: GherkinDocumentLocation;
|
|
110
|
+
value: string;
|
|
111
|
+
}[];
|
|
112
|
+
};
|
|
113
|
+
tableBody: {
|
|
114
|
+
location: GherkinDocumentLocation;
|
|
115
|
+
cells: {
|
|
116
|
+
location: GherkinDocumentLocation;
|
|
117
|
+
value: string;
|
|
118
|
+
}[];
|
|
119
|
+
}[];
|
|
120
|
+
}
|
|
121
|
+
export interface GherkinScenario {
|
|
122
|
+
location: GherkinDocumentLocation;
|
|
123
|
+
tags: GherkinTag[];
|
|
124
|
+
keyword: string;
|
|
125
|
+
name: string;
|
|
126
|
+
description: string;
|
|
127
|
+
steps: GherkinStep[];
|
|
128
|
+
examples?: GherkinScenarioExample[];
|
|
129
|
+
}
|
|
130
|
+
export interface GherkinFeatureChild {
|
|
131
|
+
scenario?: GherkinScenario;
|
|
132
|
+
}
|
|
133
|
+
export interface GherkinFeature {
|
|
134
|
+
location: GherkinDocumentLocation;
|
|
135
|
+
tags: GherkinTag[];
|
|
136
|
+
language: string;
|
|
137
|
+
keyword: string;
|
|
138
|
+
name: string;
|
|
139
|
+
description: string;
|
|
140
|
+
children: GherkinFeatureChild[];
|
|
141
|
+
}
|
|
142
|
+
export interface GherkinComment {
|
|
143
|
+
location: GherkinDocumentLocation;
|
|
144
|
+
text: string;
|
|
145
|
+
}
|
|
146
|
+
export interface GherkinDocument {
|
|
147
|
+
uri: string;
|
|
148
|
+
feature?: GherkinFeature;
|
|
149
|
+
comments?: GherkinComment[];
|
|
150
|
+
}
|
|
151
|
+
interface PickleLocation {
|
|
152
|
+
line: number;
|
|
153
|
+
column: number;
|
|
154
|
+
}
|
|
155
|
+
interface PickleTag {
|
|
156
|
+
name: string;
|
|
157
|
+
location: PickleLocation;
|
|
158
|
+
}
|
|
159
|
+
interface PickleStepArgument {
|
|
160
|
+
}
|
|
161
|
+
export interface PickleStep {
|
|
162
|
+
id: string;
|
|
163
|
+
text: string;
|
|
164
|
+
type: string;
|
|
165
|
+
arguments: PickleStepArgument[];
|
|
166
|
+
locations: PickleLocation[];
|
|
167
|
+
}
|
|
168
|
+
export interface Pickle {
|
|
169
|
+
id: string;
|
|
170
|
+
uri: string;
|
|
171
|
+
name: string;
|
|
172
|
+
language: string;
|
|
173
|
+
steps: PickleStep[];
|
|
174
|
+
tags: PickleTag[];
|
|
175
|
+
locations: PickleLocation[];
|
|
176
|
+
}
|
|
177
|
+
export interface TestRunStarted {
|
|
178
|
+
timestamp: {
|
|
179
|
+
seconds: number;
|
|
180
|
+
nanos: number;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export interface TestRunFinished {
|
|
184
|
+
timestamp: {
|
|
185
|
+
seconds: number;
|
|
186
|
+
nanos: number;
|
|
187
|
+
};
|
|
188
|
+
success: boolean;
|
|
189
|
+
}
|
|
190
|
+
export interface TestCaseStarted {
|
|
191
|
+
id: string;
|
|
192
|
+
testCaseId: string;
|
|
193
|
+
attempt: number;
|
|
194
|
+
timestamp: {
|
|
195
|
+
seconds: number;
|
|
196
|
+
nanos: number;
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
export interface TestCaseFinished {
|
|
200
|
+
testCaseStartedId: string;
|
|
201
|
+
timestamp: {
|
|
202
|
+
seconds: number;
|
|
203
|
+
nanos: number;
|
|
204
|
+
};
|
|
205
|
+
result: TestResult;
|
|
206
|
+
}
|
|
207
|
+
export interface TestStepStarted {
|
|
208
|
+
testCaseStartedId: string;
|
|
209
|
+
testStepId?: string;
|
|
210
|
+
hookId?: string;
|
|
211
|
+
timestamp: {
|
|
212
|
+
seconds: number;
|
|
213
|
+
nanos: number;
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export interface TestStepFinished {
|
|
217
|
+
testCaseStartedId: string;
|
|
218
|
+
testStepId: string;
|
|
219
|
+
testStepResult: {
|
|
220
|
+
status: 'PASSED' | 'FAILED' | 'SKIPPED' | 'PENDING' | 'UNDEFINED';
|
|
221
|
+
message: string;
|
|
222
|
+
exception: {
|
|
223
|
+
type: string;
|
|
224
|
+
message: string;
|
|
225
|
+
stackTrace: string;
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
timestamp: {
|
|
229
|
+
seconds: number;
|
|
230
|
+
nanos: number;
|
|
231
|
+
};
|
|
232
|
+
result: TestResult;
|
|
233
|
+
}
|
|
234
|
+
export interface TestResult {
|
|
235
|
+
status: 'PASSED' | 'FAILED' | 'SKIPPED' | 'PENDING' | 'UNDEFINED';
|
|
236
|
+
duration?: {
|
|
237
|
+
seconds: number;
|
|
238
|
+
nanos: number;
|
|
239
|
+
};
|
|
240
|
+
message?: string;
|
|
241
|
+
}
|
|
242
|
+
export interface TestStats {
|
|
243
|
+
scenarios: {
|
|
244
|
+
total: number;
|
|
245
|
+
passed: number;
|
|
246
|
+
failed: number;
|
|
247
|
+
skipped: number;
|
|
248
|
+
};
|
|
249
|
+
steps: {
|
|
250
|
+
total: number;
|
|
251
|
+
passed: number;
|
|
252
|
+
failed: number;
|
|
253
|
+
skipped: number;
|
|
254
|
+
pending: number;
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
export interface ParsedTestCase {
|
|
258
|
+
pickle: {
|
|
259
|
+
id: string;
|
|
260
|
+
name: string;
|
|
261
|
+
steps: {
|
|
262
|
+
id: string;
|
|
263
|
+
text: string;
|
|
264
|
+
}[];
|
|
265
|
+
};
|
|
266
|
+
gherkinDocument: {
|
|
267
|
+
feature: {
|
|
268
|
+
name: string;
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
export interface ReporterOptions extends IFormatterOptions {
|
|
273
|
+
eventBroadcaster: EventEmitter;
|
|
274
|
+
parsedTestCaseMap: {
|
|
275
|
+
[key: string]: ParsedTestCase;
|
|
276
|
+
};
|
|
277
|
+
runId?: string;
|
|
278
|
+
instanceId?: string;
|
|
279
|
+
agentId?: string;
|
|
280
|
+
outputDir?: string;
|
|
281
|
+
}
|
|
282
|
+
export {};
|
package/out/types.js
ADDED
package/out/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/out/utils.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CaseResult as CbCaseResult, StepResult as CbStepResult, TestResult as CbTestResult, FailureResult, ResultStatusEnum } from '@cloudbeat/types';
|
|
2
|
+
export declare function generateResultFile(result: CbTestResult, filePath: string): void;
|
|
3
|
+
export declare function getResultFilePath(outputDir?: string): string;
|
|
4
|
+
export declare function generateId(): string;
|
|
5
|
+
export declare function determineTestCaseStatus(result: CbCaseResult): ResultStatusEnum;
|
|
6
|
+
export declare function getFailureFromException(exception: any): FailureResult | undefined;
|
|
7
|
+
export declare function getFailureFromMessage(message: string): FailureResult | undefined;
|
|
8
|
+
export declare function getGherkinStepExtraType(type: string): any;
|
|
9
|
+
export declare function addPlaywrightStepsFromAttachments(cbStepResult: CbStepResult, attachments: any): void;
|
package/out/utils.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateResultFile = generateResultFile;
|
|
7
|
+
exports.getResultFilePath = getResultFilePath;
|
|
8
|
+
exports.generateId = generateId;
|
|
9
|
+
exports.determineTestCaseStatus = determineTestCaseStatus;
|
|
10
|
+
exports.getFailureFromException = getFailureFromException;
|
|
11
|
+
exports.getFailureFromMessage = getFailureFromMessage;
|
|
12
|
+
exports.getGherkinStepExtraType = getGherkinStepExtraType;
|
|
13
|
+
exports.addPlaywrightStepsFromAttachments = addPlaywrightStepsFromAttachments;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const types_1 = require("@cloudbeat/types");
|
|
17
|
+
const uuid_1 = require("uuid");
|
|
18
|
+
const CB_TEST_RESULT_FILE_NAME = '.CB_TEST_RESULTS.json';
|
|
19
|
+
function generateResultFile(result, filePath) {
|
|
20
|
+
const fileContent = JSON.stringify(result, null, 4);
|
|
21
|
+
fs_1.default.writeFileSync(filePath, fileContent);
|
|
22
|
+
}
|
|
23
|
+
function getResultFilePath(outputDir) {
|
|
24
|
+
let resultFileDir;
|
|
25
|
+
if (outputDir) {
|
|
26
|
+
if (!path_1.default.isAbsolute(outputDir)) {
|
|
27
|
+
outputDir = path_1.default.join(process.cwd(), outputDir);
|
|
28
|
+
}
|
|
29
|
+
if (!fs_1.default.existsSync(outputDir)) {
|
|
30
|
+
fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
resultFileDir = outputDir;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
resultFileDir = process.cwd();
|
|
36
|
+
}
|
|
37
|
+
return path_1.default.join(resultFileDir, CB_TEST_RESULT_FILE_NAME);
|
|
38
|
+
}
|
|
39
|
+
function generateId() {
|
|
40
|
+
return (0, uuid_1.v4)();
|
|
41
|
+
}
|
|
42
|
+
function determineTestCaseStatus(result) {
|
|
43
|
+
var _a;
|
|
44
|
+
if (!result.steps) {
|
|
45
|
+
return types_1.ResultStatusEnum.PASSED;
|
|
46
|
+
}
|
|
47
|
+
const hasFailedSteps = (_a = result.steps) === null || _a === void 0 ? void 0 : _a.some(step => step.status === types_1.ResultStatusEnum.FAILED);
|
|
48
|
+
return hasFailedSteps ? types_1.ResultStatusEnum.FAILED : types_1.ResultStatusEnum.PASSED;
|
|
49
|
+
}
|
|
50
|
+
function getFailureFromException(exception) {
|
|
51
|
+
if (!exception) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const failure = {
|
|
55
|
+
type: 'CUCUMBER_ERROR',
|
|
56
|
+
};
|
|
57
|
+
if (exception.type === 'TimeoutError') {
|
|
58
|
+
failure.type = 'TIMEOUT_ERROR';
|
|
59
|
+
}
|
|
60
|
+
failure.subtype = exception.type;
|
|
61
|
+
failure.message = exception.message;
|
|
62
|
+
failure.stacktrace = exception.stackTrace;
|
|
63
|
+
return failure;
|
|
64
|
+
}
|
|
65
|
+
function getFailureFromMessage(message) {
|
|
66
|
+
if (!message) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const failure = {
|
|
70
|
+
type: 'CUCUMBER_ERROR',
|
|
71
|
+
message,
|
|
72
|
+
};
|
|
73
|
+
return failure;
|
|
74
|
+
}
|
|
75
|
+
function getGherkinStepExtraType(type) {
|
|
76
|
+
switch (type) {
|
|
77
|
+
case 'Action':
|
|
78
|
+
return 'WHEN';
|
|
79
|
+
case 'Context':
|
|
80
|
+
return 'GIVEN';
|
|
81
|
+
case 'Outcome':
|
|
82
|
+
return 'THEN';
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
function addPlaywrightStepsFromAttachments(cbStepResult, attachments) {
|
|
87
|
+
var _a;
|
|
88
|
+
if (!attachments || !attachments.length) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
for (const attachment of attachments) {
|
|
92
|
+
if (attachment.mediaType !== 'application/json;x-origin=cloudbeat') {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const event = JSON.parse(attachment.body);
|
|
97
|
+
let stepName;
|
|
98
|
+
const extra = {};
|
|
99
|
+
if (event.type === 'locator_action' || event.type === 'page_action') {
|
|
100
|
+
stepName = `${event.method} "${event.selector}"`;
|
|
101
|
+
}
|
|
102
|
+
else if (event.type === 'assertion') {
|
|
103
|
+
stepName = `${event.method.replace('expect.', '')}`;
|
|
104
|
+
extra.assert = {
|
|
105
|
+
actual: event.actual,
|
|
106
|
+
expected: event.expected,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
let failure = undefined;
|
|
113
|
+
if (event.error) {
|
|
114
|
+
failure = {
|
|
115
|
+
type: event.type === 'assertion' ? 'ASSERTION_ERROR' : 'PLAYWRIGHT_ERROR',
|
|
116
|
+
subtype: event.error.type,
|
|
117
|
+
message: event.error.message,
|
|
118
|
+
stacktrace: event.error.stack,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
(_a = cbStepResult.steps) === null || _a === void 0 ? void 0 : _a.push({
|
|
122
|
+
id: generateId(),
|
|
123
|
+
name: stepName,
|
|
124
|
+
type: event.type === 'assertion' ? types_1.StepTypeEnum.ASSERTION : types_1.StepTypeEnum.GENERAL,
|
|
125
|
+
startTime: event.start,
|
|
126
|
+
endTime: event.end,
|
|
127
|
+
duration: event.end - event.start,
|
|
128
|
+
extra: extra,
|
|
129
|
+
status: event.success ? types_1.ResultStatusEnum.PASSED : types_1.ResultStatusEnum.FAILED,
|
|
130
|
+
failure,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (_b) { }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=utils.js.map
|
package/out/utils.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;AAcA,gDAGC;AAED,8CAgBC;AAED,gCAEC;AAED,0DAMC;AAED,0DAcC;AAED,sDASC;AAED,0DAUC;AAGD,8EAiDC;AA1ID,4CAAoB;AACpB,gDAAwB;AACxB,4CAO0B;AAC1B,+BAAoC;AAEpC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAEzD,SAAgB,kBAAkB,CAAC,MAAoB,EAAE,QAAgB;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAkB;IAChD,IAAI,aAAa,CAAC;IAClB,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,aAAa,GAAG,SAAS,CAAC;IAC9B,CAAC;SACI,CAAC;QACF,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,UAAU;IACtB,OAAO,IAAA,SAAM,GAAE,CAAC;AACpB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAoB;;IACxD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,wBAAgB,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,MAAM,cAAc,GAAG,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,wBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3F,OAAO,cAAc,CAAC,CAAC,CAAC,wBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAgB,CAAC,MAAM,CAAC;AAC9E,CAAC;AAED,SAAgB,uBAAuB,CAAC,SAAc;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAkB;QAC3B,IAAI,EAAE,gBAAgB;KACzB,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;IACjC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IACpC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IAC1C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAe;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAkB;QAC3B,IAAI,EAAE,gBAAgB;QACtB,OAAO;KACV,CAAC;IACF,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAChD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,QAAQ;YACT,OAAO,MAAM,CAAC;QAClB,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,SAAS;YACV,OAAO,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD,SAAgB,iCAAiC,CAAC,YAA0B,EAAE,WAAgB;;IAC1F,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO;IACX,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,KAAK,qCAAqC,EAAE,CAAC;YACjE,SAAS;QACb,CAAC;QACD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAc,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC;YACb,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClE,QAAQ,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC;YACrD,CAAC;iBACI,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,QAAQ,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnD,KAAa,CAAC,MAAM,GAAG;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBAC3B,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,SAAS;YACb,CAAC;YAED,IAAI,OAAO,GAA8B,SAAS,CAAC;YACnD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,GAAG;oBACN,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB;oBACzE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;oBACzB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;oBAC5B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;iBAChC,CAAC;YACN,CAAC;YACD,MAAA,YAAY,CAAC,KAAK,0CAAE,IAAI,CAAC;gBACrB,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAY,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAY,CAAC,OAAO;gBAChF,SAAS,EAAE,KAAK,CAAC,KAAe;gBAChC,OAAO,EAAE,KAAK,CAAC,GAAa;gBAC5B,QAAQ,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK;gBACjC,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAgB,CAAC,MAAM;gBACzE,OAAO;aACV,CAAC,CAAC;QACP,CAAC;QACD,WAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloudbeat/cucumber",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"description": "CloudBeat Test Reporting Kit for Cucumber.js",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cloudbeat",
|
|
7
|
+
"cucumber",
|
|
8
|
+
"test reporting"
|
|
9
|
+
],
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "CBNR Cloud Solutions LTD",
|
|
12
|
+
"email": "info@cloudbeat.io",
|
|
13
|
+
"url": "https://cloudbeat.io"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://cloudbeat.io",
|
|
16
|
+
"license": "GPL-3.0",
|
|
17
|
+
"private": false,
|
|
18
|
+
"main": "out/index",
|
|
19
|
+
"types": "out/index",
|
|
20
|
+
"directories": {
|
|
21
|
+
"lib": "lib",
|
|
22
|
+
"test": "__tests__"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"out"
|
|
26
|
+
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/cloudbeat-io/cb-kit-nodejs.git"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "npm run clean && npm run compile",
|
|
33
|
+
"compile": "tsc -b",
|
|
34
|
+
"lint": "eslint ./src --ext .js",
|
|
35
|
+
"clean": "rimraf ./dist ./out tsconfig.tsbuildinfo"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public",
|
|
39
|
+
"registry": "https://registry.npmjs.org/"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"@cucumber/cucumber": "^12.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@cloudbeat/types": "^1.0.7",
|
|
46
|
+
"debug": "^4.3.4",
|
|
47
|
+
"moment": "^2.30.1"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@cucumber/cucumber": "^12.0.0",
|
|
51
|
+
"@types/node": "^24.0.13",
|
|
52
|
+
"typescript": "^5.8.3"
|
|
53
|
+
}
|
|
54
|
+
}
|