@allurereport/plugin-allure2 3.8.1 → 3.9.0
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/converters.js +2 -2
- package/dist/generators.js +11 -8
- package/dist/model.d.ts +1 -1
- package/dist/plugin.js +6 -5
- package/dist/writer.d.ts +1 -0
- package/dist/writer.js +32 -13
- package/package.json +4 -3
package/dist/converters.js
CHANGED
|
@@ -161,11 +161,11 @@ export const convertTestResult = (context, test) => {
|
|
|
161
161
|
beforeStages,
|
|
162
162
|
testStage: testStage,
|
|
163
163
|
flaky,
|
|
164
|
-
|
|
164
|
+
isRetry: test.isRetry,
|
|
165
165
|
newFailed,
|
|
166
166
|
newBroken,
|
|
167
167
|
newPassed,
|
|
168
|
-
retry: test.
|
|
168
|
+
retry: test.isRetry,
|
|
169
169
|
retriesStatusChange,
|
|
170
170
|
retriesCount: retries.length,
|
|
171
171
|
hostId: test.hostId,
|
package/dist/generators.js
CHANGED
|
@@ -6,6 +6,11 @@ import { findUp } from "find-up";
|
|
|
6
6
|
import Handlebars from "handlebars";
|
|
7
7
|
import { byLabels, collapseTree, createTree, createWidget } from "./tree.js";
|
|
8
8
|
import { updateStatistic, updateTime } from "./utils.js";
|
|
9
|
+
const writeConcurrently = async (items, write, concurrency = 64) => {
|
|
10
|
+
for (let i = 0; i < items.length; i += concurrency) {
|
|
11
|
+
await Promise.all(items.slice(i, i + concurrency).map(write));
|
|
12
|
+
}
|
|
13
|
+
};
|
|
9
14
|
const template = `<!DOCTYPE html>
|
|
10
15
|
<html dir="ltr" lang="{{reportLanguage}}">
|
|
11
16
|
<head>
|
|
@@ -45,6 +50,7 @@ const template = `<!DOCTYPE html>
|
|
|
45
50
|
</body>
|
|
46
51
|
</html>
|
|
47
52
|
`;
|
|
53
|
+
const compiledTemplate = Handlebars.compile(template);
|
|
48
54
|
export const getPackageRoot = async () => {
|
|
49
55
|
const packageJsonPath = await findUp("package.json", {
|
|
50
56
|
cwd: dirname(fileURLToPath(import.meta.url)),
|
|
@@ -69,7 +75,6 @@ export const readManifestEntry = async (options) => {
|
|
|
69
75
|
export const generateStaticFiles = async (payload) => {
|
|
70
76
|
const packageRoot = await getPackageRoot();
|
|
71
77
|
const { reportName, reportLanguage, singleFile, reportFiles, reportDataFiles, reportUuid, allureVersion } = payload;
|
|
72
|
-
const compile = Handlebars.compile(template);
|
|
73
78
|
const manifest = await readTemplateManifest(packageRoot, singleFile);
|
|
74
79
|
const headTags = [];
|
|
75
80
|
const bodyTags = [];
|
|
@@ -124,7 +129,7 @@ export const generateStaticFiles = async (payload) => {
|
|
|
124
129
|
createdAt: Date.now(),
|
|
125
130
|
};
|
|
126
131
|
try {
|
|
127
|
-
const html =
|
|
132
|
+
const html = compiledTemplate({
|
|
128
133
|
headTags: headTags.join("\n"),
|
|
129
134
|
bodyTags: bodyTags.join("\n"),
|
|
130
135
|
reportFilesScript: createReportDataScript(reportDataFiles),
|
|
@@ -190,15 +195,13 @@ export const generateTimelineData = async (writer, tests) => {
|
|
|
190
195
|
await writer.writeData("timeline.json", data);
|
|
191
196
|
};
|
|
192
197
|
export const generateTestResults = async (writer, tests) => {
|
|
193
|
-
|
|
194
|
-
await writer.writeTestCase(test);
|
|
195
|
-
}
|
|
198
|
+
await writeConcurrently(tests, (test) => writer.writeTestCase(test));
|
|
196
199
|
};
|
|
197
200
|
export const generateSummaryJson = async (writer, reportName, tests) => {
|
|
198
201
|
const statistic = { total: 0 };
|
|
199
202
|
const time = {};
|
|
200
203
|
tests
|
|
201
|
-
.filter((test) => !test.
|
|
204
|
+
.filter((test) => !test.isRetry)
|
|
202
205
|
.forEach((test) => {
|
|
203
206
|
updateStatistic(statistic, test);
|
|
204
207
|
updateTime(time, test);
|
|
@@ -218,7 +221,7 @@ export const generateExecutorJson = async (writer, executor) => {
|
|
|
218
221
|
};
|
|
219
222
|
export const generateDefaultWidgetData = async (writer, tests, ...fileNames) => {
|
|
220
223
|
const statusChartData = tests
|
|
221
|
-
.filter((test) => !test.
|
|
224
|
+
.filter((test) => !test.isRetry)
|
|
222
225
|
.map(({ uid, name, status, time, extra: { severity = "normal" } }) => {
|
|
223
226
|
return {
|
|
224
227
|
uid,
|
|
@@ -246,7 +249,7 @@ export const generateEmptyTrendData = async (writer, ...fileNames) => {
|
|
|
246
249
|
export const generateTrendData = async (writer, reportName, tests, historyDataPoints) => {
|
|
247
250
|
const statistic = { total: 0 };
|
|
248
251
|
tests
|
|
249
|
-
.filter((test) => !test.
|
|
252
|
+
.filter((test) => !test.isRetry)
|
|
250
253
|
.forEach((test) => {
|
|
251
254
|
updateStatistic(statistic, test);
|
|
252
255
|
});
|
package/dist/model.d.ts
CHANGED
package/dist/plugin.js
CHANGED
|
@@ -18,12 +18,13 @@ export class Allure2Plugin {
|
|
|
18
18
|
const attachmentMap = await generateAttachmentsData(writer, attachmentLinks, (id) => store.attachmentContentById(id));
|
|
19
19
|
const categories = (await store.metadataByKey("allure2_categories")) ?? [];
|
|
20
20
|
const environmentItems = (await store.metadataByKey("allure_environment")) ?? [];
|
|
21
|
-
const tests = await store.allTestResults({
|
|
21
|
+
const tests = await store.allTestResults({ includeRetries: true });
|
|
22
|
+
const related = await store.relatedByTestResultIds(tests.map(({ id }) => id));
|
|
22
23
|
const allTr = [];
|
|
23
24
|
for (const value of tests) {
|
|
24
|
-
const fixtures =
|
|
25
|
-
const retries =
|
|
26
|
-
const history =
|
|
25
|
+
const fixtures = related.fixturesByTrId.get(value.id) ?? [];
|
|
26
|
+
const retries = related.retriesByTrId.get(value.id) ?? [];
|
|
27
|
+
const history = related.historyByTrId.get(value.id) ?? [];
|
|
27
28
|
const allure2TestResult = convertTestResult({
|
|
28
29
|
attachmentMap,
|
|
29
30
|
fixtures,
|
|
@@ -34,7 +35,7 @@ export class Allure2Plugin {
|
|
|
34
35
|
allTr.push(allure2TestResult);
|
|
35
36
|
}
|
|
36
37
|
await generateTestResults(writer, allTr);
|
|
37
|
-
const displayedTr = allTr.filter((atr) => !atr.
|
|
38
|
+
const displayedTr = allTr.filter((atr) => !atr.isRetry);
|
|
38
39
|
const treeLabelNamesFactory = (labelNames) => preciseTreeLabels(labelNames, displayedTr, (tr) => {
|
|
39
40
|
if (tr.labels) {
|
|
40
41
|
return tr.labels.map(({ name }) => name);
|
package/dist/writer.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface Allure2DataWriter {
|
|
|
11
11
|
writeAttachment(source: string, file: ResultFile): Promise<void>;
|
|
12
12
|
}
|
|
13
13
|
export declare class FileSystemReportDataWriter implements Allure2DataWriter {
|
|
14
|
+
#private;
|
|
14
15
|
private readonly output;
|
|
15
16
|
constructor(output: string);
|
|
16
17
|
writeData(fileName: string, data: any): Promise<void>;
|
package/dist/writer.js
CHANGED
|
@@ -1,37 +1,56 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
1
7
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
8
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
11
|
};
|
|
6
|
-
var _InMemoryReportDataWriter_data;
|
|
12
|
+
var _FileSystemReportDataWriter_dataDir, _FileSystemReportDataWriter_widgetsDir, _FileSystemReportDataWriter_testCasesDir, _FileSystemReportDataWriter_attachmentsDir, _FileSystemReportDataWriter_dataDirReady, _FileSystemReportDataWriter_widgetsDirReady, _FileSystemReportDataWriter_testCasesDirReady, _FileSystemReportDataWriter_attachmentsDirReady, _InMemoryReportDataWriter_data;
|
|
7
13
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
8
14
|
import { resolve } from "node:path";
|
|
9
15
|
import { joinPosixPath } from "@allurereport/core-api";
|
|
10
16
|
export class FileSystemReportDataWriter {
|
|
11
17
|
constructor(output) {
|
|
12
18
|
this.output = output;
|
|
19
|
+
_FileSystemReportDataWriter_dataDir.set(this, void 0);
|
|
20
|
+
_FileSystemReportDataWriter_widgetsDir.set(this, void 0);
|
|
21
|
+
_FileSystemReportDataWriter_testCasesDir.set(this, void 0);
|
|
22
|
+
_FileSystemReportDataWriter_attachmentsDir.set(this, void 0);
|
|
23
|
+
_FileSystemReportDataWriter_dataDirReady.set(this, void 0);
|
|
24
|
+
_FileSystemReportDataWriter_widgetsDirReady.set(this, void 0);
|
|
25
|
+
_FileSystemReportDataWriter_testCasesDirReady.set(this, void 0);
|
|
26
|
+
_FileSystemReportDataWriter_attachmentsDirReady.set(this, void 0);
|
|
27
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_dataDir, resolve(this.output, "data"), "f");
|
|
28
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_widgetsDir, resolve(this.output, "widgets"), "f");
|
|
29
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_testCasesDir, resolve(this.output, "data", "test-cases"), "f");
|
|
30
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_attachmentsDir, resolve(this.output, "data", "attachments"), "f");
|
|
31
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_dataDirReady, mkdir(__classPrivateFieldGet(this, _FileSystemReportDataWriter_dataDir, "f"), { recursive: true }), "f");
|
|
32
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_widgetsDirReady, mkdir(__classPrivateFieldGet(this, _FileSystemReportDataWriter_widgetsDir, "f"), { recursive: true }), "f");
|
|
33
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_testCasesDirReady, mkdir(__classPrivateFieldGet(this, _FileSystemReportDataWriter_testCasesDir, "f"), { recursive: true }), "f");
|
|
34
|
+
__classPrivateFieldSet(this, _FileSystemReportDataWriter_attachmentsDirReady, mkdir(__classPrivateFieldGet(this, _FileSystemReportDataWriter_attachmentsDir, "f"), { recursive: true }), "f");
|
|
13
35
|
}
|
|
14
36
|
async writeData(fileName, data) {
|
|
15
|
-
|
|
16
|
-
await
|
|
17
|
-
await writeFile(resolve(distFolder, fileName), JSON.stringify(data), { encoding: "utf-8" });
|
|
37
|
+
await __classPrivateFieldGet(this, _FileSystemReportDataWriter_dataDirReady, "f");
|
|
38
|
+
await writeFile(resolve(__classPrivateFieldGet(this, _FileSystemReportDataWriter_dataDir, "f"), fileName), JSON.stringify(data), { encoding: "utf-8" });
|
|
18
39
|
}
|
|
19
40
|
async writeWidget(fileName, data) {
|
|
20
|
-
|
|
21
|
-
await
|
|
22
|
-
await writeFile(resolve(distFolder, fileName), JSON.stringify(data), { encoding: "utf-8" });
|
|
41
|
+
await __classPrivateFieldGet(this, _FileSystemReportDataWriter_widgetsDirReady, "f");
|
|
42
|
+
await writeFile(resolve(__classPrivateFieldGet(this, _FileSystemReportDataWriter_widgetsDir, "f"), fileName), JSON.stringify(data), { encoding: "utf-8" });
|
|
23
43
|
}
|
|
24
44
|
async writeTestCase(test) {
|
|
25
|
-
|
|
26
|
-
await
|
|
27
|
-
await writeFile(resolve(distFolder, `${test.uid}.json`), JSON.stringify(test), { encoding: "utf-8" });
|
|
45
|
+
await __classPrivateFieldGet(this, _FileSystemReportDataWriter_testCasesDirReady, "f");
|
|
46
|
+
await writeFile(resolve(__classPrivateFieldGet(this, _FileSystemReportDataWriter_testCasesDir, "f"), `${test.uid}.json`), JSON.stringify(test), { encoding: "utf-8" });
|
|
28
47
|
}
|
|
29
48
|
async writeAttachment(source, file) {
|
|
30
|
-
|
|
31
|
-
await
|
|
32
|
-
await file.writeTo(resolve(distFolder, source));
|
|
49
|
+
await __classPrivateFieldGet(this, _FileSystemReportDataWriter_attachmentsDirReady, "f");
|
|
50
|
+
await file.writeTo(resolve(__classPrivateFieldGet(this, _FileSystemReportDataWriter_attachmentsDir, "f"), source));
|
|
33
51
|
}
|
|
34
52
|
}
|
|
53
|
+
_FileSystemReportDataWriter_dataDir = new WeakMap(), _FileSystemReportDataWriter_widgetsDir = new WeakMap(), _FileSystemReportDataWriter_testCasesDir = new WeakMap(), _FileSystemReportDataWriter_attachmentsDir = new WeakMap(), _FileSystemReportDataWriter_dataDirReady = new WeakMap(), _FileSystemReportDataWriter_widgetsDirReady = new WeakMap(), _FileSystemReportDataWriter_testCasesDirReady = new WeakMap(), _FileSystemReportDataWriter_attachmentsDirReady = new WeakMap();
|
|
35
54
|
export class InMemoryReportDataWriter {
|
|
36
55
|
constructor() {
|
|
37
56
|
_InMemoryReportDataWriter_data.set(this, {});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allurereport/plugin-allure2",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0",
|
|
4
4
|
"description": "The classic version of Allure HTML report",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"allure",
|
|
@@ -30,14 +30,15 @@
|
|
|
30
30
|
"lint:fix": "oxlint --import-plugin --fix src test features stories"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@allurereport/core-api": "3.
|
|
34
|
-
"@allurereport/plugin-api": "3.
|
|
33
|
+
"@allurereport/core-api": "3.9.0",
|
|
34
|
+
"@allurereport/plugin-api": "3.9.0",
|
|
35
35
|
"find-up": "^8.0.0",
|
|
36
36
|
"handlebars": "^4.7.9"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^20.17.9",
|
|
40
40
|
"@vitest/runner": "^2.1.9",
|
|
41
|
+
"allure-js-commons": "^3.3.3",
|
|
41
42
|
"allure-vitest": "^3.3.3",
|
|
42
43
|
"rimraf": "^6.0.1",
|
|
43
44
|
"typescript": "^5.6.3",
|