@serenity-js/playwright-test 3.31.16 → 3.32.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/CHANGELOG.md +37 -0
- package/README.md +6 -5
- package/lib/api/PlaywrightTestConfig.d.ts +2 -2
- 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 +11 -20
- 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 +2 -2
- 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 +85 -248
- 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/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,43 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.32.0](https://github.com/serenity-js/serenity-js/compare/v3.31.17...v3.32.0) (2025-06-20)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **deps:** update playwright dependencies to v1.53.1 ([6ea14ce](https://github.com/serenity-js/serenity-js/commit/6ea14ce83f307ff8e3e2cd48d5a3f532efb123c3))
|
|
12
|
+
* **playwright-test:** create an output directory for the event stream only when necessary ([33c2c60](https://github.com/serenity-js/serenity-js/commit/33c2c60d9ca6610e4211865e3a97f6d094854faa))
|
|
13
|
+
* **playwright-test:** retryable tests are no longer marked as "retried" if they pass upon first try ([e027284](https://github.com/serenity-js/serenity-js/commit/e027284f6994f1a46a800ca0990aa901a222210c))
|
|
14
|
+
* **serenity-bdd:** append ProjectTag to test name, if available ([f9174f0](https://github.com/serenity-js/serenity-js/commit/f9174f08661e9d45373cd0eee06382edb463bde0))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **playwright-test:** actorCalled fixture available in beforeAll and afterAll hooks ([e3b2be5](https://github.com/serenity-js/serenity-js/commit/e3b2be5d173c93dd9955f6a4af41bef09d6e6e6c))
|
|
20
|
+
* **playwright-test:** aggregate retried test reports, filter tests by project ([6cc46db](https://github.com/serenity-js/serenity-js/commit/6cc46dbc073134dd6956fff04208c1e574f38b05))
|
|
21
|
+
* **playwright-test:** improved error handling of actor interactions in beforeAll and afterAll hooks ([2987bee](https://github.com/serenity-js/serenity-js/commit/2987beea84fc2db653054ab09ac71d922ee2352b))
|
|
22
|
+
* **playwright-test:** new internal Serenity/JS event reporting mechanism ([42ba5ad](https://github.com/serenity-js/serenity-js/commit/42ba5ad70f1bf99aad8bc5d57de462cac7c7da6c))
|
|
23
|
+
* **playwright-test:** serenity fixture is now available in the worker scope ([9f3a8be](https://github.com/serenity-js/serenity-js/commit/9f3a8bea93a4d7f45872a8b320d88cf4a1a11d40))
|
|
24
|
+
* **playwright-test:** support for reporting repeated tests ([47b864d](https://github.com/serenity-js/serenity-js/commit/47b864d79aee9b374bb6b6a86b2a313b6c22f584))
|
|
25
|
+
* **playwright-test:** support reporting actor interactions from beforeAll and afterAll hooks ([3909545](https://github.com/serenity-js/serenity-js/commit/3909545feba931f77bd846645cecc3c8f575208e))
|
|
26
|
+
* **playwright:** refactored SerenityFixtures, corrected BrowseTheWebWithPlaywright parameters ([9c62723](https://github.com/serenity-js/serenity-js/commit/9c627233bc93e38a8ae6e9ba531c31ba05ab707f))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## [3.31.17](https://github.com/serenity-js/serenity-js/compare/v3.31.16...v3.31.17) (2025-06-16)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
* **deps:** update playwright dependencies to v1.53.0 ([3404f12](https://github.com/serenity-js/serenity-js/commit/3404f12005fb2185a06566da233be73e4e8cde8d))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
6
43
|
## [3.31.16](https://github.com/serenity-js/serenity-js/compare/v3.31.15...v3.31.16) (2025-06-05)
|
|
7
44
|
|
|
8
45
|
**Note:** Version bump only for package @serenity-js/playwright-test
|
package/README.md
CHANGED
|
@@ -198,24 +198,25 @@ For scenarios where different actors need to be configured differently, you can
|
|
|
198
198
|
// example.spec.ts
|
|
199
199
|
|
|
200
200
|
import { Cast } from '@serenity-js/core'
|
|
201
|
-
import { BrowseTheWebWithPlaywright,
|
|
201
|
+
import { BrowseTheWebWithPlaywright, ExtraBrowserContextOptions } from '@serenity-js/playwright'
|
|
202
202
|
import { test } from '@serenity-js/playwright-test'
|
|
203
203
|
import { CallAnApi } from '@serenity-js/rest'
|
|
204
|
-
import { Browser } from 'playwright'
|
|
204
|
+
import { Browser, BrowserContextOptions } from 'playwright'
|
|
205
205
|
|
|
206
206
|
class Actors implements Cast {
|
|
207
207
|
constructor(
|
|
208
208
|
private readonly browser: Browser,
|
|
209
|
-
private readonly
|
|
209
|
+
private readonly contextOptions: BrowserContextOptions,
|
|
210
|
+
private readonly extraContextOptions: ExtraBrowserContextOptions,
|
|
210
211
|
) {
|
|
211
212
|
}
|
|
212
213
|
|
|
213
214
|
prepare(actor: Actor) {
|
|
214
215
|
switch (actor.name) {
|
|
215
216
|
case 'James':
|
|
216
|
-
return actor.whoCan(BrowseTheWebWithPlaywright.using(this.browser, this.
|
|
217
|
+
return actor.whoCan(BrowseTheWebWithPlaywright.using(this.browser, this.contextOptions, this.extraContextOptions))
|
|
217
218
|
default:
|
|
218
|
-
return actor.whoCan(CallAnApi.at(this.
|
|
219
|
+
return actor.whoCan(CallAnApi.at(this.contextOptions.baseURL))
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
222
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PlaywrightTestConfig as BasePlaywrightTestConfig } from '@playwright/test';
|
|
2
|
-
import type {
|
|
2
|
+
import type { SerenityFixtures, SerenityWorkerFixtures } from './serenity-fixtures';
|
|
3
3
|
/**
|
|
4
4
|
* Convenience alias for [PlaywrightTestConfig](https://playwright.dev/docs/test-configuration) object
|
|
5
5
|
* that includes [`SerenityOptions`](https://serenity-js.org/api/playwright-test/interface/SerenityOptions/) and allows for any other custom options when needed.
|
|
@@ -37,5 +37,5 @@ import type { SerenityOptions } from './SerenityOptions';
|
|
|
37
37
|
* - [`SerenityReporterForPlaywrightTestConfig`](https://serenity-js.org/api/playwright-test/interface/SerenityReporterForPlaywrightTestConfig/)
|
|
38
38
|
* - [Playwright Test configuration](https://playwright.dev/docs/test-configuration)
|
|
39
39
|
*/
|
|
40
|
-
export type PlaywrightTestConfig<TestArgs = object, WorkerArgs = object> = BasePlaywrightTestConfig<
|
|
40
|
+
export type PlaywrightTestConfig<TestArgs = object, WorkerArgs = object> = BasePlaywrightTestConfig<SerenityFixtures & TestArgs, SerenityWorkerFixtures & WorkerArgs>;
|
|
41
41
|
//# sourceMappingURL=PlaywrightTestConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightTestConfig.d.ts","sourceRoot":"","sources":["../../src/api/PlaywrightTestConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"PlaywrightTestConfig.d.ts","sourceRoot":"","sources":["../../src/api/PlaywrightTestConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,oBAAoB,CAAC,QAAQ,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,GAAG,QAAQ,EAAE,sBAAsB,GAAG,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DomainEvent } from '@serenity-js/core/lib/events';
|
|
2
|
+
import type { JSONObject } from 'tiny-types';
|
|
3
|
+
export declare class WorkerEventStreamReader {
|
|
4
|
+
hasStream(pathToEventStreamFile: string): boolean;
|
|
5
|
+
read<T extends DomainEvent>(pathToEventStreamFile: string, mapper?: (input: {
|
|
6
|
+
type: string;
|
|
7
|
+
value: JSONObject;
|
|
8
|
+
}) => {
|
|
9
|
+
type: string;
|
|
10
|
+
value: JSONObject;
|
|
11
|
+
}): T[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=WorkerEventStreamReader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamReader.d.ts","sourceRoot":"","sources":["../../src/api/WorkerEventStreamReader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,uBAAuB;IAEhC,SAAS,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO;IAIjD,IAAI,CAAC,CAAC,SAAS,WAAW,EACtB,qBAAqB,EAAE,MAAM,EAC7B,MAAM,GAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAmB,GAC7G,CAAC,EAAE;CAWT"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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 __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
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.WorkerEventStreamReader = void 0;
|
|
40
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
41
|
+
const events = __importStar(require("@serenity-js/core/lib/events"));
|
|
42
|
+
class WorkerEventStreamReader {
|
|
43
|
+
hasStream(pathToEventStreamFile) {
|
|
44
|
+
return node_fs_1.default.existsSync(pathToEventStreamFile);
|
|
45
|
+
}
|
|
46
|
+
read(pathToEventStreamFile, mapper = input => input) {
|
|
47
|
+
const content = node_fs_1.default.readFileSync(pathToEventStreamFile, 'utf8');
|
|
48
|
+
return content
|
|
49
|
+
.split('\n')
|
|
50
|
+
.filter(Boolean)
|
|
51
|
+
.map(line => {
|
|
52
|
+
const { type, value } = mapper(JSON.parse(line));
|
|
53
|
+
return events[type].fromJSON(value);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.WorkerEventStreamReader = WorkerEventStreamReader;
|
|
58
|
+
//# sourceMappingURL=WorkerEventStreamReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamReader.js","sourceRoot":"","sources":["../../src/api/WorkerEventStreamReader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAyB;AAGzB,qEAAuD;AAGvD,MAAa,uBAAuB;IAEhC,SAAS,CAAC,qBAA6B;QACnC,OAAO,iBAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CACA,qBAA6B,EAC7B,SAA8F,KAAK,CAAC,EAAE,CAAC,KAAK;QAE5G,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAE/D,OAAO,OAAO;aACT,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACX,CAAC;CACJ;AApBD,0DAoBC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type WorkerInfo } from '@playwright/test';
|
|
2
|
+
import type { TestCase } from '@playwright/test/reporter';
|
|
3
|
+
import type { Stage, StageCrewMember } from '@serenity-js/core';
|
|
4
|
+
import type { DomainEvent } from '@serenity-js/core/lib/events';
|
|
5
|
+
import { CorrelationId } from '@serenity-js/core/lib/model';
|
|
6
|
+
export declare class WorkerEventStreamWriter implements StageCrewMember {
|
|
7
|
+
private readonly outputDirectory;
|
|
8
|
+
private readonly workerInfo;
|
|
9
|
+
private stage?;
|
|
10
|
+
private readonly beforeAllId;
|
|
11
|
+
private activeSceneId;
|
|
12
|
+
private events;
|
|
13
|
+
static workerStreamIdFor(workerIndex: number): CorrelationId;
|
|
14
|
+
constructor(outputDirectory: string, workerInfo: WorkerInfo, stage?: Stage);
|
|
15
|
+
assignedTo(stage: Stage): StageCrewMember;
|
|
16
|
+
notifyOf(event: DomainEvent): void;
|
|
17
|
+
private isSceneEvent;
|
|
18
|
+
private activeSceneExistsFor;
|
|
19
|
+
private activateScene;
|
|
20
|
+
persistAll(workerBeforeAllSceneId: CorrelationId): Promise<void>;
|
|
21
|
+
persist(testId: TestCase['id'], workerBeforeAllSceneId?: CorrelationId): Promise<void>;
|
|
22
|
+
private flush;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=WorkerEventStreamWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamWriter.d.ts","sourceRoot":"","sources":["../../src/api/WorkerEventStreamWriter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,qBAAa,uBAAwB,YAAW,eAAe;IAYvD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,KAAK,CAAC;IAZlB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,MAAM,CAAiD;IAE/D,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;gBAKvC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,UAAU,EAC/B,KAAK,CAAC,EAAE,KAAK;IAQzB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAMzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IASlC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,aAAa;IAgBf,UAAU,CAAC,sBAAsB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B5F,OAAO,CAAC,KAAK;CAUhB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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.WorkerEventStreamWriter = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const core_1 = require("@serenity-js/core");
|
|
10
|
+
const model_1 = require("@serenity-js/core/lib/model");
|
|
11
|
+
class WorkerEventStreamWriter {
|
|
12
|
+
outputDirectory;
|
|
13
|
+
workerInfo;
|
|
14
|
+
stage;
|
|
15
|
+
beforeAllId; // = new CorrelationId('unknown');
|
|
16
|
+
activeSceneId; // = WorkerEventStreamWriter.beforeTest;
|
|
17
|
+
events = new Map();
|
|
18
|
+
static workerStreamIdFor(workerIndex) {
|
|
19
|
+
return new model_1.CorrelationId(`worker-${workerIndex}`);
|
|
20
|
+
}
|
|
21
|
+
constructor(outputDirectory, workerInfo, stage) {
|
|
22
|
+
this.outputDirectory = outputDirectory;
|
|
23
|
+
this.workerInfo = workerInfo;
|
|
24
|
+
this.stage = stage;
|
|
25
|
+
this.beforeAllId = WorkerEventStreamWriter.workerStreamIdFor(this.workerInfo.workerIndex);
|
|
26
|
+
this.activeSceneId = this.beforeAllId;
|
|
27
|
+
this.events.set(this.beforeAllId.value, []);
|
|
28
|
+
}
|
|
29
|
+
assignedTo(stage) {
|
|
30
|
+
this.stage = stage;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
notifyOf(event) {
|
|
34
|
+
if (this.isSceneEvent(event) && !this.activeSceneExistsFor(event)) {
|
|
35
|
+
this.activateScene(event);
|
|
36
|
+
}
|
|
37
|
+
this.events.get(this.activeSceneId.value).push(event);
|
|
38
|
+
}
|
|
39
|
+
isSceneEvent(event) {
|
|
40
|
+
return event['sceneId'] instanceof model_1.CorrelationId;
|
|
41
|
+
}
|
|
42
|
+
activeSceneExistsFor(event) {
|
|
43
|
+
return this.activeSceneId.equals(event.sceneId);
|
|
44
|
+
}
|
|
45
|
+
activateScene(event) {
|
|
46
|
+
this.activeSceneId = event.sceneId;
|
|
47
|
+
const testId = event.sceneId.value;
|
|
48
|
+
if (!this.events.has(testId)) {
|
|
49
|
+
this.events.set(testId, []);
|
|
50
|
+
}
|
|
51
|
+
this.events.get(testId).push(...this.events.get(this.beforeAllId.value));
|
|
52
|
+
this.events.set(this.beforeAllId.value, []);
|
|
53
|
+
}
|
|
54
|
+
async persistAll(workerBeforeAllSceneId) {
|
|
55
|
+
const testIds = [...this.events.keys()];
|
|
56
|
+
await Promise.all(testIds.map(testId => this.persist(testId, workerBeforeAllSceneId)));
|
|
57
|
+
}
|
|
58
|
+
async persist(testId, workerBeforeAllSceneId) {
|
|
59
|
+
const testOutputDirectory = node_path_1.default.join(this.outputDirectory, testId);
|
|
60
|
+
const filePath = node_path_1.default.join(testOutputDirectory, 'events.ndjson');
|
|
61
|
+
const events = this.flush(testId);
|
|
62
|
+
if (events.length === 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await node_fs_1.default.promises.mkdir(testOutputDirectory, { recursive: true });
|
|
66
|
+
for (const event of events) {
|
|
67
|
+
const shouldReattachToScene = event['sceneId'] && event['sceneId'].equals(workerBeforeAllSceneId);
|
|
68
|
+
const type = event.constructor.name;
|
|
69
|
+
const value = shouldReattachToScene
|
|
70
|
+
? ({ ...event.toJSON(), sceneId: testId })
|
|
71
|
+
: event.toJSON();
|
|
72
|
+
const serialisedEvent = JSON.stringify({ type, value }, undefined, 0);
|
|
73
|
+
await node_fs_1.default.promises.appendFile(filePath, serialisedEvent + '\n');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
flush(testId) {
|
|
77
|
+
if (!this.events.has(testId)) {
|
|
78
|
+
throw new core_1.LogicError(`No events recorded for test with id ${testId}`);
|
|
79
|
+
}
|
|
80
|
+
const events = this.events.get(testId);
|
|
81
|
+
this.events.set(testId, []);
|
|
82
|
+
return events;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.WorkerEventStreamWriter = WorkerEventStreamWriter;
|
|
86
|
+
//# sourceMappingURL=WorkerEventStreamWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamWriter.js","sourceRoot":"","sources":["../../src/api/WorkerEventStreamWriter.ts"],"names":[],"mappings":"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"}
|
package/lib/api/index.d.ts
CHANGED
package/lib/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC"}
|
package/lib/api/index.js
CHANGED
|
@@ -15,7 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./PlaywrightTestConfig"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./SerenityOptions"), exports);
|
|
18
|
+
__exportStar(require("./serenity-fixtures"), exports);
|
|
20
19
|
__exportStar(require("./test-api"), exports);
|
|
21
20
|
//# sourceMappingURL=index.js.map
|
package/lib/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,sDAAoC;AACpC,6CAA2B"}
|