@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.
Files changed (90) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +6 -5
  3. package/lib/api/PlaywrightTestConfig.d.ts +2 -2
  4. package/lib/api/PlaywrightTestConfig.d.ts.map +1 -1
  5. package/lib/api/WorkerEventStreamReader.d.ts +13 -0
  6. package/lib/api/WorkerEventStreamReader.d.ts.map +1 -0
  7. package/lib/api/WorkerEventStreamReader.js +58 -0
  8. package/lib/api/WorkerEventStreamReader.js.map +1 -0
  9. package/lib/api/WorkerEventStreamWriter.d.ts +24 -0
  10. package/lib/api/WorkerEventStreamWriter.d.ts.map +1 -0
  11. package/lib/api/WorkerEventStreamWriter.js +86 -0
  12. package/lib/api/WorkerEventStreamWriter.js.map +1 -0
  13. package/lib/api/index.d.ts +1 -2
  14. package/lib/api/index.d.ts.map +1 -1
  15. package/lib/api/index.js +1 -2
  16. package/lib/api/index.js.map +1 -1
  17. package/lib/api/serenity-fixtures.d.ts +377 -0
  18. package/lib/api/serenity-fixtures.d.ts.map +1 -0
  19. package/lib/api/{SerenityOptions.js → serenity-fixtures.js} +1 -1
  20. package/lib/api/serenity-fixtures.js.map +1 -0
  21. package/lib/api/test-api.d.ts +27 -15
  22. package/lib/api/test-api.d.ts.map +1 -1
  23. package/lib/api/test-api.js +126 -104
  24. package/lib/api/test-api.js.map +1 -1
  25. package/lib/events/EventFactory.d.ts +16 -0
  26. package/lib/events/EventFactory.d.ts.map +1 -0
  27. package/lib/events/EventFactory.js +94 -0
  28. package/lib/events/EventFactory.js.map +1 -0
  29. package/lib/events/PlaywrightSceneId.d.ts +7 -0
  30. package/lib/events/PlaywrightSceneId.d.ts.map +1 -0
  31. package/lib/events/PlaywrightSceneId.js +19 -0
  32. package/lib/events/PlaywrightSceneId.js.map +1 -0
  33. package/lib/events/index.d.ts +3 -0
  34. package/lib/events/index.d.ts.map +1 -0
  35. package/lib/events/index.js +19 -0
  36. package/lib/events/index.js.map +1 -0
  37. package/lib/reporter/PlaywrightErrorParser.d.ts +7 -0
  38. package/lib/reporter/PlaywrightErrorParser.d.ts.map +1 -0
  39. package/lib/reporter/PlaywrightErrorParser.js +28 -0
  40. package/lib/reporter/PlaywrightErrorParser.js.map +1 -0
  41. package/lib/reporter/PlaywrightEventBuffer.d.ts +25 -0
  42. package/lib/reporter/PlaywrightEventBuffer.d.ts.map +1 -0
  43. package/lib/reporter/PlaywrightEventBuffer.js +147 -0
  44. package/lib/reporter/PlaywrightEventBuffer.js.map +1 -0
  45. package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts +8 -0
  46. package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts.map +1 -0
  47. package/lib/reporter/PlaywrightTestSceneIdFactory.js +15 -0
  48. package/lib/reporter/PlaywrightTestSceneIdFactory.js.map +1 -0
  49. package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts +11 -20
  50. package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts.map +1 -1
  51. package/lib/reporter/SerenityReporterForPlaywrightTest.js +62 -163
  52. package/lib/reporter/SerenityReporterForPlaywrightTest.js.map +1 -1
  53. package/lib/reporter/index.d.ts +0 -2
  54. package/lib/reporter/index.d.ts.map +1 -1
  55. package/lib/reporter/index.js +0 -2
  56. package/lib/reporter/index.js.map +1 -1
  57. package/package.json +9 -9
  58. package/src/api/PlaywrightTestConfig.ts +2 -2
  59. package/src/api/WorkerEventStreamReader.ts +27 -0
  60. package/src/api/WorkerEventStreamWriter.ts +117 -0
  61. package/src/api/index.ts +1 -2
  62. package/src/api/serenity-fixtures.ts +392 -0
  63. package/src/api/test-api.ts +187 -99
  64. package/src/events/EventFactory.ts +204 -0
  65. package/src/events/PlaywrightSceneId.ts +20 -0
  66. package/src/events/index.ts +2 -0
  67. package/src/reporter/PlaywrightErrorParser.ts +35 -0
  68. package/src/reporter/PlaywrightEventBuffer.ts +251 -0
  69. package/src/reporter/PlaywrightTestSceneIdFactory.ts +14 -0
  70. package/src/reporter/SerenityReporterForPlaywrightTest.ts +85 -248
  71. package/src/reporter/index.ts +0 -2
  72. package/lib/api/SerenityFixtures.d.ts +0 -130
  73. package/lib/api/SerenityFixtures.d.ts.map +0 -1
  74. package/lib/api/SerenityFixtures.js +0 -3
  75. package/lib/api/SerenityFixtures.js.map +0 -1
  76. package/lib/api/SerenityOptions.d.ts +0 -271
  77. package/lib/api/SerenityOptions.d.ts.map +0 -1
  78. package/lib/api/SerenityOptions.js.map +0 -1
  79. package/lib/reporter/DomainEventBuffer.d.ts +0 -11
  80. package/lib/reporter/DomainEventBuffer.d.ts.map +0 -1
  81. package/lib/reporter/DomainEventBuffer.js +0 -24
  82. package/lib/reporter/DomainEventBuffer.js.map +0 -1
  83. package/lib/reporter/PlaywrightAttachments.d.ts +0 -2
  84. package/lib/reporter/PlaywrightAttachments.d.ts.map +0 -1
  85. package/lib/reporter/PlaywrightAttachments.js +0 -5
  86. package/lib/reporter/PlaywrightAttachments.js.map +0 -1
  87. package/src/api/SerenityFixtures.ts +0 -132
  88. package/src/api/SerenityOptions.ts +0 -277
  89. package/src/reporter/DomainEventBuffer.ts +0 -28
  90. 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, PlaywrightOptions } from '@serenity-js/playwright'
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 options: PlaywrightOptions,
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.options))
217
+ return actor.whoCan(BrowseTheWebWithPlaywright.using(this.browser, this.contextOptions, this.extraContextOptions))
217
218
  default:
218
- return actor.whoCan(CallAnApi.at(this.options.baseURL))
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 { SerenityOptions } from './SerenityOptions';
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<SerenityOptions & TestArgs, WorkerArgs>;
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,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,oBAAoB,CAAC,QAAQ,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,wBAAwB,CAAC,eAAe,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC"}
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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"}
@@ -1,5 +1,4 @@
1
1
  export * from './PlaywrightTestConfig';
2
- export * from './SerenityFixtures';
3
- export * from './SerenityOptions';
2
+ export * from './serenity-fixtures';
4
3
  export * from './test-api';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,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("./SerenityFixtures"), exports);
19
- __exportStar(require("./SerenityOptions"), exports);
18
+ __exportStar(require("./serenity-fixtures"), exports);
20
19
  __exportStar(require("./test-api"), exports);
21
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,qDAAmC;AACnC,oDAAkC;AAClC,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,sDAAoC;AACpC,6CAA2B"}