@testomatio/reporter 2.3.7-beta.10-stack-artifacts → 2.3.7-beta.11-fix-vite
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/lib/bin/cli.js +0 -0
- package/lib/bin/reportXml.js +0 -0
- package/lib/bin/startTest.js +3 -3
- package/lib/bin/uploadArtifacts.js +0 -0
- package/lib/client.js +20 -31
- package/lib/pipe/testomatio.js +2 -2
- package/lib/reporter.d.ts +9 -19
- package/lib/reporter.js +5 -40
- package/lib/template/testomatio.hbs +1366 -1026
- package/lib/utils/utils.js +3 -7
- package/package.json +1 -1
- package/src/bin/startTest.js +5 -5
- package/src/client.js +26 -56
- package/src/pipe/testomatio.js +2 -2
- package/src/reporter.js +4 -7
- package/src/template/testomatio.hbs +1366 -1026
- package/src/utils/utils.js +3 -7
package/lib/bin/cli.js
CHANGED
|
File without changes
|
package/lib/bin/reportXml.js
CHANGED
|
File without changes
|
package/lib/bin/startTest.js
CHANGED
|
@@ -35,7 +35,7 @@ while (i < args.length) {
|
|
|
35
35
|
newArgs[0] = 'start';
|
|
36
36
|
}
|
|
37
37
|
else if (arg === '--finish') {
|
|
38
|
-
// Map --finish to finish command
|
|
38
|
+
// Map --finish to finish command
|
|
39
39
|
newArgs[0] = 'finish';
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
@@ -46,8 +46,8 @@ while (i < args.length) {
|
|
|
46
46
|
}
|
|
47
47
|
// Execute the main CLI with mapped arguments
|
|
48
48
|
const child = (0, node_child_process_1.spawn)(process.execPath, [cliPath, ...newArgs], {
|
|
49
|
-
stdio: 'inherit'
|
|
49
|
+
stdio: 'inherit',
|
|
50
50
|
});
|
|
51
|
-
child.on('exit',
|
|
51
|
+
child.on('exit', code => {
|
|
52
52
|
process.exit(code);
|
|
53
53
|
});
|
|
File without changes
|
package/lib/client.js
CHANGED
|
@@ -51,9 +51,7 @@ const node_url_1 = require("node:url");
|
|
|
51
51
|
const uploader_js_1 = require("./uploader.js");
|
|
52
52
|
const utils_js_1 = require("./utils/utils.js");
|
|
53
53
|
const filesize_1 = require("filesize");
|
|
54
|
-
const util_1 = require("util");
|
|
55
54
|
const debug = (0, debug_1.default)('@testomatio/reporter:client');
|
|
56
|
-
const stripColors = util_1.stripVTControlCharacters || ((str) => str?.replace(/\x1b\[[0-9;]*m/g, '') || '');
|
|
57
55
|
// removed __dirname usage, because:
|
|
58
56
|
// 1. replaced with ESM syntax (import.meta.url), but it throws an error on tsc compilation;
|
|
59
57
|
// 2. got error "__dirname already defined" in compiles js code (cjs dir)
|
|
@@ -160,6 +158,17 @@ class Client {
|
|
|
160
158
|
* @returns {Promise<PipeResult[]>}
|
|
161
159
|
*/
|
|
162
160
|
async addTestRun(status, testData) {
|
|
161
|
+
if (!this.pipes || !this.pipes.length)
|
|
162
|
+
this.pipes = await (0, index_js_1.pipesFactory)(this.paramsForPipesFactory || {}, this.pipeStore);
|
|
163
|
+
// all pipes disabled, skipping
|
|
164
|
+
if (!this.pipes?.filter(p => p.isEnabled).length)
|
|
165
|
+
return [];
|
|
166
|
+
if (isTestShouldBeExculedFromReport(testData))
|
|
167
|
+
return [];
|
|
168
|
+
if (status === constants_js_1.STATUS.SKIPPED && process.env.TESTOMATIO_EXCLUDE_SKIPPED) {
|
|
169
|
+
debug('Skipping test from report', testData?.title);
|
|
170
|
+
return []; // do not log skipped tests
|
|
171
|
+
}
|
|
163
172
|
if (!testData)
|
|
164
173
|
testData = {
|
|
165
174
|
title: 'Unknown test',
|
|
@@ -172,12 +181,9 @@ class Client {
|
|
|
172
181
|
/**
|
|
173
182
|
* @type {TestData}
|
|
174
183
|
*/
|
|
175
|
-
const { rid, error = null, steps
|
|
176
|
-
const steps = originalSteps;
|
|
177
|
-
const uploadedFiles = [];
|
|
178
|
-
const stackArtifactsEnabled = (0, utils_js_1.transformEnvVarToBoolean)(process.env.TESTOMATIO_STACK_ARTIFACTS);
|
|
179
|
-
const { time = 0, example = null, files = [], filesBuffers = [], code = null, file, suite_id, test_id, timestamp, links, manuallyAttachedArtifacts, overwrite, tags, } = testData;
|
|
184
|
+
const { rid, error = null, time = 0, example = null, files = [], filesBuffers = [], steps, code = null, title, file, suite_title, suite_id, test_id, timestamp, links, manuallyAttachedArtifacts, overwrite, tags, } = testData;
|
|
180
185
|
let { message = '', meta = {} } = testData;
|
|
186
|
+
// stringify meta values and limit keys and values length to 255
|
|
181
187
|
meta = Object.entries(meta)
|
|
182
188
|
.filter(([, value]) => value !== null && value !== undefined)
|
|
183
189
|
.reduce((acc, [key, value]) => {
|
|
@@ -185,36 +191,19 @@ class Client {
|
|
|
185
191
|
acc[key] = value;
|
|
186
192
|
return acc;
|
|
187
193
|
}, {});
|
|
194
|
+
// Get links from storage using the test context
|
|
188
195
|
const testContext = suite_title ? `${suite_title} ${title}` : title;
|
|
189
196
|
let errorFormatted = '';
|
|
190
197
|
if (error) {
|
|
191
198
|
errorFormatted += this.formatError(error) || '';
|
|
192
199
|
message = error?.message;
|
|
193
200
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (fullLogs && fullLogs.trim().length > 0) {
|
|
198
|
-
uploadedFiles.push(this.uploader.uploadFileAsBuffer(Buffer.from(stripColors(fullLogs), 'utf8'), [this.runId, rid, `logs_${timestamp}.txt`]));
|
|
199
|
-
}
|
|
200
|
-
fullLogs = '';
|
|
201
|
-
}
|
|
202
|
-
if (!this.pipes || !this.pipes.length)
|
|
203
|
-
this.pipes = await (0, index_js_1.pipesFactory)(this.paramsForPipesFactory || {}, this.pipeStore);
|
|
204
|
-
if (!this.pipes?.filter(p => p.isEnabled).length) {
|
|
205
|
-
if (uploadedFiles.length > 0) {
|
|
206
|
-
await Promise.all(uploadedFiles);
|
|
207
|
-
}
|
|
208
|
-
return [];
|
|
209
|
-
}
|
|
210
|
-
if (isTestShouldBeExculedFromReport(testData))
|
|
211
|
-
return [];
|
|
212
|
-
if (status === constants_js_1.STATUS.SKIPPED && process.env.TESTOMATIO_EXCLUDE_SKIPPED) {
|
|
213
|
-
debug('Skipping test from report', testData?.title);
|
|
214
|
-
return [];
|
|
215
|
-
}
|
|
201
|
+
// Attach logs
|
|
202
|
+
const fullLogs = this.formatLogs({ error: errorFormatted, steps, logs: testData.logs });
|
|
203
|
+
// add artifacts
|
|
216
204
|
if (manuallyAttachedArtifacts?.length)
|
|
217
205
|
files.push(...manuallyAttachedArtifacts);
|
|
206
|
+
const uploadedFiles = [];
|
|
218
207
|
for (let f of files) {
|
|
219
208
|
if (!f)
|
|
220
209
|
continue; // f === null
|
|
@@ -296,7 +285,7 @@ class Client {
|
|
|
296
285
|
const uploadedArtifacts = this.uploader.successfulUploads.map(file => ({
|
|
297
286
|
relativePath: file.path.replace(process.cwd(), ''),
|
|
298
287
|
link: file.link,
|
|
299
|
-
sizePretty:
|
|
288
|
+
sizePretty: (0, filesize_1.filesize)(file.size, { round: 0 }).toString(),
|
|
300
289
|
}));
|
|
301
290
|
uploadedArtifacts.forEach(upload => {
|
|
302
291
|
debug(`🟢Uploaded artifact`, `${upload.relativePath},`, 'size:', `${upload.sizePretty},`, 'link:', `${upload.link}`);
|
|
@@ -306,7 +295,7 @@ class Client {
|
|
|
306
295
|
console.log(constants_js_1.APP_PREFIX, `🗄️ ${this.uploader.failedUploads.length} artifacts 🔴${picocolors_1.default.bold('failed')} to upload`);
|
|
307
296
|
const failedUploads = this.uploader.failedUploads.map(file => ({
|
|
308
297
|
relativePath: file.path.replace(process.cwd(), ''),
|
|
309
|
-
sizePretty:
|
|
298
|
+
sizePretty: (0, filesize_1.filesize)(file.size, { round: 0 }).toString(),
|
|
310
299
|
}));
|
|
311
300
|
const pathPadding = Math.max(...failedUploads.map(upload => upload.relativePath.length)) + 1;
|
|
312
301
|
failedUploads.forEach(upload => {
|
package/lib/pipe/testomatio.js
CHANGED
|
@@ -156,7 +156,7 @@ class TestomatioPipe {
|
|
|
156
156
|
if (!this.isEnabled)
|
|
157
157
|
return;
|
|
158
158
|
if (this.batch.isEnabled && this.isEnabled)
|
|
159
|
-
this.batch.intervalFunction = setInterval(this.#batchUpload, this.batch.intervalTime);
|
|
159
|
+
this.batch.intervalFunction = setInterval(() => this.#batchUpload(), this.batch.intervalTime);
|
|
160
160
|
let buildUrl = process.env.BUILD_URL || process.env.CI_JOB_URL || process.env.CIRCLE_BUILD_URL;
|
|
161
161
|
// GitHub Actions Url
|
|
162
162
|
if (!buildUrl && process.env.GITHUB_RUN_ID) {
|
|
@@ -420,7 +420,7 @@ class TestomatioPipe {
|
|
|
420
420
|
if (this.runUrl && this.proceed) {
|
|
421
421
|
const notFinishedMessage = picocolors_1.default.yellow(picocolors_1.default.bold('Run was not finished because of $TESTOMATIO_PROCEED'));
|
|
422
422
|
console.log(constants_js_1.APP_PREFIX, `📊 ${notFinishedMessage}. Report URL: ${picocolors_1.default.magenta(this.runUrl)}`);
|
|
423
|
-
console.log(constants_js_1.APP_PREFIX, `🛬 Run to finish it: TESTOMATIO_RUN=${this.runId} npx
|
|
423
|
+
console.log(constants_js_1.APP_PREFIX, `🛬 Run to finish it: TESTOMATIO_RUN=${this.runId} npx @testomatio/reporter finish`);
|
|
424
424
|
}
|
|
425
425
|
if (this.hasUnmatchedTests) {
|
|
426
426
|
console.log('');
|
package/lib/reporter.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
export { Client };
|
|
2
|
-
export const STATUS: {
|
|
3
|
-
PASSED: string;
|
|
4
|
-
FAILED: string;
|
|
5
|
-
SKIPPED: string;
|
|
6
|
-
FINISHED: string;
|
|
7
|
-
};
|
|
8
1
|
export const artifact: (data: string | {
|
|
9
2
|
path: string;
|
|
10
3
|
type: string;
|
|
@@ -87,7 +80,7 @@ export const label: (key: string, value?: string | null) => void;
|
|
|
87
80
|
export const linkTest: (...testIds: string[]) => void;
|
|
88
81
|
export const linkJira: (...jiraIds: string[]) => void;
|
|
89
82
|
declare namespace _default {
|
|
90
|
-
|
|
83
|
+
let testomatioLogger: {
|
|
91
84
|
"__#13@#originalUserLogger": {
|
|
92
85
|
assert(condition?: boolean, ...data: any[]): void;
|
|
93
86
|
assert(value: any, message?: string, ...optionalParams: any[]): void;
|
|
@@ -155,13 +148,13 @@ declare namespace _default {
|
|
|
155
148
|
}): void;
|
|
156
149
|
prettyObjects: boolean;
|
|
157
150
|
};
|
|
158
|
-
|
|
151
|
+
let artifact: (data: string | {
|
|
159
152
|
path: string;
|
|
160
153
|
type: string;
|
|
161
154
|
name: string;
|
|
162
155
|
}, context?: any) => void;
|
|
163
|
-
|
|
164
|
-
|
|
156
|
+
let log: (...args: any[]) => void;
|
|
157
|
+
let logger: {
|
|
165
158
|
"__#13@#originalUserLogger": {
|
|
166
159
|
assert(condition?: boolean, ...data: any[]): void;
|
|
167
160
|
assert(value: any, message?: string, ...optionalParams: any[]): void;
|
|
@@ -229,15 +222,13 @@ declare namespace _default {
|
|
|
229
222
|
}): void;
|
|
230
223
|
prettyObjects: boolean;
|
|
231
224
|
};
|
|
232
|
-
|
|
225
|
+
let meta: (keyValue: {
|
|
233
226
|
[key: string]: string;
|
|
234
227
|
} | string, value?: string | null) => void;
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
export { Client as TestomatioClient };
|
|
240
|
-
export { STATUS };
|
|
228
|
+
let step: (message: string) => void;
|
|
229
|
+
let label: (key: string, value?: string | null) => void;
|
|
230
|
+
let linkTest: (...testIds: string[]) => void;
|
|
231
|
+
let linkJira: (...jiraIds: string[]) => void;
|
|
241
232
|
}
|
|
242
233
|
export default _default;
|
|
243
234
|
export type ArtifactFunction = typeof import("./reporter-functions.js").default.artifact;
|
|
@@ -246,4 +237,3 @@ export type LoggerService = typeof import("./services/index.js").services.logger
|
|
|
246
237
|
export type MetaFunction = typeof import("./reporter-functions.js").default.keyValue;
|
|
247
238
|
export type StepFunction = typeof import("./reporter-functions.js").default.step;
|
|
248
239
|
export type LabelFunction = typeof import("./reporter-functions.js").default.label;
|
|
249
|
-
import Client from './client.js';
|
package/lib/reporter.js
CHANGED
|
@@ -1,48 +1,13 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.linkJira = exports.linkTest = exports.label = exports.step = exports.meta = exports.logger = exports.log = exports.artifact =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const TestomatioConstants = __importStar(require("./constants.js"));
|
|
6
|
+
exports.linkJira = exports.linkTest = exports.label = exports.step = exports.meta = exports.logger = exports.log = exports.artifact = void 0;
|
|
7
|
+
// import TestomatClient from './client.js';
|
|
8
|
+
// import * as TRConstants from './constants.js';
|
|
43
9
|
const index_js_1 = require("./services/index.js");
|
|
44
10
|
const reporter_functions_js_1 = __importDefault(require("./reporter-functions.js"));
|
|
45
|
-
exports.STATUS = TestomatioConstants.STATUS;
|
|
46
11
|
exports.artifact = reporter_functions_js_1.default.artifact;
|
|
47
12
|
exports.log = reporter_functions_js_1.default.log;
|
|
48
13
|
exports.logger = index_js_1.services.logger;
|
|
@@ -72,6 +37,6 @@ module.exports = {
|
|
|
72
37
|
label: reporter_functions_js_1.default.label,
|
|
73
38
|
linkTest: reporter_functions_js_1.default.linkTest,
|
|
74
39
|
linkJira: reporter_functions_js_1.default.linkJira,
|
|
75
|
-
|
|
76
|
-
|
|
40
|
+
// TestomatClient,
|
|
41
|
+
// TRConstants,
|
|
77
42
|
};
|