@serenity-js/playwright-test 3.31.17 → 3.32.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/CHANGELOG.md +37 -0
- package/README.md +6 -5
- package/lib/api/PlaywrightTestConfig.d.ts +7 -6
- package/lib/api/PlaywrightTestConfig.d.ts.map +1 -1
- package/lib/api/WorkerEventStreamReader.d.ts +13 -0
- package/lib/api/WorkerEventStreamReader.d.ts.map +1 -0
- package/lib/api/WorkerEventStreamReader.js +58 -0
- package/lib/api/WorkerEventStreamReader.js.map +1 -0
- package/lib/api/WorkerEventStreamWriter.d.ts +24 -0
- package/lib/api/WorkerEventStreamWriter.d.ts.map +1 -0
- package/lib/api/WorkerEventStreamWriter.js +86 -0
- package/lib/api/WorkerEventStreamWriter.js.map +1 -0
- package/lib/api/index.d.ts +1 -2
- package/lib/api/index.d.ts.map +1 -1
- package/lib/api/index.js +1 -2
- package/lib/api/index.js.map +1 -1
- package/lib/api/serenity-fixtures.d.ts +377 -0
- package/lib/api/serenity-fixtures.d.ts.map +1 -0
- package/lib/api/{SerenityOptions.js → serenity-fixtures.js} +1 -1
- package/lib/api/serenity-fixtures.js.map +1 -0
- package/lib/api/test-api.d.ts +27 -15
- package/lib/api/test-api.d.ts.map +1 -1
- package/lib/api/test-api.js +126 -104
- package/lib/api/test-api.js.map +1 -1
- package/lib/events/EventFactory.d.ts +16 -0
- package/lib/events/EventFactory.d.ts.map +1 -0
- package/lib/events/EventFactory.js +94 -0
- package/lib/events/EventFactory.js.map +1 -0
- package/lib/events/PlaywrightSceneId.d.ts +7 -0
- package/lib/events/PlaywrightSceneId.d.ts.map +1 -0
- package/lib/events/PlaywrightSceneId.js +19 -0
- package/lib/events/PlaywrightSceneId.js.map +1 -0
- package/lib/events/index.d.ts +3 -0
- package/lib/events/index.d.ts.map +1 -0
- package/lib/events/index.js +19 -0
- package/lib/events/index.js.map +1 -0
- package/lib/reporter/PlaywrightErrorParser.d.ts +7 -0
- package/lib/reporter/PlaywrightErrorParser.d.ts.map +1 -0
- package/lib/reporter/PlaywrightErrorParser.js +28 -0
- package/lib/reporter/PlaywrightErrorParser.js.map +1 -0
- package/lib/reporter/PlaywrightEventBuffer.d.ts +25 -0
- package/lib/reporter/PlaywrightEventBuffer.d.ts.map +1 -0
- package/lib/reporter/PlaywrightEventBuffer.js +147 -0
- package/lib/reporter/PlaywrightEventBuffer.js.map +1 -0
- package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts +8 -0
- package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts.map +1 -0
- package/lib/reporter/PlaywrightTestSceneIdFactory.js +15 -0
- package/lib/reporter/PlaywrightTestSceneIdFactory.js.map +1 -0
- package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts +15 -22
- package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts.map +1 -1
- package/lib/reporter/SerenityReporterForPlaywrightTest.js +62 -163
- package/lib/reporter/SerenityReporterForPlaywrightTest.js.map +1 -1
- package/lib/reporter/index.d.ts +0 -2
- package/lib/reporter/index.d.ts.map +1 -1
- package/lib/reporter/index.js +0 -2
- package/lib/reporter/index.js.map +1 -1
- package/package.json +9 -9
- package/src/api/PlaywrightTestConfig.ts +7 -6
- package/src/api/WorkerEventStreamReader.ts +27 -0
- package/src/api/WorkerEventStreamWriter.ts +117 -0
- package/src/api/index.ts +1 -2
- package/src/api/serenity-fixtures.ts +392 -0
- package/src/api/test-api.ts +187 -99
- package/src/events/EventFactory.ts +204 -0
- package/src/events/PlaywrightSceneId.ts +20 -0
- package/src/events/index.ts +2 -0
- package/src/reporter/PlaywrightErrorParser.ts +35 -0
- package/src/reporter/PlaywrightEventBuffer.ts +251 -0
- package/src/reporter/PlaywrightTestSceneIdFactory.ts +14 -0
- package/src/reporter/SerenityReporterForPlaywrightTest.ts +89 -250
- package/src/reporter/index.ts +0 -2
- package/lib/api/SerenityFixtures.d.ts +0 -130
- package/lib/api/SerenityFixtures.d.ts.map +0 -1
- package/lib/api/SerenityFixtures.js +0 -3
- package/lib/api/SerenityFixtures.js.map +0 -1
- package/lib/api/SerenityOptions.d.ts +0 -271
- package/lib/api/SerenityOptions.d.ts.map +0 -1
- package/lib/api/SerenityOptions.js.map +0 -1
- package/lib/reporter/DomainEventBuffer.d.ts +0 -11
- package/lib/reporter/DomainEventBuffer.d.ts.map +0 -1
- package/lib/reporter/DomainEventBuffer.js +0 -24
- package/lib/reporter/DomainEventBuffer.js.map +0 -1
- package/lib/reporter/PlaywrightAttachments.d.ts +0 -2
- package/lib/reporter/PlaywrightAttachments.d.ts.map +0 -1
- package/lib/reporter/PlaywrightAttachments.js +0 -5
- package/lib/reporter/PlaywrightAttachments.js.map +0 -1
- package/src/api/SerenityFixtures.ts +0 -132
- package/src/api/SerenityOptions.ts +0 -277
- package/src/reporter/DomainEventBuffer.ts +0 -28
- package/src/reporter/PlaywrightAttachments.ts +0 -1
package/lib/api/test-api.js
CHANGED
|
@@ -1,40 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
35
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
6
|
exports.useFixtures = exports.expect = exports.afterAll = exports.afterEach = exports.beforeEach = exports.beforeAll = exports.describe = exports.test = exports.it = exports.fixtures = void 0;
|
|
37
7
|
exports.useBase = useBase;
|
|
8
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
38
11
|
const test_1 = require("@playwright/test");
|
|
39
12
|
const core_1 = require("@serenity-js/core");
|
|
40
13
|
const events_1 = require("@serenity-js/core/lib/events");
|
|
@@ -42,29 +15,17 @@ const model_1 = require("@serenity-js/core/lib/model");
|
|
|
42
15
|
const playwright_1 = require("@serenity-js/playwright");
|
|
43
16
|
const rest_1 = require("@serenity-js/rest");
|
|
44
17
|
const web_1 = require("@serenity-js/web");
|
|
45
|
-
const os = __importStar(require("os"));
|
|
46
18
|
const tiny_types_1 = require("tiny-types");
|
|
19
|
+
const events_2 = require("../events");
|
|
47
20
|
const reporter_1 = require("../reporter");
|
|
21
|
+
const PlaywrightTestSceneIdFactory_1 = require("../reporter/PlaywrightTestSceneIdFactory");
|
|
48
22
|
const PerformActivitiesAsPlaywrightSteps_1 = require("./PerformActivitiesAsPlaywrightSteps");
|
|
49
|
-
const
|
|
23
|
+
const WorkerEventStreamWriter_1 = require("./WorkerEventStreamWriter");
|
|
50
24
|
exports.fixtures = {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
await use(core_1.Cast.where(actor => actor.whoCan(playwright_1.BrowseTheWebWithPlaywright.usingPage(page, contextOptions), core_1.TakeNotes.usingAnEmptyNotepad(), rest_1.CallAnApi.using({
|
|
55
|
-
baseURL: baseURL,
|
|
56
|
-
headers: extraHTTPHeaders,
|
|
57
|
-
proxy: proxy && proxy?.server
|
|
58
|
-
? asProxyConfig(proxy)
|
|
59
|
-
: undefined,
|
|
60
|
-
}))));
|
|
61
|
-
},
|
|
62
|
-
{ option: true },
|
|
25
|
+
extraContextOptions: [
|
|
26
|
+
{ defaultNavigationWaitUntil: 'load' },
|
|
27
|
+
{ option: true }
|
|
63
28
|
],
|
|
64
|
-
playwright: async ({ playwright }, use) => {
|
|
65
|
-
await serenitySelectorEngines.ensureRegisteredWith(playwright.selectors);
|
|
66
|
-
await use(playwright);
|
|
67
|
-
},
|
|
68
29
|
defaultActorName: [
|
|
69
30
|
'Serena',
|
|
70
31
|
{ option: true },
|
|
@@ -78,61 +39,123 @@ exports.fixtures = {
|
|
|
78
39
|
{ option: true },
|
|
79
40
|
],
|
|
80
41
|
crew: [
|
|
81
|
-
[
|
|
82
|
-
web_1.Photographer.whoWill(web_1.TakePhotosOfFailures)
|
|
83
|
-
],
|
|
42
|
+
[web_1.Photographer.whoWill(web_1.TakePhotosOfFailures)],
|
|
84
43
|
{ option: true },
|
|
85
44
|
],
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
45
|
+
actors: [
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
47
|
+
async ({ extraContextOptions, baseURL, extraHTTPHeaders, page, proxy }, use) => {
|
|
48
|
+
await use(core_1.Cast.where(actor => actor.whoCan(playwright_1.BrowseTheWebWithPlaywright.usingPage(page, extraContextOptions), core_1.TakeNotes.usingAnEmptyNotepad(), rest_1.CallAnApi.using({
|
|
49
|
+
baseURL: baseURL,
|
|
50
|
+
headers: extraHTTPHeaders,
|
|
51
|
+
proxy: proxy && proxy?.server
|
|
52
|
+
? asProxyConfig(proxy)
|
|
53
|
+
: undefined,
|
|
54
|
+
}))));
|
|
55
|
+
},
|
|
56
|
+
{ option: true },
|
|
57
|
+
],
|
|
58
|
+
// eslint-disable-next-line no-empty-pattern,@typescript-eslint/explicit-module-boundary-types
|
|
59
|
+
platform: [async ({}, use) => {
|
|
60
|
+
const platform = node_os_1.default.platform();
|
|
61
|
+
// https://nodejs.org/api/process.html#process_process_platform
|
|
62
|
+
const name = platform === 'win32'
|
|
63
|
+
? 'Windows'
|
|
64
|
+
: (platform === 'darwin' ? 'macOS' : 'Linux');
|
|
65
|
+
await use({ name, version: node_os_1.default.release() });
|
|
66
|
+
}, { scope: 'worker' }],
|
|
67
|
+
diffFormatterInternal: [
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,no-empty-pattern
|
|
69
|
+
async ({}, use) => {
|
|
70
|
+
const diffFormatter = new core_1.AnsiDiffFormatter();
|
|
71
|
+
await use(diffFormatter);
|
|
72
|
+
},
|
|
73
|
+
{ scope: 'worker', box: true }
|
|
74
|
+
],
|
|
75
|
+
sceneIdFactoryInternal: [
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,no-empty-pattern
|
|
77
|
+
async ({}, use) => {
|
|
78
|
+
await use(new PlaywrightTestSceneIdFactory_1.PlaywrightTestSceneIdFactory());
|
|
79
|
+
},
|
|
80
|
+
{ scope: 'worker', box: true },
|
|
81
|
+
],
|
|
82
|
+
serenity: [
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
84
|
+
async ({ playwright, sceneIdFactoryInternal }, use, workerInfo) => {
|
|
85
|
+
const clock = new core_1.Clock();
|
|
86
|
+
const cwd = node_process_1.default.cwd();
|
|
87
|
+
const serenity = new core_1.Serenity(clock, cwd, sceneIdFactoryInternal);
|
|
88
|
+
const serenitySelectorEngines = new playwright_1.SerenitySelectorEngines();
|
|
89
|
+
await serenitySelectorEngines.ensureRegisteredWith(playwright.selectors);
|
|
90
|
+
await use(serenity);
|
|
91
|
+
},
|
|
92
|
+
{ scope: 'worker', box: true }
|
|
93
|
+
],
|
|
94
|
+
eventStreamWriterInternal: [
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,no-empty-pattern
|
|
96
|
+
async ({}, use, workerInfo) => {
|
|
97
|
+
const serenityOutputDirectory = node_path_1.default.join(workerInfo.project.outputDir, 'serenity');
|
|
98
|
+
const eventStreamWriter = new WorkerEventStreamWriter_1.WorkerEventStreamWriter(serenityOutputDirectory, workerInfo);
|
|
99
|
+
await use(eventStreamWriter);
|
|
100
|
+
},
|
|
101
|
+
{ scope: 'worker', box: true },
|
|
102
|
+
],
|
|
103
|
+
configureWorkerInternal: [
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
105
|
+
async ({ diffFormatterInternal, eventStreamWriterInternal, sceneIdFactoryInternal, serenity, browser }, use, info) => {
|
|
106
|
+
serenity.configure({
|
|
107
|
+
actors: core_1.Cast.where(actor => actor.whoCan(playwright_1.BrowseTheWebWithPlaywright.using(browser), core_1.TakeNotes.usingAnEmptyNotepad())),
|
|
108
|
+
crew: [
|
|
109
|
+
eventStreamWriterInternal,
|
|
110
|
+
],
|
|
111
|
+
diffFormatter: diffFormatterInternal,
|
|
114
112
|
});
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
sceneIdFactoryInternal.setTestId(`worker-${info.workerIndex}`);
|
|
114
|
+
const workerBeforeAllSceneId = serenity.assignNewSceneId();
|
|
115
|
+
await use(void 0);
|
|
116
|
+
await eventStreamWriterInternal.persistAll(workerBeforeAllSceneId);
|
|
117
|
+
},
|
|
118
|
+
{ scope: 'worker', auto: true, box: true },
|
|
119
|
+
],
|
|
120
|
+
configureScenarioInternal: [
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
122
|
+
async ({ actors, browser, browserName, crew, cueTimeout, diffFormatterInternal, eventStreamWriterInternal, interactionTimeout, platform, sceneIdFactoryInternal, serenity }, use, info) => {
|
|
123
|
+
serenity.configure({
|
|
124
|
+
actors: asCast(actors),
|
|
125
|
+
diffFormatter: diffFormatterInternal,
|
|
126
|
+
cueTimeout: asDuration(cueTimeout),
|
|
127
|
+
interactionTimeout: asDuration(interactionTimeout),
|
|
128
|
+
crew: [
|
|
129
|
+
...crew,
|
|
130
|
+
new reporter_1.PlaywrightStepReporter(info),
|
|
131
|
+
],
|
|
132
|
+
});
|
|
133
|
+
const playwrightSceneId = events_2.PlaywrightSceneId.from(info.project.name, { id: info.testId, repeatEachIndex: info.repeatEachIndex }, { retry: info.retry });
|
|
134
|
+
sceneIdFactoryInternal.setTestId(playwrightSceneId.value);
|
|
135
|
+
const sceneId = serenity.assignNewSceneId();
|
|
136
|
+
serenity.announce(new events_1.SceneTagged(sceneId, new model_1.PlatformTag(platform.name, platform.version), serenity.currentTime()), new events_1.SceneTagged(sceneId, new model_1.BrowserTag(browserName, browser.version()), serenity.currentTime()));
|
|
137
|
+
await use(void 0);
|
|
138
|
+
try {
|
|
139
|
+
serenity.announce(new events_1.SceneFinishes(sceneId, serenity.currentTime()));
|
|
140
|
+
await serenity.waitForNextCue();
|
|
117
141
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
actorCalled:
|
|
125
|
-
|
|
126
|
-
serenity
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
},
|
|
142
|
+
finally {
|
|
143
|
+
await eventStreamWriterInternal.persist(playwrightSceneId.value);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
{ auto: true, box: true, }
|
|
147
|
+
],
|
|
148
|
+
actorCalled: [
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
150
|
+
async ({ serenity }, use) => {
|
|
151
|
+
const actorCalled = (name) => {
|
|
152
|
+
const actor = serenity.theActorCalled(name);
|
|
153
|
+
return actor.whoCan(new PerformActivitiesAsPlaywrightSteps_1.PerformActivitiesAsPlaywrightSteps(actor, serenity, exports.it));
|
|
154
|
+
};
|
|
155
|
+
await use(actorCalled);
|
|
156
|
+
},
|
|
157
|
+
{ scope: 'worker' },
|
|
158
|
+
],
|
|
136
159
|
actor: async ({ actorCalled, defaultActorName }, use) => {
|
|
137
160
|
await use(actorCalled(defaultActorName));
|
|
138
161
|
},
|
|
@@ -409,8 +432,7 @@ exports.useFixtures = api.useFixtures;
|
|
|
409
432
|
* @param baseTest
|
|
410
433
|
*/
|
|
411
434
|
function useBase(baseTest) {
|
|
412
|
-
return createTestApi(baseTest)
|
|
413
|
-
.useFixtures(exports.fixtures);
|
|
435
|
+
return createTestApi(baseTest).useFixtures(exports.fixtures);
|
|
414
436
|
}
|
|
415
437
|
/**
|
|
416
438
|
* @private
|
package/lib/api/test-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-api.js","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-api.js","sourceRoot":"","sources":["../../src/api/test-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type TestCase, type TestResult } from '@playwright/test/reporter';
|
|
2
|
+
import { type DomainEvent, SceneFinished } from '@serenity-js/core/lib/events';
|
|
3
|
+
import { Path } from '@serenity-js/core/lib/io';
|
|
4
|
+
import type { Outcome } from '@serenity-js/core/lib/model';
|
|
5
|
+
export declare class EventFactory {
|
|
6
|
+
private requirementsHierarchy;
|
|
7
|
+
constructor(rootDirectory: Path);
|
|
8
|
+
createSceneStartEvents(test: TestCase, result: TestResult): DomainEvent[];
|
|
9
|
+
private createSceneSequenceEvents;
|
|
10
|
+
createSceneFinishedEvent(test: TestCase, result: TestResult, scenarioOutcome: Outcome): SceneFinished;
|
|
11
|
+
private uniqueTags;
|
|
12
|
+
private scenarioDetailsFrom;
|
|
13
|
+
private scenarioMetadataFrom;
|
|
14
|
+
private tagsFrom;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=EventFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventFactory.d.ts","sourceRoot":"","sources":["../../src/events/EventFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EACH,KAAK,WAAW,EAChB,aAAa,EAOhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAkC,IAAI,EAAyB,MAAM,0BAA0B,CAAC;AACvG,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,6BAA6B,CAAC;AAahE,qBAAa,YAAY;IACrB,OAAO,CAAC,qBAAqB,CAAwB;gBAEzC,aAAa,EAAE,IAAI;IAM/B,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE;IA4CzE,OAAO,CAAC,yBAAyB;IAgCjC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,GAAG,aAAa;IAerG,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,QAAQ;CAwBnB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventFactory = void 0;
|
|
4
|
+
const core_1 = require("@serenity-js/core");
|
|
5
|
+
const events_1 = require("@serenity-js/core/lib/events");
|
|
6
|
+
const io_1 = require("@serenity-js/core/lib/io");
|
|
7
|
+
const model_1 = require("@serenity-js/core/lib/model");
|
|
8
|
+
const PlaywrightSceneId_1 = require("./PlaywrightSceneId");
|
|
9
|
+
class EventFactory {
|
|
10
|
+
requirementsHierarchy;
|
|
11
|
+
constructor(rootDirectory) {
|
|
12
|
+
this.requirementsHierarchy = new io_1.RequirementsHierarchy(new io_1.FileSystem(rootDirectory));
|
|
13
|
+
}
|
|
14
|
+
createSceneStartEvents(test, result) {
|
|
15
|
+
const sceneId = PlaywrightSceneId_1.PlaywrightSceneId.from(test.parent.project()?.name, test, result);
|
|
16
|
+
const startTime = new core_1.Timestamp(result.startTime);
|
|
17
|
+
const project = test.parent.project();
|
|
18
|
+
const projectName = project?.name ?? '';
|
|
19
|
+
const scenarioDetails = this.scenarioDetailsFrom(test);
|
|
20
|
+
const allTags = this.tagsFrom(scenarioDetails, test.tags);
|
|
21
|
+
if (projectName) {
|
|
22
|
+
allTags.push(new model_1.ProjectTag(projectName));
|
|
23
|
+
}
|
|
24
|
+
const events = [];
|
|
25
|
+
if (test.retries > 0) {
|
|
26
|
+
events.push(...this.createSceneSequenceEvents(sceneId, startTime, scenarioDetails, test, result));
|
|
27
|
+
}
|
|
28
|
+
events.push(new events_1.SceneStarts(sceneId, scenarioDetails, startTime), new events_1.TestRunnerDetected(sceneId, new model_1.Name('Playwright'), startTime), ...allTags.map(tag => new events_1.SceneTagged(sceneId, tag, startTime)));
|
|
29
|
+
return events;
|
|
30
|
+
}
|
|
31
|
+
createSceneSequenceEvents(sceneId, startTime, scenarioDetails, test, result) {
|
|
32
|
+
const attempt = result.retry + 1;
|
|
33
|
+
const parameters = {
|
|
34
|
+
Retries: `Attempt #${attempt}`
|
|
35
|
+
};
|
|
36
|
+
return [
|
|
37
|
+
new events_1.SceneSequenceDetected(sceneId, scenarioDetails, startTime),
|
|
38
|
+
new events_1.SceneTemplateDetected(sceneId, new model_1.Description(''), startTime),
|
|
39
|
+
new events_1.SceneParametersDetected(sceneId, scenarioDetails, new model_1.ScenarioParameters(new model_1.Name(''), new model_1.Description(`Max retries: ${test.retries}`), parameters)),
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
createSceneFinishedEvent(test, result, scenarioOutcome) {
|
|
43
|
+
const sceneId = PlaywrightSceneId_1.PlaywrightSceneId.from(test.parent.project()?.name, test, result);
|
|
44
|
+
const duration = core_1.Duration.ofMilliseconds(result.duration);
|
|
45
|
+
const sceneEndTime = new core_1.Timestamp(result.startTime).plus(duration);
|
|
46
|
+
const scenarioDetails = this.scenarioDetailsFrom(test);
|
|
47
|
+
return new events_1.SceneFinished(sceneId, scenarioDetails, scenarioOutcome, sceneEndTime);
|
|
48
|
+
}
|
|
49
|
+
uniqueTags(...tags) {
|
|
50
|
+
const uniqueTags = {};
|
|
51
|
+
for (const tag of tags) {
|
|
52
|
+
const { name, type } = tag.toJSON();
|
|
53
|
+
const key = `${name} ${type}`;
|
|
54
|
+
uniqueTags[key] = tag;
|
|
55
|
+
}
|
|
56
|
+
return Object.values(uniqueTags);
|
|
57
|
+
}
|
|
58
|
+
scenarioDetailsFrom(test) {
|
|
59
|
+
const { featureName, name } = this.scenarioMetadataFrom(test);
|
|
60
|
+
const { file, line, column } = test.location;
|
|
61
|
+
const nameWithoutTags = model_1.Tags.stripFrom(name);
|
|
62
|
+
const repetitionSuffix = test.repeatEachIndex
|
|
63
|
+
? ` - Repetition ${test.repeatEachIndex}`
|
|
64
|
+
: '';
|
|
65
|
+
const scenarioName = `${nameWithoutTags}${repetitionSuffix}`;
|
|
66
|
+
return new model_1.ScenarioDetails(new model_1.Name(scenarioName), new model_1.Category(model_1.Tags.stripFrom(featureName)), new io_1.FileSystemLocation(io_1.Path.from(file), line, column));
|
|
67
|
+
}
|
|
68
|
+
scenarioMetadataFrom(test) {
|
|
69
|
+
const [root_, browserName_, fileName, describeOrItBlockTitle, ...nestedTitles] = test.titlePath();
|
|
70
|
+
const scenarioName = nestedTitles.join(' ').trim();
|
|
71
|
+
const name = scenarioName || describeOrItBlockTitle;
|
|
72
|
+
const featureName = scenarioName ? describeOrItBlockTitle : fileName;
|
|
73
|
+
return {
|
|
74
|
+
featureName,
|
|
75
|
+
name,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
tagsFrom(scenarioDetails, extraTagValues) {
|
|
79
|
+
const tagsFromRequirementsHierarchy = this.requirementsHierarchy.requirementTagsFor(scenarioDetails.location.path, scenarioDetails.category.value);
|
|
80
|
+
const tagsFromTitle = model_1.Tags.from([
|
|
81
|
+
scenarioDetails.category.value,
|
|
82
|
+
scenarioDetails.name.value,
|
|
83
|
+
].join(' '));
|
|
84
|
+
const extraTags = extraTagValues
|
|
85
|
+
.filter(Boolean)
|
|
86
|
+
.flatMap(tagValue => model_1.Tags.from(tagValue));
|
|
87
|
+
return [
|
|
88
|
+
...tagsFromRequirementsHierarchy,
|
|
89
|
+
...this.uniqueTags(...tagsFromTitle, ...extraTags)
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.EventFactory = EventFactory;
|
|
94
|
+
//# sourceMappingURL=EventFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventFactory.js","sourceRoot":"","sources":["../../src/events/EventFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FullProject, TestCase, TestResult } from '@playwright/test/reporter';
|
|
2
|
+
import { CorrelationId } from '@serenity-js/core/lib/model';
|
|
3
|
+
export declare class PlaywrightSceneId extends CorrelationId {
|
|
4
|
+
static fromJSON(v: string): CorrelationId;
|
|
5
|
+
static from(projectName: FullProject['name'], test: Pick<TestCase, 'id' | 'repeatEachIndex'>, result: Pick<TestResult, 'retry'>): CorrelationId;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=PlaywrightSceneId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightSceneId.d.ts","sourceRoot":"","sources":["../../src/events/PlaywrightSceneId.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBAAa,iBAAkB,SAAQ,aAAa;WAEhC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa;IAIlD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,aAAa;CAQlJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlaywrightSceneId = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const model_1 = require("@serenity-js/core/lib/model");
|
|
6
|
+
class PlaywrightSceneId extends model_1.CorrelationId {
|
|
7
|
+
static fromJSON(v) {
|
|
8
|
+
return new PlaywrightSceneId(v);
|
|
9
|
+
}
|
|
10
|
+
static from(projectName, test, result) {
|
|
11
|
+
const projectId = (0, node_crypto_1.createHash)('sha1')
|
|
12
|
+
.update(projectName)
|
|
13
|
+
.digest('hex')
|
|
14
|
+
.slice(0, 10);
|
|
15
|
+
return new PlaywrightSceneId(`${test.id}-${projectId}-${test.repeatEachIndex}-${result.retry}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.PlaywrightSceneId = PlaywrightSceneId;
|
|
19
|
+
//# sourceMappingURL=PlaywrightSceneId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightSceneId.js","sourceRoot":"","sources":["../../src/events/PlaywrightSceneId.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAGzC,uDAA4D;AAE5D,MAAa,iBAAkB,SAAQ,qBAAa;IAEhD,MAAM,CAAU,QAAQ,CAAC,CAAS;QAC9B,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,WAAgC,EAAE,IAA8C,EAAE,MAAiC;QAC3H,MAAM,SAAS,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC;aAC/B,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAElB,OAAO,IAAI,iBAAiB,CAAC,GAAI,IAAI,CAAC,EAAG,IAAK,SAAU,IAAK,IAAI,CAAC,eAAgB,IAAK,MAAM,CAAC,KAAM,EAAE,CAAC,CAAC;IAC5G,CAAC;CACJ;AAdD,8CAcC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./EventFactory"), exports);
|
|
18
|
+
__exportStar(require("./PlaywrightSceneId"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,sDAAoC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightErrorParser.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightErrorParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAGlB;IAEK,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK;IAuB7C,OAAO,CAAC,MAAM,CAAC,cAAc;CAGhC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlaywrightErrorParser = void 0;
|
|
4
|
+
class PlaywrightErrorParser {
|
|
5
|
+
static ascii = new RegExp('[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))', // eslint-disable-line no-control-regex
|
|
6
|
+
'g');
|
|
7
|
+
errorFrom(testError) {
|
|
8
|
+
const message = testError.message && PlaywrightErrorParser.stripAsciiFrom(testError.message);
|
|
9
|
+
let stack = testError.stack && PlaywrightErrorParser.stripAsciiFrom(testError.stack);
|
|
10
|
+
// TODO: Do I need to process it?
|
|
11
|
+
// const value = testError.value;
|
|
12
|
+
const prologue = `Error: ${message}`;
|
|
13
|
+
if (stack && message && stack.startsWith(prologue)) {
|
|
14
|
+
stack = stack.slice(prologue.length);
|
|
15
|
+
}
|
|
16
|
+
if (testError.cause) {
|
|
17
|
+
stack += `\nCaused by: ${this.errorFrom(testError.cause).stack}`;
|
|
18
|
+
}
|
|
19
|
+
const error = new Error(message);
|
|
20
|
+
error.stack = stack;
|
|
21
|
+
return error;
|
|
22
|
+
}
|
|
23
|
+
static stripAsciiFrom(text) {
|
|
24
|
+
return text.replace(this.ascii, '');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.PlaywrightErrorParser = PlaywrightErrorParser;
|
|
28
|
+
//# sourceMappingURL=PlaywrightErrorParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightErrorParser.js","sourceRoot":"","sources":["../../src/reporter/PlaywrightErrorParser.ts"],"names":[],"mappings":";;;AAEA,MAAa,qBAAqB;IACtB,MAAM,CAAC,KAAK,GAAG,IAAI,MAAM,CAC7B,sJAAsJ,EAAE,uCAAuC;IAC/L,GAAG,CACN,CAAC;IAEK,SAAS,CAAC,SAAoB;QACjC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,qBAAqB,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE7F,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,qBAAqB,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErF,iCAAiC;QACjC,qCAAqC;QAErC,MAAM,QAAQ,GAAG,UAAW,OAAQ,EAAE,CAAC;QACvC,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,IAAI,gBAAiB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAM,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAEpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,IAAY;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;;AA/BL,sDAgCC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type FullConfig } from '@playwright/test';
|
|
2
|
+
import { type TestCase, type TestResult } from '@playwright/test/reporter';
|
|
3
|
+
import { type DomainEvent } from '@serenity-js/core/lib/events';
|
|
4
|
+
export declare class PlaywrightEventBuffer {
|
|
5
|
+
private readonly errorParser;
|
|
6
|
+
private readonly eventStreamReader;
|
|
7
|
+
private eventFactory;
|
|
8
|
+
private readonly events;
|
|
9
|
+
private readonly deferredSceneFinishedEvents;
|
|
10
|
+
configure(config: Pick<FullConfig, 'rootDir'>): void;
|
|
11
|
+
appendTestStart(test: TestCase, result: TestResult): void;
|
|
12
|
+
appendRetryableSceneEvents(test: TestCase, result: TestResult): void;
|
|
13
|
+
deferAppendingSceneFinishedEvent(test: TestCase, result: TestResult): void;
|
|
14
|
+
private determineScenarioOutcome;
|
|
15
|
+
appendCrashedWorkerEvents(test: TestCase, result: TestResult): void;
|
|
16
|
+
appendSceneEvents(test: TestCase, result: TestResult): void;
|
|
17
|
+
private readEventStream;
|
|
18
|
+
appendSceneFinishedEvent(test: TestCase, result: TestResult): void;
|
|
19
|
+
flush(test: TestCase, result: TestResult): DomainEvent[];
|
|
20
|
+
flushAllDeferred(): DomainEvent[];
|
|
21
|
+
private determineWorstInteractionOutcome;
|
|
22
|
+
private outcomeFrom;
|
|
23
|
+
private sceneId;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=PlaywrightEventBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightEventBuffer.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightEventBuffer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EACH,KAAK,WAAW,EAKnB,MAAM,8BAA8B,CAAC;AAkBtC,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAIvC;IAEL,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAI;IAIpD,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAOzD,0BAA0B,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBpE,gCAAgC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAW1E,OAAO,CAAC,wBAAwB;IAahC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAanE,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAO3D,OAAO,CAAC,eAAe;IAyBvB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAalE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE;IAaxD,gBAAgB,IAAI,WAAW,EAAE;IA6CjC,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,OAAO;CAGlB"}
|