newman-reporter-qase 2.0.0-beta.0 → 2.0.0-beta.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.
@@ -0,0 +1,2 @@
1
+ import { NewmanQaseReporter } from './reporter';
2
+ export = NewmanQaseReporter;
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const reporter_1 = require("./reporter");
3
+ module.exports = reporter_1.NewmanQaseReporter;
@@ -0,0 +1,57 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { ConfigType, ConfigLoader } from 'qase-javascript-commons';
4
+ export type NewmanQaseOptionsType = ConfigType;
5
+ /**
6
+ * @class NewmanQaseReporter
7
+ */
8
+ export declare class NewmanQaseReporter {
9
+ /**
10
+ * @type {RegExp}
11
+ */
12
+ static qaseIdRegExp: RegExp;
13
+ /**
14
+ * @param {EventList} eventList
15
+ * @returns {number[]}
16
+ * @private
17
+ */
18
+ private static getCaseIds;
19
+ /**
20
+ * @param {PropertyBase<PropertyBaseDefinition>} item
21
+ * @param {string[]} titles
22
+ * @returns {string[]}
23
+ * @private
24
+ */
25
+ private static getParentTitles;
26
+ /**
27
+ * @type {ReporterInterface}
28
+ * @private
29
+ */
30
+ private reporter;
31
+ /**
32
+ * @type {Map<string, TestResultType>}
33
+ * @private
34
+ */
35
+ private pendingResultMap;
36
+ /**
37
+ * @type {Map<string, number>}
38
+ * @private
39
+ */
40
+ private timerMap;
41
+ /**
42
+ * @param {EventEmitter} emitter
43
+ * @param {NewmanQaseOptionsType} options
44
+ * @param {unknown} _
45
+ * @param {ConfigLoaderInterface} configLoader
46
+ */
47
+ constructor(emitter: EventEmitter, options: NewmanQaseOptionsType, _: unknown, configLoader?: ConfigLoader<Partial<ConfigType> & Record<string, unknown>>);
48
+ /**
49
+ * @param {EventEmitter} runner
50
+ * @private
51
+ */
52
+ private addRunnerListeners;
53
+ /**
54
+ * @private
55
+ */
56
+ private preventExit;
57
+ }
@@ -0,0 +1,141 @@
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.NewmanQaseReporter = void 0;
7
+ const semver_1 = __importDefault(require("semver"));
8
+ const qase_javascript_commons_1 = require("qase-javascript-commons");
9
+ /**
10
+ * @class NewmanQaseReporter
11
+ */
12
+ class NewmanQaseReporter {
13
+ /**
14
+ * @param {EventList} eventList
15
+ * @returns {number[]}
16
+ * @private
17
+ */
18
+ static getCaseIds(eventList) {
19
+ const ids = [];
20
+ eventList.each((event) => {
21
+ if (event.listen === 'test' && event.script.exec) {
22
+ event.script.exec.forEach((line) => {
23
+ const [, match] = line.match(NewmanQaseReporter.qaseIdRegExp) ?? [];
24
+ if (match) {
25
+ ids.push(...match.split(',').map((id) => Number(id)));
26
+ }
27
+ });
28
+ }
29
+ });
30
+ return ids;
31
+ }
32
+ /**
33
+ * @param {PropertyBase<PropertyBaseDefinition>} item
34
+ * @param {string[]} titles
35
+ * @returns {string[]}
36
+ * @private
37
+ */
38
+ static getParentTitles(item, titles = []) {
39
+ const parent = item.parent();
40
+ if (parent) {
41
+ NewmanQaseReporter.getParentTitles(parent, titles);
42
+ }
43
+ if ('name' in item) {
44
+ titles.push(String(item.name));
45
+ }
46
+ return titles;
47
+ }
48
+ /**
49
+ * @param {EventEmitter} emitter
50
+ * @param {NewmanQaseOptionsType} options
51
+ * @param {unknown} _
52
+ * @param {ConfigLoaderInterface} configLoader
53
+ */
54
+ constructor(emitter, options, _, configLoader = new qase_javascript_commons_1.ConfigLoader()) {
55
+ /**
56
+ * @type {Map<string, TestResultType>}
57
+ * @private
58
+ */
59
+ this.pendingResultMap = new Map();
60
+ /**
61
+ * @type {Map<string, number>}
62
+ * @private
63
+ */
64
+ this.timerMap = new Map();
65
+ const config = configLoader.load();
66
+ this.reporter = new qase_javascript_commons_1.QaseReporter({
67
+ ...(0, qase_javascript_commons_1.composeOptions)(options, config),
68
+ frameworkPackage: 'newman',
69
+ frameworkName: 'newman',
70
+ reporterName: 'newman-reporter-qase',
71
+ });
72
+ this.addRunnerListeners(emitter);
73
+ }
74
+ /**
75
+ * @param {EventEmitter} runner
76
+ * @private
77
+ */
78
+ addRunnerListeners(runner) {
79
+ runner.on('beforeItem', (_err, exec) => {
80
+ const { item } = exec;
81
+ const parent = item.parent();
82
+ this.pendingResultMap.set(item.id, {
83
+ id: item.id,
84
+ testOpsId: NewmanQaseReporter.getCaseIds(item.events),
85
+ title: item.name,
86
+ suiteTitle: parent ? NewmanQaseReporter.getParentTitles(parent) : [],
87
+ status: qase_javascript_commons_1.TestStatusEnum.passed,
88
+ duration: 0,
89
+ });
90
+ this.timerMap.set(item.id, Date.now());
91
+ });
92
+ runner.on('assertion', (err, exec) => {
93
+ const { item } = exec;
94
+ const pendingResult = this.pendingResultMap.get(item.id);
95
+ if (pendingResult && err) {
96
+ pendingResult.status = qase_javascript_commons_1.TestStatusEnum.failed;
97
+ pendingResult.error = err;
98
+ }
99
+ });
100
+ runner.on('item', (_err, exec) => {
101
+ const { item } = exec;
102
+ const pendingResult = this.pendingResultMap.get(item.id);
103
+ if (pendingResult) {
104
+ const timer = this.timerMap.get(item.id);
105
+ if (timer) {
106
+ const now = Date.now();
107
+ pendingResult.startTime = timer;
108
+ pendingResult.duration = now - timer;
109
+ pendingResult.endTime = now;
110
+ }
111
+ this.reporter.addTestResult(pendingResult);
112
+ }
113
+ });
114
+ runner.on('beforeDone', () => {
115
+ void this.reporter.publish();
116
+ });
117
+ runner.on('done', () => {
118
+ this.preventExit();
119
+ });
120
+ }
121
+ /**
122
+ * @private
123
+ */
124
+ preventExit() {
125
+ const newmanVersion = (0, qase_javascript_commons_1.getPackageVersion)('newman');
126
+ if (!newmanVersion || semver_1.default.lt(newmanVersion, '5.3.2')) {
127
+ // eslint-disable-next-line @typescript-eslint/unbound-method
128
+ const _exit = process.exit;
129
+ const mutableProcess = process;
130
+ mutableProcess.exit = (code) => {
131
+ process.exitCode = code;
132
+ process.exit = _exit;
133
+ };
134
+ }
135
+ }
136
+ }
137
+ exports.NewmanQaseReporter = NewmanQaseReporter;
138
+ /**
139
+ * @type {RegExp}
140
+ */
141
+ NewmanQaseReporter.qaseIdRegExp = /\/\/\s*?[qQ]ase:\s?((?:[\d]+[\s,]{0,})+)/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "newman-reporter-qase",
3
- "version": "2.0.0-beta.0",
3
+ "version": "2.0.0-beta.1",
4
4
  "description": "Qase TMS Newman Reporter",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  "author": "Parviz Khavari <havaripa@gmail.com>",
40
40
  "license": "Apache-2.0",
41
41
  "dependencies": {
42
- "qase-javascript-commons": "^2.0.0-beta.0",
42
+ "qase-javascript-commons": "^2.0.0-beta.1",
43
43
  "semver": "^7.5.1"
44
44
  },
45
45
  "devDependencies": {