@serenity-js/playwright-test 3.0.0-rc.28

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 (46) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE.md +201 -0
  3. package/NOTICE.md +1 -0
  4. package/README.md +285 -0
  5. package/lib/PlaywrightTestConfig.d.ts +8 -0
  6. package/lib/PlaywrightTestConfig.d.ts.map +1 -0
  7. package/lib/PlaywrightTestConfig.js +3 -0
  8. package/lib/PlaywrightTestConfig.js.map +1 -0
  9. package/lib/api.d.ts +25 -0
  10. package/lib/api.d.ts.map +1 -0
  11. package/lib/api.js +97 -0
  12. package/lib/api.js.map +1 -0
  13. package/lib/index.d.ts +4 -0
  14. package/lib/index.d.ts.map +1 -0
  15. package/lib/index.js +22 -0
  16. package/lib/index.js.map +1 -0
  17. package/lib/reporter/DomainEventBuffer.d.ts +11 -0
  18. package/lib/reporter/DomainEventBuffer.d.ts.map +1 -0
  19. package/lib/reporter/DomainEventBuffer.js +23 -0
  20. package/lib/reporter/DomainEventBuffer.js.map +1 -0
  21. package/lib/reporter/PlaywrightAttachments.d.ts +2 -0
  22. package/lib/reporter/PlaywrightAttachments.d.ts.map +1 -0
  23. package/lib/reporter/PlaywrightAttachments.js +5 -0
  24. package/lib/reporter/PlaywrightAttachments.js.map +1 -0
  25. package/lib/reporter/PlaywrightStepReporter.d.ts +13 -0
  26. package/lib/reporter/PlaywrightStepReporter.d.ts.map +1 -0
  27. package/lib/reporter/PlaywrightStepReporter.js +46 -0
  28. package/lib/reporter/PlaywrightStepReporter.js.map +1 -0
  29. package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts +46 -0
  30. package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts.map +1 -0
  31. package/lib/reporter/SerenityReporterForPlaywrightTest.js +174 -0
  32. package/lib/reporter/SerenityReporterForPlaywrightTest.js.map +1 -0
  33. package/lib/reporter/index.d.ts +5 -0
  34. package/lib/reporter/index.d.ts.map +1 -0
  35. package/lib/reporter/index.js +21 -0
  36. package/lib/reporter/index.js.map +1 -0
  37. package/package.json +65 -0
  38. package/src/PlaywrightTestConfig.ts +6 -0
  39. package/src/api.ts +121 -0
  40. package/src/index.ts +3 -0
  41. package/src/reporter/DomainEventBuffer.ts +28 -0
  42. package/src/reporter/PlaywrightAttachments.ts +1 -0
  43. package/src/reporter/PlaywrightStepReporter.ts +83 -0
  44. package/src/reporter/SerenityReporterForPlaywrightTest.ts +279 -0
  45. package/src/reporter/index.ts +4 -0
  46. package/tsconfig.build.json +14 -0
package/lib/api.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './api';
2
+ export * from './PlaywrightTestConfig';
3
+ export { SerenityReporterForPlaywrightTest as default } from './reporter';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAe,OAAO,CAAC;AACvB,cAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,iCAAiC,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,22 @@
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
+ exports.default = void 0;
18
+ __exportStar(require("./api"), exports);
19
+ __exportStar(require("./PlaywrightTestConfig"), exports);
20
+ var reporter_1 = require("./reporter");
21
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return reporter_1.SerenityReporterForPlaywrightTest; } });
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wCAAuB;AACvB,yDAAwC;AACxC,uCAA0E;AAAjE,mGAAA,iCAAiC,OAAW"}
@@ -0,0 +1,11 @@
1
+ import { Stage, StageCrewMember } from '@serenity-js/core';
2
+ import { DomainEvent } from '@serenity-js/core/lib/events';
3
+ export declare class DomainEventBuffer implements StageCrewMember {
4
+ private stage?;
5
+ private events;
6
+ constructor(stage?: Stage);
7
+ assignedTo(stage: Stage): StageCrewMember;
8
+ notifyOf(event: DomainEvent): void;
9
+ flush(): DomainEvent[];
10
+ }
11
+ //# sourceMappingURL=DomainEventBuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DomainEventBuffer.d.ts","sourceRoot":"","sources":["../../src/reporter/DomainEventBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,qBAAa,iBAAkB,YAAW,eAAe;IAIzC,OAAO,CAAC,KAAK,CAAC;IAF1B,OAAO,CAAC,MAAM,CAAqB;gBAEf,KAAK,CAAC,EAAE,KAAK;IAGjC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAMzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIlC,KAAK,IAAI,WAAW,EAAE;CAOzB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomainEventBuffer = void 0;
4
+ class DomainEventBuffer {
5
+ constructor(stage) {
6
+ this.stage = stage;
7
+ this.events = [];
8
+ }
9
+ assignedTo(stage) {
10
+ this.stage = stage;
11
+ return this;
12
+ }
13
+ notifyOf(event) {
14
+ this.events.push(event);
15
+ }
16
+ flush() {
17
+ const events = [...this.events];
18
+ this.events = [];
19
+ return events;
20
+ }
21
+ }
22
+ exports.DomainEventBuffer = DomainEventBuffer;
23
+ //# sourceMappingURL=DomainEventBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DomainEventBuffer.js","sourceRoot":"","sources":["../../src/reporter/DomainEventBuffer.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAI1B,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAFzB,WAAM,GAAkB,EAAE,CAAC;IAGnC,CAAC;IAED,UAAU,CAAC,KAAY;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,KAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAxBD,8CAwBC"}
@@ -0,0 +1,2 @@
1
+ export declare const SERENITY_JS_DOMAIN_EVENTS_ATTACHMENT_CONTENT_TYPE = "application/vnd.serenity-js.domain-events+json";
2
+ //# sourceMappingURL=PlaywrightAttachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightAttachments.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightAttachments.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iDAAiD,mDAAmD,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SERENITY_JS_DOMAIN_EVENTS_ATTACHMENT_CONTENT_TYPE = void 0;
4
+ exports.SERENITY_JS_DOMAIN_EVENTS_ATTACHMENT_CONTENT_TYPE = 'application/vnd.serenity-js.domain-events+json';
5
+ //# sourceMappingURL=PlaywrightAttachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightAttachments.js","sourceRoot":"","sources":["../../src/reporter/PlaywrightAttachments.ts"],"names":[],"mappings":";;;AAAa,QAAA,iDAAiD,GAAG,gDAAgD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { TestInfo } from '@playwright/test';
2
+ import { Stage, StageCrewMember } from '@serenity-js/core';
3
+ import { DomainEvent } from '@serenity-js/core/lib/events';
4
+ export declare class PlaywrightStepReporter implements StageCrewMember {
5
+ private readonly testInfo;
6
+ private stage?;
7
+ private readonly steps;
8
+ constructor(testInfo: TestInfo, stage?: Stage);
9
+ assignedTo(stage: Stage): StageCrewMember;
10
+ notifyOf(event: DomainEvent): void;
11
+ private createStep;
12
+ }
13
+ //# sourceMappingURL=PlaywrightStepReporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightStepReporter.d.ts","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAoE,MAAM,8BAA8B,CAAC;AAgC7H,qBAAa,sBAAuB,YAAW,eAAe;IAKtD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,KAAK,CAAC;IAJlB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4C;gBAG7C,QAAQ,EAAE,QAAQ,EAC3B,KAAK,CAAC,EAAE,KAAK;IAIzB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAMzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAoBlC,OAAO,CAAC,UAAU;CAYrB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightStepReporter = void 0;
4
+ const events_1 = require("@serenity-js/core/lib/events");
5
+ const model_1 = require("@serenity-js/core/lib/model");
6
+ class PlaywrightStepReporter {
7
+ constructor(testInfo, stage) {
8
+ this.testInfo = testInfo;
9
+ this.stage = stage;
10
+ this.steps = new Map();
11
+ }
12
+ assignedTo(stage) {
13
+ this.stage = stage;
14
+ return this;
15
+ }
16
+ notifyOf(event) {
17
+ if (event instanceof events_1.TaskStarts) {
18
+ this.steps.set(event.activityId.value, this.createStep(event.details, 'task'));
19
+ }
20
+ if (event instanceof events_1.InteractionStarts) {
21
+ this.steps.set(event.activityId.value, this.createStep(event.details, 'interaction'));
22
+ }
23
+ if (event instanceof events_1.InteractionFinished || event instanceof events_1.TaskFinished) {
24
+ if (event.outcome instanceof model_1.ProblemIndication) {
25
+ this.steps.get(event.activityId.value).complete({ error: event.outcome.error });
26
+ }
27
+ else {
28
+ this.steps.get(event.activityId.value).complete({});
29
+ }
30
+ }
31
+ }
32
+ createStep(activityDetails, type) {
33
+ // https://github.com/microsoft/playwright/blob/04f77f231981780704a3a5e2cea93e3c420809a0/packages/playwright-test/src/expect.ts#L200-L206
34
+ return this.testInfo._addStep({
35
+ location: activityDetails.location
36
+ ? { file: activityDetails.location.path.value, line: activityDetails.location.line, column: activityDetails.location.column }
37
+ : undefined,
38
+ category: `serenity-js:${type}`,
39
+ title: activityDetails.name.value,
40
+ canHaveChildren: true,
41
+ forceNoParent: false
42
+ });
43
+ }
44
+ }
45
+ exports.PlaywrightStepReporter = PlaywrightStepReporter;
46
+ //# sourceMappingURL=PlaywrightStepReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightStepReporter.js","sourceRoot":"","sources":["../../src/reporter/PlaywrightStepReporter.ts"],"names":[],"mappings":";;;AAEA,yDAA6H;AAC7H,uDAAiF;AA+BjF,MAAa,sBAAsB;IAI/B,YACqB,QAAkB,EAC3B,KAAa;QADJ,aAAQ,GAAR,QAAQ,CAAU;QAC3B,UAAK,GAAL,KAAK,CAAQ;QAJR,UAAK,GAAkC,IAAI,GAAG,EAAE,CAAC;IAMlE,CAAC;IAED,UAAU,CAAC,KAAY;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,KAAkB;QAEvB,IAAI,KAAK,YAAY,mBAAU,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;SAClF;QAED,IAAI,KAAK,YAAY,0BAAiB,EAAE;YACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;SACzF;QAED,IAAI,KAAK,YAAY,4BAAmB,IAAI,KAAK,YAAY,qBAAY,EAAE;YACvE,IAAI,KAAK,CAAC,OAAO,YAAY,yBAAiB,EAAE;gBAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;aAClF;iBACI;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;aACtD;SACJ;IACL,CAAC;IAEO,UAAU,CAAC,eAAgC,EAAE,IAA4B;QAC7E,yIAAyI;QACzI,OAAQ,IAAI,CAAC,QAAgB,CAAC,QAAQ,CAAC;YACnC,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC7H,CAAC,CAAC,SAAS;YACf,QAAQ,EAAE,eAAgB,IAAK,EAAE;YACjC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK;YACjC,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;SACvB,CAAqB,CAAC;IAC3B,CAAC;CACJ;AAhDD,wDAgDC"}
@@ -0,0 +1,46 @@
1
+ import { FullConfig } from '@playwright/test';
2
+ import { Reporter, Suite, TestCase, TestResult } from '@playwright/test/reporter';
3
+ import { Serenity, StageCrewMember, StageCrewMemberBuilder } from '@serenity-js/core';
4
+ import { OutputStream } from '@serenity-js/core/lib/adapter';
5
+ export declare class SerenityReporterForPlaywrightTestConfig {
6
+ /**
7
+ * A list of {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} or {@apilink StageCrewMember|StageCrewMembers}
8
+ * to be notified of {@apilink DomainEvent|DomainEvents} that occur during the scenario execution.
9
+ */
10
+ crew?: Array<StageCrewMember | StageCrewMemberBuilder>;
11
+ /**
12
+ * An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders}
13
+ *
14
+ * Defaults to [`process.stdout`](https://nodejs.org/api/process.html#process_process_stdout).
15
+ */
16
+ outputStream?: OutputStream;
17
+ }
18
+ /**
19
+ * Receives notifications from Playwright Test and translates them to Serenity/JS
20
+ * {@apilink DomainEvent|domain events}, so that they can be used with Serenity/JS reporters.
21
+ */
22
+ export declare class SerenityReporterForPlaywrightTest implements Reporter {
23
+ private readonly serenity;
24
+ private errorParser;
25
+ private sceneIds;
26
+ /**
27
+ *
28
+ * @param config
29
+ * @param serenity
30
+ * Instance of {@apilink Serenity}, specific to the Node process running this Serenity reporter.
31
+ * Note that Playwright runs test workers and reporters in separate processes.
32
+ */
33
+ constructor(config: SerenityReporterForPlaywrightTestConfig, serenity?: Serenity);
34
+ onBegin(config: FullConfig, suite: Suite): void;
35
+ onTestBegin(test: TestCase): void;
36
+ onTestEnd(test: TestCase, result: TestResult): void;
37
+ private determineScenarioOutcome;
38
+ private outcomeFrom;
39
+ private scenarioDetailsFrom;
40
+ onEnd(): Promise<void>;
41
+ private emit;
42
+ private announceRetryIfNeeded;
43
+ private now;
44
+ printsToStdio(): boolean;
45
+ }
46
+ //# sourceMappingURL=SerenityReporterForPlaywrightTest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenityReporterForPlaywrightTest.d.ts","sourceRoot":"","sources":["../../src/reporter/SerenityReporterForPlaywrightTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAc,QAAQ,EAAwC,eAAe,EAAE,sBAAsB,EAAa,MAAM,mBAAmB,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAkC7D,qBAAa,uCAAuC;IAChD;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,eAAe,GAAG,sBAAsB,CAAC,CAAC;IAEvD;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,iCAAkC,YAAW,QAAQ;IAc1D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZ7B,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAyC;IAEzD;;;;;;OAMG;gBAEC,MAAM,EAAE,uCAAuC,EAC9B,QAAQ,GAAE,QAAmC;IAKlE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAI/C,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAwBjC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IA0CnD,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,mBAAmB;IAcrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,GAAG;IAIX,aAAa,IAAI,OAAO;CAG3B"}
@@ -0,0 +1,174 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.SerenityReporterForPlaywrightTest = exports.SerenityReporterForPlaywrightTestConfig = void 0;
27
+ const core_1 = require("@serenity-js/core");
28
+ const events = __importStar(require("@serenity-js/core/lib/events"));
29
+ const events_1 = require("@serenity-js/core/lib/events");
30
+ const io_1 = require("@serenity-js/core/lib/io");
31
+ const model_1 = require("@serenity-js/core/lib/model");
32
+ const PlaywrightAttachments_1 = require("./PlaywrightAttachments");
33
+ // TODO Split SerenityConfig into ActorsConfig and SerenityReportingConfig
34
+ class SerenityReporterForPlaywrightTestConfig {
35
+ }
36
+ exports.SerenityReporterForPlaywrightTestConfig = SerenityReporterForPlaywrightTestConfig;
37
+ /**
38
+ * Receives notifications from Playwright Test and translates them to Serenity/JS
39
+ * {@apilink DomainEvent|domain events}, so that they can be used with Serenity/JS reporters.
40
+ */
41
+ class SerenityReporterForPlaywrightTest {
42
+ /**
43
+ *
44
+ * @param config
45
+ * @param serenity
46
+ * Instance of {@apilink Serenity}, specific to the Node process running this Serenity reporter.
47
+ * Note that Playwright runs test workers and reporters in separate processes.
48
+ */
49
+ constructor(config, serenity = core_1.serenity) {
50
+ this.serenity = serenity;
51
+ this.errorParser = new PlaywrightErrorParser();
52
+ this.sceneIds = new Map();
53
+ this.serenity.configure(config);
54
+ }
55
+ onBegin(config, suite) {
56
+ this.serenity.announce(new events_1.TestRunStarts(this.now()));
57
+ }
58
+ onTestBegin(test) {
59
+ const currentSceneId = this.serenity.assignNewSceneId();
60
+ this.sceneIds.set(test.id, currentSceneId);
61
+ const scenario = this.scenarioDetailsFrom(test);
62
+ this.emit(new events_1.SceneStarts(currentSceneId, scenario, this.serenity.currentTime()), new events_1.SceneTagged(currentSceneId, new model_1.FeatureTag(scenario.category.value), this.serenity.currentTime()), new events_1.TestRunnerDetected(currentSceneId, new model_1.Name('Playwright'), this.serenity.currentTime()));
63
+ }
64
+ // TODO might be nice to support that by emitting TestStepStarted / Finished
65
+ // onStepBegin(test: TestCase, _result: TestResult, step: TestStep): void {
66
+ // // console.log('>> onStepBegin');
67
+ // }
68
+ // onStepEnd(test: TestCase, _result: TestResult, step: TestStep): void {
69
+ // // console.log('>> onStepEnd');
70
+ // }
71
+ onTestEnd(test, result) {
72
+ this.announceRetryIfNeeded(test, result);
73
+ const currentSceneId = this.sceneIds.get(test.id);
74
+ let worstInteractionOutcome = new model_1.ExecutionSuccessful();
75
+ for (const attachment of result.attachments) {
76
+ if (!(attachment.contentType === PlaywrightAttachments_1.SERENITY_JS_DOMAIN_EVENTS_ATTACHMENT_CONTENT_TYPE && attachment.body)) {
77
+ continue;
78
+ }
79
+ const messages = JSON.parse(attachment.body.toString());
80
+ for (const message of messages) {
81
+ if (message.value.sceneId === 'unknown') {
82
+ message.value.sceneId = currentSceneId.value;
83
+ }
84
+ const event = events[message.type].fromJSON(message.value);
85
+ this.serenity.announce(event);
86
+ if (event instanceof events_1.InteractionFinished && event.outcome.isWorseThan(worstInteractionOutcome)) {
87
+ worstInteractionOutcome = event.outcome;
88
+ }
89
+ }
90
+ }
91
+ const scenarioOutcome = this.outcomeFrom(test, result);
92
+ this.serenity.announce(new events_1.SceneFinished(currentSceneId, this.scenarioDetailsFrom(test), this.determineScenarioOutcome(worstInteractionOutcome, scenarioOutcome), this.now()));
93
+ }
94
+ determineScenarioOutcome(worstInteractionOutcome, scenarioOutcome) {
95
+ if (worstInteractionOutcome instanceof model_1.ExecutionFailedWithAssertionError) {
96
+ return worstInteractionOutcome;
97
+ }
98
+ return worstInteractionOutcome.isWorseThan(scenarioOutcome)
99
+ ? worstInteractionOutcome
100
+ : scenarioOutcome;
101
+ }
102
+ outcomeFrom(test, result) {
103
+ const outcome = test.outcome();
104
+ if (outcome === 'skipped') {
105
+ return new model_1.ExecutionSkipped();
106
+ }
107
+ if (outcome === 'unexpected' && result.status === 'passed') {
108
+ return new model_1.ExecutionFailedWithError(new core_1.LogicError(`Scenario expected to fail, but ${result.status}`));
109
+ }
110
+ if (['failed', 'interrupted', 'timedOut'].includes(result.status)) {
111
+ if (test.retries > result.retry) {
112
+ return new model_1.ExecutionIgnored(this.errorParser.errorFrom(result.error));
113
+ }
114
+ return new model_1.ExecutionFailedWithError(this.errorParser.errorFrom(result.error));
115
+ }
116
+ return new model_1.ExecutionSuccessful();
117
+ }
118
+ scenarioDetailsFrom(test) {
119
+ const [root_, browserName_, fileName_, featureName, ...scenarioTitle] = test.titlePath();
120
+ return new model_1.ScenarioDetails(new model_1.Name(scenarioTitle.join(' ')), new model_1.Category(featureName), new io_1.FileSystemLocation(new io_1.Path(test.location.file), test.location.line, test.location.column));
121
+ }
122
+ async onEnd() {
123
+ this.serenity.announce(new events_1.TestRunFinishes(this.serenity.currentTime()));
124
+ await this.serenity.waitForNextCue();
125
+ this.serenity.announce(new events_1.TestRunFinished(this.serenity.currentTime()));
126
+ }
127
+ // TODO emit a text artifact with stdout?
128
+ // reporter.onStdErr(chunk, test, result)
129
+ // reporter.onStdOut(chunk, test, result)
130
+ emit(...events) {
131
+ events.forEach(event => {
132
+ this.serenity.announce(event);
133
+ });
134
+ }
135
+ announceRetryIfNeeded(test, result) {
136
+ if (test.retries === 0) {
137
+ return;
138
+ }
139
+ const currentSceneId = this.sceneIds.get(test.id);
140
+ this.emit(new events_1.RetryableSceneDetected(currentSceneId, this.now()), new events_1.SceneTagged(currentSceneId, new model_1.ArbitraryTag('retried'), // todo: replace with a dedicated tag
141
+ this.now()));
142
+ if (result.retry > 0) {
143
+ this.emit(new events_1.SceneTagged(currentSceneId, new model_1.ExecutionRetriedTag(result.retry), this.serenity.currentTime()));
144
+ }
145
+ }
146
+ now() {
147
+ return this.serenity.currentTime();
148
+ }
149
+ printsToStdio() {
150
+ return true;
151
+ }
152
+ }
153
+ exports.SerenityReporterForPlaywrightTest = SerenityReporterForPlaywrightTest;
154
+ class PlaywrightErrorParser {
155
+ errorFrom(testError) {
156
+ const message = testError.message && PlaywrightErrorParser.stripAsciiFrom(testError.message);
157
+ let stack = testError.stack && PlaywrightErrorParser.stripAsciiFrom(testError.stack);
158
+ // TODO: Do I need to process it?
159
+ // const value = testError.value;
160
+ const prologue = `Error: ${message}`;
161
+ if (stack && message && stack.startsWith(prologue)) {
162
+ stack = stack.slice(prologue.length);
163
+ }
164
+ const error = new Error(message);
165
+ error.stack = stack;
166
+ return error;
167
+ }
168
+ static stripAsciiFrom(text) {
169
+ return text.replace(this.ascii, '');
170
+ }
171
+ }
172
+ PlaywrightErrorParser.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
173
+ 'g');
174
+ //# sourceMappingURL=SerenityReporterForPlaywrightTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenityReporterForPlaywrightTest.js","sourceRoot":"","sources":["../../src/reporter/SerenityReporterForPlaywrightTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './DomainEventBuffer';
2
+ export * from './PlaywrightAttachments';
3
+ export * from './PlaywrightStepReporter';
4
+ export * from './SerenityReporterForPlaywrightTest';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,21 @@
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("./DomainEventBuffer"), exports);
18
+ __exportStar(require("./PlaywrightAttachments"), exports);
19
+ __exportStar(require("./PlaywrightStepReporter"), exports);
20
+ __exportStar(require("./SerenityReporterForPlaywrightTest"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,0DAAwC;AACxC,2DAAyC;AACzC,sEAAoD"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@serenity-js/playwright-test",
3
+ "version": "3.0.0-rc.28",
4
+ "description": "Serenity/JS Screenplay Pattern library for Playwright",
5
+ "author": {
6
+ "name": "Jan Molak",
7
+ "email": "jan.molak@smartcodeltd.co.uk",
8
+ "url": "https://janmolak.com"
9
+ },
10
+ "funding": {
11
+ "url": "https://github.com/sponsors/serenity-js"
12
+ },
13
+ "homepage": "https://serenity-js.org",
14
+ "license": "Apache-2.0",
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "main": "lib/index.js",
19
+ "typings": "lib/index.d.ts",
20
+ "keywords": [
21
+ "serenity-js",
22
+ "playwright",
23
+ "playwright-test",
24
+ "tdd",
25
+ "bdd",
26
+ "test",
27
+ "testing"
28
+ ],
29
+ "scripts": {
30
+ "clean": "rimraf .nyc_output lib target",
31
+ "~test": "nyc playwright test",
32
+ "compile": "tsc --project tsconfig.build.json"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/serenity-js/serenity-js.git",
37
+ "directory": "packages/playwright"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/serenity-js/serenity-js/issues"
41
+ },
42
+ "engines": {
43
+ "node": "^14 || ^16 || ^18",
44
+ "npm": "^6 || ^7 || ^8"
45
+ },
46
+ "dependencies": {
47
+ "@serenity-js/core": "3.0.0-rc.28",
48
+ "@serenity-js/playwright": "3.0.0-rc.28",
49
+ "deepmerge": "^4.2.2",
50
+ "tiny-types": "^1.19.0"
51
+ },
52
+ "devDependencies": {
53
+ "@integration/testing-tools": "3.0.0",
54
+ "@playwright/test": "1.26.0",
55
+ "@serenity-js/core": "3.0.0-rc.27",
56
+ "@serenity-js/playwright": "3.0.0-rc.27",
57
+ "@types/chai": "^4.3.3",
58
+ "@types/mocha": "^9.1.1",
59
+ "mocha": "^10.0.0",
60
+ "nyc": "15.1.0",
61
+ "ts-node": "^10.9.1",
62
+ "typescript": "^4.7.4"
63
+ },
64
+ "gitHead": "453c93b1337518956c0052e61201fc2b100e0273"
65
+ }
@@ -0,0 +1,6 @@
1
+ import type { PlaywrightTestConfig as BasePlaywrightTestConfig } from '@playwright/test';
2
+ import { ClassDescription } from '@serenity-js/core';
3
+
4
+ export type PlaywrightTestConfig<BaseConfig extends BasePlaywrightTestConfig = BasePlaywrightTestConfig> = Omit<BaseConfig, 'use' | 'reporter'> & {
5
+ use?: BaseConfig['use'] & { crew: Array<ClassDescription> }
6
+ };