testit-adapter-playwright 3.6.1 → 3.7.0-TMS-5.6

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/dist/converter.js CHANGED
@@ -43,9 +43,16 @@ class Converter {
43
43
  return autotestResult;
44
44
  }
45
45
  static convertTestStepsToShortSteps(steps) {
46
- return steps
47
- .filter((step) => (0, utils_1.isStep)(step))
48
- .map(step => this.convertTestStepToShortStep(step));
46
+ const out = [];
47
+ for (const step of steps) {
48
+ if ((0, utils_1.isStep)(step)) {
49
+ out.push(this.convertTestStepToShortStep(step));
50
+ }
51
+ else if (step.steps?.length) {
52
+ out.push(...this.convertTestStepsToShortSteps(step.steps));
53
+ }
54
+ }
55
+ return out;
49
56
  }
50
57
  static convertTestStepToShortStep(step) {
51
58
  return {
@@ -54,9 +61,16 @@ class Converter {
54
61
  };
55
62
  }
56
63
  static convertTestStepsToSteps(steps, attachmentsMap) {
57
- return steps
58
- .filter((step) => (0, utils_1.isStep)(step))
59
- .map(step => this.convertTestStepToStep(step, attachmentsMap));
64
+ const out = [];
65
+ for (const step of steps) {
66
+ if ((0, utils_1.isStep)(step)) {
67
+ out.push(this.convertTestStepToStep(step, attachmentsMap));
68
+ }
69
+ else if (step.steps?.length) {
70
+ out.push(...this.convertTestStepsToSteps(step.steps, attachmentsMap));
71
+ }
72
+ }
73
+ return out;
60
74
  }
61
75
  static convertTestStepToStep(step, attachmentsMap) {
62
76
  const steps = step.steps.length !== 0 ? this.convertTestStepsToSteps(step.steps, attachmentsMap) : [];
package/dist/labels.js CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.testit = exports.Extensions = exports.ContentType = void 0;
7
7
  const crypto_1 = require("crypto");
8
8
  const test_1 = __importDefault(require("@playwright/test"));
9
+ const utils_1 = require("./utils");
9
10
  var ContentType;
10
11
  (function (ContentType) {
11
12
  ContentType["TEXT"] = "text/plain";
@@ -40,8 +41,8 @@ class testit {
40
41
  });
41
42
  }
42
43
  static async addAttachment(name, content, options) {
43
- const stepName = `stepattach_${(0, crypto_1.randomUUID)()}_${name}`;
44
44
  const contentType = typeof options === "string" ? options : options.contentType;
45
+ const stepName = (0, utils_1.processAttachmentNameExtensions)(`stepattach_${(0, crypto_1.randomUUID)()}_${name}`, contentType);
45
46
  await this.step(stepName, async () => {
46
47
  await test_1.default.info().attach(stepName, {
47
48
  body: content,
@@ -1,11 +1,13 @@
1
1
  import { TestStatus } from "@playwright/test";
2
- import { TestError } from "@playwright/test/reporter";
2
+ import { TestError, TestStep } from "@playwright/test/reporter";
3
3
  export interface Result {
4
4
  status: TestStatus;
5
5
  attachments: Array<ResultAttachment>;
6
6
  duration: number;
7
7
  error?: TestError;
8
8
  errors: Array<TestError>;
9
+ /** Full Playwright step tree (fixtures, hooks, test.step); preferred over reporter cache. */
10
+ steps?: TestStep[];
9
11
  }
10
12
  export interface ResultAttachment {
11
13
  /**
package/dist/reporter.js CHANGED
@@ -47,6 +47,7 @@ class TmsReporter {
47
47
  duration: result.duration,
48
48
  errors: result.errors,
49
49
  error: result.error,
50
+ steps: result.steps,
50
51
  }));
51
52
  }
52
53
  // fix issues with trace and video files on playwright
@@ -86,6 +87,7 @@ class TmsReporter {
86
87
  attachments: [],
87
88
  duration: 0,
88
89
  errors: [],
90
+ steps: [],
89
91
  });
90
92
  });
91
93
  }
@@ -106,17 +108,6 @@ class TmsReporter {
106
108
  addAttachments: [],
107
109
  externalKey: test.title,
108
110
  };
109
- const dictionaries = this.getDictionariesByTest(test);
110
- const namespace = dictionaries
111
- .slice(0, -1)
112
- .join(path_1.default.sep);
113
- const classname = dictionaries[dictionaries.length - 1];
114
- if (namespace != undefined && namespace.length > 0) {
115
- autotestData.namespace = namespace;
116
- }
117
- if (classname != undefined && classname.length > 0) {
118
- autotestData.classname = classname;
119
- }
120
111
  for (const attachment of result.attachments) {
121
112
  if (!attachment.body) {
122
113
  if (attachment.path && attachment.name !== "screenshot") {
@@ -184,13 +175,27 @@ class TmsReporter {
184
175
  }
185
176
  async loadTest(test, result) {
186
177
  const autotestData = await this.getAutotestData(test, result);
178
+ const origin = await this.strategy.client.autoTests.getAutotestByExternalId(autotestData.externalId);
179
+ if (!origin) {
180
+ const dictionaries = this.getDictionariesByTest(test);
181
+ const namespace = dictionaries.slice(0, -1).join(path_1.default.sep);
182
+ const classname = dictionaries[dictionaries.length - 1];
183
+ if (namespace.length > 0) {
184
+ autotestData.namespace = namespace;
185
+ }
186
+ if (classname?.length) {
187
+ autotestData.classname = classname;
188
+ }
189
+ }
187
190
  const autotest = converter_1.Converter.convertTestCaseToAutotestPost(autotestData);
188
- const steps = [...this.stepsMap.keys()].filter((step) => this.stepsMap.get(step) === test);
189
- const stepResults = converter_1.Converter.convertTestStepsToSteps(steps, this.attachmentsMap);
191
+ const rawSteps = result.steps?.length
192
+ ? result.steps
193
+ : [...this.stepsMap.keys()].filter((step) => this.stepsMap.get(step) === test);
194
+ const stepResults = converter_1.Converter.convertTestStepsToSteps(rawSteps, this.attachmentsMap);
190
195
  if (!(0, utils_1.isAllStepsWithPassedOutcome)(stepResults)) {
191
196
  result.status = "failed";
192
197
  }
193
- autotest.steps = converter_1.Converter.convertTestStepsToShortSteps(steps);
198
+ autotest.steps = converter_1.Converter.convertTestStepsToShortSteps(rawSteps);
194
199
  await this.strategy.loadAutotest(autotest, converter_1.Converter.convertStatus(result.status, test.expectedStatus));
195
200
  const autotestResult = converter_1.Converter.convertAutotestPostToAutotestResult(autotestData, test, result);
196
201
  autotestResult.stepResults = stepResults;
package/dist/utils.d.ts CHANGED
@@ -11,3 +11,4 @@ export declare function isStep(step: TestStep): boolean;
11
11
  export declare function stripAscii(str: string): string;
12
12
  export declare const stepAttachRegexp: RegExp;
13
13
  export declare function processAttachmentExtensions(attachment: ResultAttachment): ResultAttachment;
14
+ export declare function processAttachmentNameExtensions(name: string, contentType: string): string;
package/dist/utils.js CHANGED
@@ -6,6 +6,7 @@ exports.isAllStepsWithPassedOutcome = isAllStepsWithPassedOutcome;
6
6
  exports.isStep = isStep;
7
7
  exports.stripAscii = stripAscii;
8
8
  exports.processAttachmentExtensions = processAttachmentExtensions;
9
+ exports.processAttachmentNameExtensions = processAttachmentNameExtensions;
9
10
  const converter_1 = require("./converter");
10
11
  const labels_1 = require("./labels");
11
12
  function getStatusDetails(error) {
@@ -33,14 +34,14 @@ function stripAscii(str) {
33
34
  ;
34
35
  exports.stepAttachRegexp = /^stepattach_(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})_/i;
35
36
  const asciiRegex = new RegExp("[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))", "g");
37
+ const extensionMap = {
38
+ [labels_1.ContentType.ZIP]: labels_1.Extensions.ZIP,
39
+ [labels_1.ContentType.PNG]: labels_1.Extensions.PNG,
40
+ [labels_1.ContentType.WEBM]: labels_1.Extensions.WEBM,
41
+ [labels_1.ContentType.MD]: labels_1.Extensions.MD,
42
+ [labels_1.ContentType.JPEG]: labels_1.Extensions.JPEG,
43
+ };
36
44
  function processAttachmentExtensions(attachment) {
37
- const extensionMap = {
38
- [labels_1.ContentType.ZIP]: labels_1.Extensions.ZIP,
39
- [labels_1.ContentType.PNG]: labels_1.Extensions.PNG,
40
- [labels_1.ContentType.WEBM]: labels_1.Extensions.WEBM,
41
- [labels_1.ContentType.MD]: labels_1.Extensions.MD,
42
- [labels_1.ContentType.JPEG]: labels_1.Extensions.JPEG,
43
- };
44
45
  const extension = extensionMap[attachment.contentType];
45
46
  if (extension && !attachment.name.includes(extension)) {
46
47
  return {
@@ -50,3 +51,10 @@ function processAttachmentExtensions(attachment) {
50
51
  }
51
52
  return attachment;
52
53
  }
54
+ function processAttachmentNameExtensions(name, contentType) {
55
+ const extension = extensionMap[contentType];
56
+ if (extension && !name.includes(extension)) {
57
+ return name + extension;
58
+ }
59
+ return name;
60
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testit-adapter-playwright",
3
- "version": "3.6.1",
3
+ "version": "3.7.0-TMS-5.6",
4
4
  "description": "Playwright adapter for Test IT",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -40,7 +40,7 @@
40
40
  "prettier": "^3.0.1"
41
41
  },
42
42
  "dependencies": {
43
- "testit-js-commons": "3.6.1"
43
+ "testit-js-commons": "3.7.0-TMS-5.6"
44
44
  },
45
45
  "files": [
46
46
  "dist"