qase-javascript-commons 2.0.0-beta.0 → 2.0.0-beta.10

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 (99) hide show
  1. package/README.md +74 -97
  2. package/changelog.md +159 -0
  3. package/dist/config/config-loader-interface.d.ts +4 -0
  4. package/dist/config/config-loader-interface.js +2 -0
  5. package/dist/config/config-loader.d.ts +10 -0
  6. package/dist/config/config-loader.js +58 -0
  7. package/dist/config/config-type.d.ts +2 -0
  8. package/dist/config/config-type.js +2 -0
  9. package/dist/config/config-validation-schema.d.ts +6 -0
  10. package/dist/config/config-validation-schema.js +163 -0
  11. package/dist/config/index.d.ts +4 -0
  12. package/dist/config/index.js +7 -0
  13. package/dist/env/env-enum.d.ts +54 -0
  14. package/dist/env/env-enum.js +64 -0
  15. package/dist/env/env-to-config.d.ts +7 -0
  16. package/dist/env/env-to-config.js +46 -0
  17. package/dist/env/env-type.d.ts +24 -0
  18. package/dist/env/env-type.js +3 -0
  19. package/dist/env/env-validation-schema.d.ts +6 -0
  20. package/dist/env/env-validation-schema.js +93 -0
  21. package/dist/env/index.d.ts +4 -0
  22. package/dist/env/index.js +13 -0
  23. package/dist/formatter/formatter-interface.d.ts +3 -0
  24. package/dist/formatter/formatter-interface.js +2 -0
  25. package/dist/formatter/index.d.ts +3 -0
  26. package/dist/formatter/index.js +7 -0
  27. package/dist/formatter/json-formatter.d.ts +13 -0
  28. package/dist/formatter/json-formatter.js +27 -0
  29. package/dist/formatter/jsonp-formatter.d.ts +13 -0
  30. package/dist/formatter/jsonp-formatter.js +28 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.js +26 -0
  33. package/dist/models/attachment.d.ts +9 -0
  34. package/dist/models/attachment.js +2 -0
  35. package/dist/models/execution-sum.d.ts +6 -0
  36. package/dist/models/execution-sum.js +2 -0
  37. package/dist/models/host-data.d.ts +11 -0
  38. package/dist/models/host-data.js +2 -0
  39. package/dist/models/index.d.ts +6 -0
  40. package/dist/models/index.js +9 -0
  41. package/dist/models/report.d.ts +14 -0
  42. package/dist/models/report.js +2 -0
  43. package/dist/models/short-result.d.ts +7 -0
  44. package/dist/models/short-result.js +2 -0
  45. package/dist/models/stats.d.ts +8 -0
  46. package/dist/models/stats.js +2 -0
  47. package/dist/models/step-data.d.ts +9 -0
  48. package/dist/models/step-data.js +2 -0
  49. package/dist/models/step-execution.d.ts +11 -0
  50. package/dist/models/step-execution.js +9 -0
  51. package/dist/models/test-execution.d.ts +19 -0
  52. package/dist/models/test-execution.js +15 -0
  53. package/dist/models/test-result.d.ts +29 -0
  54. package/dist/models/test-result.js +2 -0
  55. package/dist/models/test-step.d.ts +16 -0
  56. package/dist/models/test-step.js +8 -0
  57. package/dist/options/composeOptions.d.ts +9 -0
  58. package/dist/options/composeOptions.js +12 -0
  59. package/dist/options/index.d.ts +3 -0
  60. package/dist/options/index.js +7 -0
  61. package/dist/options/mode-enum.d.ts +8 -0
  62. package/dist/options/mode-enum.js +12 -0
  63. package/dist/options/options-type.d.ts +33 -0
  64. package/dist/options/options-type.js +3 -0
  65. package/dist/qase.d.ts +97 -0
  66. package/dist/qase.js +301 -0
  67. package/dist/reporters/abstract-reporter.d.ts +51 -0
  68. package/dist/reporters/abstract-reporter.js +59 -0
  69. package/dist/reporters/index.d.ts +3 -0
  70. package/dist/reporters/index.js +9 -0
  71. package/dist/reporters/report-reporter.d.ts +46 -0
  72. package/dist/reporters/report-reporter.js +185 -0
  73. package/dist/reporters/testops-reporter.d.ts +179 -0
  74. package/dist/reporters/testops-reporter.js +398 -0
  75. package/dist/utils/custom-boundary.d.ts +26 -0
  76. package/dist/utils/custom-boundary.js +30 -0
  77. package/dist/utils/disabled-exception.d.ts +6 -0
  78. package/dist/utils/disabled-exception.js +10 -0
  79. package/dist/utils/get-package-version.d.ts +5 -0
  80. package/dist/utils/get-package-version.js +25 -0
  81. package/dist/utils/is-axios-error.d.ts +6 -0
  82. package/dist/utils/is-axios-error.js +11 -0
  83. package/dist/utils/logger.d.ts +29 -0
  84. package/dist/utils/logger.js +121 -0
  85. package/dist/utils/mimeTypes.d.ts +5 -0
  86. package/dist/utils/mimeTypes.js +41 -0
  87. package/dist/utils/qase-error.d.ts +18 -0
  88. package/dist/utils/qase-error.js +15 -0
  89. package/dist/utils/validate-json.d.ts +20 -0
  90. package/dist/utils/validate-json.js +40 -0
  91. package/dist/writer/driver-enum.d.ts +13 -0
  92. package/dist/writer/driver-enum.js +18 -0
  93. package/dist/writer/fs-writer.d.ts +40 -0
  94. package/dist/writer/fs-writer.js +126 -0
  95. package/dist/writer/index.d.ts +3 -0
  96. package/dist/writer/index.js +8 -0
  97. package/dist/writer/writer-interface.d.ts +7 -0
  98. package/dist/writer/writer-interface.js +2 -0
  99. package/package.json +6 -2
@@ -0,0 +1,46 @@
1
+ import { AbstractReporter } from './abstract-reporter';
2
+ import { WriterInterface } from '../writer';
3
+ import { LoggerInterface } from '../utils/logger';
4
+ /**
5
+ * @class ReportReporter
6
+ * @extends AbstractReporter
7
+ */
8
+ export declare class ReportReporter extends AbstractReporter {
9
+ private writer;
10
+ private readonly environment;
11
+ private readonly runId;
12
+ private startTime;
13
+ /**
14
+ * @param {LoggerInterface} logger
15
+ * @param {WriterInterface} writer
16
+ * @param {string | undefined} environment
17
+ * @param {number | undefined} runId
18
+ */
19
+ constructor(logger: LoggerInterface, writer: WriterInterface, environment?: string, runId?: number);
20
+ /**
21
+ * @returns {Promise<void>}
22
+ */
23
+ startTestRun(): Promise<void>;
24
+ /**
25
+ * @returns {Promise<void>}
26
+ *
27
+ */
28
+ publish(): Promise<void>;
29
+ /**
30
+ * @param {TestStepType[]} steps
31
+ * @returns {TestStepType[]}
32
+ */
33
+ private copyStepAttachments;
34
+ /**
35
+ * @returns {HostData}
36
+ */
37
+ private getHostInfo;
38
+ /**
39
+ * @returns {string}
40
+ */
41
+ private getComputerName;
42
+ /**
43
+ * @returns {string}
44
+ */
45
+ private getDetailedOSInfo;
46
+ }
@@ -0,0 +1,185 @@
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.ReportReporter = void 0;
27
+ const abstract_reporter_1 = require("./abstract-reporter");
28
+ const models_1 = require("../models");
29
+ const os = __importStar(require("os"));
30
+ const cp = __importStar(require("child_process"));
31
+ const process = __importStar(require("process"));
32
+ /**
33
+ * @class ReportReporter
34
+ * @extends AbstractReporter
35
+ */
36
+ class ReportReporter extends abstract_reporter_1.AbstractReporter {
37
+ /**
38
+ * @param {LoggerInterface} logger
39
+ * @param {WriterInterface} writer
40
+ * @param {string | undefined} environment
41
+ * @param {number | undefined} runId
42
+ */
43
+ constructor(logger, writer, environment, runId) {
44
+ super(logger);
45
+ this.writer = writer;
46
+ this.startTime = Date.now();
47
+ this.environment = environment;
48
+ this.runId = runId;
49
+ }
50
+ /**
51
+ * @returns {Promise<void>}
52
+ */
53
+ // eslint-disable-next-line @typescript-eslint/require-await
54
+ async startTestRun() {
55
+ this.startTime = Date.now();
56
+ }
57
+ /**
58
+ * @returns {Promise<void>}
59
+ *
60
+ */
61
+ async publish() {
62
+ this.writer.clearPreviousResults();
63
+ const report = {
64
+ title: 'Test report',
65
+ execution: {
66
+ start_time: this.startTime,
67
+ end_time: Date.now(),
68
+ duration: Date.now() - this.startTime,
69
+ cumulative_duration: 0,
70
+ },
71
+ stats: {
72
+ total: 0,
73
+ passed: 0,
74
+ failed: 0,
75
+ skipped: 0,
76
+ broken: 0,
77
+ muted: 0,
78
+ },
79
+ results: [],
80
+ threads: [],
81
+ suites: [],
82
+ environment: this.environment ?? '',
83
+ host_data: this.getHostInfo(),
84
+ };
85
+ for (const result of this.results) {
86
+ report.stats.total++;
87
+ switch (result.execution.status) {
88
+ case models_1.TestStatusEnum.passed:
89
+ report.stats.passed++;
90
+ break;
91
+ case models_1.TestStatusEnum.failed:
92
+ report.stats.failed++;
93
+ break;
94
+ case models_1.TestStatusEnum.skipped:
95
+ report.stats.skipped++;
96
+ break;
97
+ case models_1.TestStatusEnum.invalid:
98
+ report.stats.broken++;
99
+ break;
100
+ case models_1.TestStatusEnum.blocked:
101
+ report.stats.muted++;
102
+ break;
103
+ }
104
+ if (result.execution.thread && !report.threads.includes(result.execution.thread)) {
105
+ report.threads.push(result.execution.thread);
106
+ }
107
+ report.execution.cumulative_duration += result.execution.duration ?? 0;
108
+ report.results.push({
109
+ duration: result.execution.duration ?? 0,
110
+ id: result.id,
111
+ status: result.execution.status,
112
+ thread: result.execution.thread,
113
+ title: result.title,
114
+ });
115
+ if (result.attachments.length > 0) {
116
+ result.attachments = this.writer.writeAttachment(result.attachments);
117
+ }
118
+ result.steps = this.copyStepAttachments(result.steps);
119
+ result.run_id = this.runId ?? null;
120
+ await this.writer.writeTestResult(result);
121
+ }
122
+ const path = await this.writer.writeReport(report);
123
+ this.logger.log(`Report saved to ${path}`);
124
+ }
125
+ /**
126
+ * @param {TestStepType[]} steps
127
+ * @returns {TestStepType[]}
128
+ */
129
+ copyStepAttachments(steps) {
130
+ for (const step of steps) {
131
+ if (step.attachments.length > 0) {
132
+ step.attachments = this.writer.writeAttachment(step.attachments);
133
+ }
134
+ if (step.steps.length > 0) {
135
+ step.steps = this.copyStepAttachments(step.steps);
136
+ }
137
+ }
138
+ return steps;
139
+ }
140
+ /**
141
+ * @returns {HostData}
142
+ */
143
+ getHostInfo() {
144
+ return {
145
+ system: process.platform,
146
+ node: this.getComputerName(),
147
+ release: os.release(),
148
+ version: this.getDetailedOSInfo(),
149
+ machine: os.arch(),
150
+ python: '',
151
+ pip: '',
152
+ node_version: cp.execSync('node --version').toString().trim(),
153
+ npm: cp.execSync('npm --version').toString().trim(),
154
+ };
155
+ }
156
+ /**
157
+ * @returns {string}
158
+ */
159
+ getComputerName() {
160
+ switch (process.platform) {
161
+ case 'win32':
162
+ return process.env['COMPUTERNAME'] ?? '';
163
+ case 'darwin':
164
+ return cp.execSync('scutil --get ComputerName').toString().trim();
165
+ case 'linux': {
166
+ const prettyname = cp.execSync('hostnamectl --pretty').toString().trim();
167
+ return prettyname === '' ? os.hostname() : prettyname;
168
+ }
169
+ default:
170
+ return os.hostname();
171
+ }
172
+ }
173
+ /**
174
+ * @returns {string}
175
+ */
176
+ getDetailedOSInfo() {
177
+ if (process.platform === 'darwin') {
178
+ return cp.execSync('uname -a').toString().trim();
179
+ }
180
+ else {
181
+ return `${os.type()} ${os.release()} ${os.arch()}`;
182
+ }
183
+ }
184
+ }
185
+ exports.ReportReporter = ReportReporter;
@@ -0,0 +1,179 @@
1
+ import { QaseApiInterface, ResultStepStatus, TestStepResultCreateStatusEnum } from 'qaseio';
2
+ import { AbstractReporter } from './abstract-reporter';
3
+ import { StepStatusEnum, TestResultType, TestStatusEnum } from '../models';
4
+ import { LoggerInterface } from '../utils/logger';
5
+ export type TestOpsRunType = {
6
+ id?: number | undefined;
7
+ title: string;
8
+ description: string;
9
+ complete?: boolean | undefined;
10
+ };
11
+ export type TestOpsPlanType = {
12
+ id?: number | undefined;
13
+ };
14
+ export type TestOpsBatchType = {
15
+ size?: number | undefined;
16
+ };
17
+ export type TestOpsOptionsType = {
18
+ project: string;
19
+ uploadAttachments?: boolean | undefined;
20
+ run: TestOpsRunType;
21
+ plan: TestOpsPlanType;
22
+ batch?: TestOpsBatchType;
23
+ defect?: boolean | undefined;
24
+ useV2?: boolean | undefined;
25
+ };
26
+ /**
27
+ * @class TestOpsReporter
28
+ * @extends AbstractReporter
29
+ */
30
+ export declare class TestOpsReporter extends AbstractReporter {
31
+ private api;
32
+ /**
33
+ * @type {Record<TestStatusEnum, string>}
34
+ */
35
+ static statusMap: Record<TestStatusEnum, string>;
36
+ /**
37
+ * @type {Record<StepStatusEnum, ResultStepStatus>}
38
+ */
39
+ static stepStatusMap: Record<StepStatusEnum, ResultStepStatus>;
40
+ /**
41
+ * @type {Record<StepStatusEnum, ResultStepStatus>}
42
+ */
43
+ static stepStatusMapV1: Record<StepStatusEnum, TestStepResultCreateStatusEnum>;
44
+ /**
45
+ * @type {string}
46
+ * @private
47
+ */
48
+ private readonly baseUrl;
49
+ /**
50
+ * @type {string}
51
+ * @private
52
+ */
53
+ private readonly projectCode;
54
+ /**
55
+ * @type {boolean | undefined}
56
+ * @private
57
+ */
58
+ private readonly isUploadAttachments;
59
+ /**
60
+ * @type {TestOpsRunType}
61
+ * @private
62
+ */
63
+ private run;
64
+ /**
65
+ * @type { number | undefined}
66
+ * @private
67
+ */
68
+ private readonly environment;
69
+ /**
70
+ * @type {TestResultType[]}
71
+ * @private
72
+ */
73
+ private readonly batchSize;
74
+ /**
75
+ * @type {boolean | undefined}
76
+ * @private
77
+ */
78
+ private readonly useV2;
79
+ /**
80
+ * @type {boolean | undefined}
81
+ * @private
82
+ */
83
+ private readonly defect;
84
+ /**
85
+ * @type {number}
86
+ * @private
87
+ */
88
+ private firstIndex;
89
+ /**
90
+ * @type {boolean}
91
+ * @private
92
+ */
93
+ private isTestRunReady;
94
+ /**
95
+ * @param {LoggerInterface} logger
96
+ * @param {ReporterOptionsType & TestOpsOptionsType} options
97
+ * @param {QaseApiInterface} api
98
+ * @param {number} environment
99
+ */
100
+ constructor(logger: LoggerInterface, options: TestOpsOptionsType, api: QaseApiInterface, environment?: number);
101
+ /**
102
+ * @returns {Promise<void>}
103
+ */
104
+ startTestRun(): Promise<void>;
105
+ /**
106
+ * @param {TestResultType} result
107
+ * @returns {Promise<void>}
108
+ */
109
+ addTestResult(result: TestResultType): Promise<void>;
110
+ /**
111
+ * @returns {Promise<void>}
112
+ */
113
+ private checkOrCreateTestRun;
114
+ /**
115
+ * @returns {Promise<void>}
116
+ * @param testResults
117
+ * @private
118
+ */
119
+ private publishResults;
120
+ /**
121
+ * @returns {Promise<void>}
122
+ */
123
+ publish(): Promise<void>;
124
+ /**
125
+ * @param {TestResultType} result
126
+ * @returns Promise<ResultCreateV2>
127
+ * @private
128
+ */
129
+ private transformTestResult;
130
+ /**
131
+ * @param {TestResultType} result
132
+ * @returns Promise<ResultCreate>
133
+ * @private
134
+ */
135
+ private transformTestResultV1;
136
+ /**
137
+ * @returns {ResultExecution}
138
+ * @private
139
+ * @param {TestExecution} exec
140
+ */
141
+ private getExecution;
142
+ /**
143
+ * @param {Relation | null} relation
144
+ * @returns {ResultRelations}
145
+ * @private
146
+ */
147
+ private getRelation;
148
+ /**
149
+ * @param {TestStepType[]} steps
150
+ * @returns Promise<ResultStep[]>
151
+ * @private
152
+ */
153
+ private transformSteps;
154
+ /**
155
+ * @param {TestStepType[]} steps
156
+ * @returns Promise<TestStepResultCreate[]>
157
+ * @private
158
+ */
159
+ private transformStepsV1;
160
+ /**
161
+ * @param {number} runId
162
+ * @returns {Promise<void>}
163
+ * @private
164
+ */
165
+ private checkRun;
166
+ /**
167
+ * @param {string} title
168
+ * @param {string} description
169
+ * @param {number | undefined} environment
170
+ * @returns {Promise<IdResponse>}
171
+ * @private
172
+ */
173
+ private createRun;
174
+ /**
175
+ * @returns {Promise<void>}
176
+ * @private
177
+ */
178
+ private uploadAttachments;
179
+ }