@allurereport/plugin-awesome 3.0.0-beta.10 → 3.0.0-beta.11
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/charts.d.ts +1 -1
- package/dist/charts.js +1 -1
- package/dist/converters.js +2 -0
- package/dist/generators.d.ts +11 -6
- package/dist/generators.js +60 -12
- package/dist/index.d.ts +1 -0
- package/dist/model.d.ts +2 -1
- package/dist/plugin.d.ts +2 -1
- package/dist/plugin.js +31 -6
- package/package.json +5 -5
package/dist/charts.d.ts
CHANGED
|
@@ -11,4 +11,4 @@ export type TestResultChartData = {
|
|
|
11
11
|
export declare const d3Arc: import("d3-shape").Arc<any, PieArcDatum<TestResultSlice>>;
|
|
12
12
|
export declare const d3Pie: import("d3-shape").Pie<any, TestResultSlice>;
|
|
13
13
|
export declare const getPercentage: (value: number, total: number) => number;
|
|
14
|
-
export declare const
|
|
14
|
+
export declare const getPieChartData: (stats: Statistic) => TestResultChartData;
|
package/dist/charts.js
CHANGED
|
@@ -6,7 +6,7 @@ export const d3Pie = pie()
|
|
|
6
6
|
.padAngle(0.03)
|
|
7
7
|
.sortValues((a, b) => a - b);
|
|
8
8
|
export const getPercentage = (value, total) => Math.floor((value / total) * 10000) / 100;
|
|
9
|
-
export const
|
|
9
|
+
export const getPieChartData = (stats) => {
|
|
10
10
|
const convertedStatuses = statusesList
|
|
11
11
|
.filter((status) => !!stats?.[status])
|
|
12
12
|
.map((status) => ({
|
package/dist/converters.js
CHANGED
package/dist/generators.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { type AttachmentLink, type EnvironmentItem
|
|
2
|
-
import { type AllureStore, type ReportFiles, type ResultFile } from "@allurereport/plugin-api";
|
|
1
|
+
import { type AttachmentLink, type EnvironmentItem } from "@allurereport/core-api";
|
|
2
|
+
import { type AllureStore, type ReportFiles, type ResultFile, type TestResultFilter } from "@allurereport/plugin-api";
|
|
3
3
|
import type { AwesomeTestResult } from "@allurereport/web-awesome";
|
|
4
4
|
import type { AwesomeOptions, TemplateManifest } from "./model.js";
|
|
5
5
|
import type { AwesomeDataWriter, ReportFile } from "./writer.js";
|
|
6
6
|
export declare const readTemplateManifest: (singleFileMode?: boolean) => Promise<TemplateManifest>;
|
|
7
|
-
export declare const generateTestResults: (writer: AwesomeDataWriter, store: AllureStore) => Promise<AwesomeTestResult[]>;
|
|
8
|
-
export declare const
|
|
7
|
+
export declare const generateTestResults: (writer: AwesomeDataWriter, store: AllureStore, filter?: TestResultFilter) => Promise<AwesomeTestResult[]>;
|
|
8
|
+
export declare const generateTestCases: (writer: AwesomeDataWriter, trs: AwesomeTestResult[]) => Promise<void>;
|
|
9
|
+
export declare const generateTestEnvGroups: (writer: AwesomeDataWriter, store: AllureStore) => Promise<void>;
|
|
10
|
+
export declare const generateNav: (writer: AwesomeDataWriter, trs: AwesomeTestResult[], filename?: string) => Promise<void>;
|
|
11
|
+
export declare const generateTree: (writer: AwesomeDataWriter, treeFilename: string, labels: string[], tests: AwesomeTestResult[]) => Promise<void>;
|
|
9
12
|
export declare const generateEnvironmentJson: (writer: AwesomeDataWriter, env: EnvironmentItem[]) => Promise<void>;
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const
|
|
13
|
+
export declare const generateEnvirontmentsList: (writer: AwesomeDataWriter, store: AllureStore) => Promise<void>;
|
|
14
|
+
export declare const generateVariables: (writer: AwesomeDataWriter, store: AllureStore) => Promise<void>;
|
|
15
|
+
export declare const generateStatistic: (writer: AwesomeDataWriter, store: AllureStore, filter?: TestResultFilter) => Promise<void>;
|
|
16
|
+
export declare const generatePieChart: (writer: AwesomeDataWriter, store: AllureStore, filter?: TestResultFilter) => Promise<void>;
|
|
12
17
|
export declare const generateAttachmentsFiles: (writer: AwesomeDataWriter, attachmentLinks: AttachmentLink[], contentFunction: (id: string) => Promise<ResultFile | undefined>) => Promise<Map<string, string> | undefined>;
|
|
13
18
|
export declare const generateHistoryDataPoints: (writer: AwesomeDataWriter, store: AllureStore) => Promise<Map<string, string>>;
|
|
14
19
|
export declare const generateStaticFiles: (payload: AwesomeOptions & {
|
package/dist/generators.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { compareBy, incrementStatistic, nullsLast, ordinal, } from "@allurereport/core-api";
|
|
2
|
-
import { filterTree } from "@allurereport/plugin-api";
|
|
2
|
+
import { filterTree, } from "@allurereport/plugin-api";
|
|
3
3
|
import { createTreeByLabels, sortTree, transformTree } from "@allurereport/plugin-api";
|
|
4
4
|
import { createBaseUrlScript, createFontLinkTag, createReportDataScript, createScriptTag, createStylesLinkTag, } from "@allurereport/web-commons";
|
|
5
5
|
import Handlebars from "handlebars";
|
|
6
6
|
import { readFile } from "node:fs/promises";
|
|
7
7
|
import { createRequire } from "node:module";
|
|
8
8
|
import { basename, join } from "node:path";
|
|
9
|
-
import {
|
|
9
|
+
import { getPieChartData } from "./charts.js";
|
|
10
10
|
import { convertFixtureResult, convertTestResult } from "./converters.js";
|
|
11
11
|
const require = createRequire(import.meta.url);
|
|
12
12
|
const template = `<!DOCTYPE html>
|
|
@@ -73,8 +73,8 @@ const createBreadcrumbs = (convertedTr) => {
|
|
|
73
73
|
return acc;
|
|
74
74
|
}, []);
|
|
75
75
|
};
|
|
76
|
-
export const generateTestResults = async (writer, store) => {
|
|
77
|
-
const allTr = await store.allTestResults({ includeHidden: true });
|
|
76
|
+
export const generateTestResults = async (writer, store, filter) => {
|
|
77
|
+
const allTr = (await store.allTestResults({ includeHidden: true })).filter((tr) => (filter ? filter(tr) : true));
|
|
78
78
|
let convertedTrs = [];
|
|
79
79
|
for (const tr of allTr) {
|
|
80
80
|
const trFixtures = await store.fixturesByTrId(tr.id);
|
|
@@ -99,10 +99,24 @@ export const generateTestResults = async (writer, store) => {
|
|
|
99
99
|
for (const convertedTr of convertedTrs) {
|
|
100
100
|
await writer.writeTestCase(convertedTr);
|
|
101
101
|
}
|
|
102
|
-
await writer.writeWidget("nav.json", convertedTrs.filter(({ hidden }) => !hidden).map(({ id }) => id));
|
|
103
102
|
return convertedTrs;
|
|
104
103
|
};
|
|
105
|
-
export const
|
|
104
|
+
export const generateTestCases = async (writer, trs) => {
|
|
105
|
+
for (const tr of trs) {
|
|
106
|
+
await writer.writeTestCase(tr);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
export const generateTestEnvGroups = async (writer, store) => {
|
|
110
|
+
const groups = await store.allTestEnvGroups();
|
|
111
|
+
for (const group of groups) {
|
|
112
|
+
const src = join("test-env-groups", `${group.id}.json`);
|
|
113
|
+
await writer.writeData(src, group);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
export const generateNav = async (writer, trs, filename = "nav.json") => {
|
|
117
|
+
await writer.writeWidget(filename, trs.filter(({ hidden }) => !hidden).map(({ id }) => id));
|
|
118
|
+
};
|
|
119
|
+
export const generateTree = async (writer, treeFilename, labels, tests) => {
|
|
106
120
|
const visibleTests = tests.filter((test) => !test.hidden);
|
|
107
121
|
const tree = createTreeByLabels(visibleTests, labels, ({ id, name, status, duration, flaky, start, retries }) => {
|
|
108
122
|
return {
|
|
@@ -120,17 +134,51 @@ export const generateTree = async (writer, treeName, labels, tests) => {
|
|
|
120
134
|
filterTree(tree, (leaf) => !leaf.hidden);
|
|
121
135
|
sortTree(tree, nullsLast(compareBy("start", ordinal())));
|
|
122
136
|
transformTree(tree, (leaf, idx) => ({ ...leaf, groupOrder: idx + 1 }));
|
|
123
|
-
await writer.writeWidget(
|
|
137
|
+
await writer.writeWidget(treeFilename, tree);
|
|
124
138
|
};
|
|
125
139
|
export const generateEnvironmentJson = async (writer, env) => {
|
|
126
140
|
await writer.writeWidget("allure_environment.json", env);
|
|
127
141
|
};
|
|
128
|
-
export const
|
|
129
|
-
await
|
|
142
|
+
export const generateEnvirontmentsList = async (writer, store) => {
|
|
143
|
+
const environments = await store.allEnvironments();
|
|
144
|
+
await writer.writeWidget("environments.json", environments);
|
|
145
|
+
};
|
|
146
|
+
export const generateVariables = async (writer, store) => {
|
|
147
|
+
const reportVariables = await store.allVariables();
|
|
148
|
+
const environments = await store.allEnvironments();
|
|
149
|
+
await writer.writeWidget("variables.json", reportVariables);
|
|
150
|
+
for (const env of environments) {
|
|
151
|
+
const envVariables = await store.envVariables(env);
|
|
152
|
+
await writer.writeWidget(join(env, "variables.json"), envVariables);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
export const generateStatistic = async (writer, store, filter) => {
|
|
156
|
+
const reportStatistic = await store.testsStatistic(filter);
|
|
157
|
+
const environments = await store.allEnvironments();
|
|
158
|
+
await writer.writeWidget("statistic.json", reportStatistic);
|
|
159
|
+
for (const env of environments) {
|
|
160
|
+
const envStatistic = await store.testsStatistic((testResult) => {
|
|
161
|
+
if (testResult.environment !== env) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return filter ? filter(testResult) : true;
|
|
165
|
+
});
|
|
166
|
+
await writer.writeWidget(join(env, "statistic.json"), envStatistic);
|
|
167
|
+
}
|
|
130
168
|
};
|
|
131
|
-
export const generatePieChart = async (writer,
|
|
132
|
-
const
|
|
133
|
-
await
|
|
169
|
+
export const generatePieChart = async (writer, store, filter) => {
|
|
170
|
+
const reportStatistic = await store.testsStatistic(filter);
|
|
171
|
+
const environments = await store.allEnvironments();
|
|
172
|
+
await writer.writeWidget("pie_chart.json", getPieChartData(reportStatistic));
|
|
173
|
+
for (const env of environments) {
|
|
174
|
+
const envStatistic = await store.testsStatistic((testResult) => {
|
|
175
|
+
if (testResult.environment !== env) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return filter ? filter(testResult) : true;
|
|
179
|
+
});
|
|
180
|
+
await writer.writeWidget(join(env, "pie_chart.json"), getPieChartData(envStatistic));
|
|
181
|
+
}
|
|
134
182
|
};
|
|
135
183
|
export const generateAttachmentsFiles = async (writer, attachmentLinks, contentFunction) => {
|
|
136
184
|
const result = new Map();
|
package/dist/index.d.ts
CHANGED
package/dist/model.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EnvironmentsConfig } from "@allurereport/core-api";
|
|
1
|
+
import type { EnvironmentsConfig, TestResult } from "@allurereport/core-api";
|
|
2
2
|
export type AwesomeOptions = {
|
|
3
3
|
reportName?: string;
|
|
4
4
|
singleFile?: boolean;
|
|
@@ -13,6 +13,7 @@ export type AwesomeOptions = {
|
|
|
13
13
|
url: string;
|
|
14
14
|
name: string;
|
|
15
15
|
};
|
|
16
|
+
filter?: (testResult: TestResult) => boolean;
|
|
16
17
|
};
|
|
17
18
|
export type TemplateManifest = Record<string, string>;
|
|
18
19
|
export type AwesomePluginOptions = AwesomeOptions;
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AllureStore, Plugin, PluginContext } from "@allurereport/plugin-api";
|
|
1
|
+
import type { AllureStore, Plugin, PluginContext, PluginSummary } from "@allurereport/plugin-api";
|
|
2
2
|
import type { AwesomePluginOptions } from "./model.js";
|
|
3
3
|
export declare class AwesomePlugin implements Plugin {
|
|
4
4
|
#private;
|
|
@@ -7,4 +7,5 @@ export declare class AwesomePlugin implements Plugin {
|
|
|
7
7
|
start: (context: PluginContext) => Promise<void>;
|
|
8
8
|
update: (context: PluginContext, store: AllureStore) => Promise<void>;
|
|
9
9
|
done: (context: PluginContext, store: AllureStore) => Promise<void>;
|
|
10
|
+
info(context: PluginContext, store: AllureStore): Promise<PluginSummary>;
|
|
10
11
|
}
|
package/dist/plugin.js
CHANGED
|
@@ -10,8 +10,10 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
12
|
var _AwesomePlugin_writer, _AwesomePlugin_generate;
|
|
13
|
+
import { getWorstStatus } from "@allurereport/core-api";
|
|
13
14
|
import { preciseTreeLabels } from "@allurereport/plugin-api";
|
|
14
|
-
import {
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { generateAttachmentsFiles, generateEnvironmentJson, generateEnvirontmentsList, generateHistoryDataPoints, generateNav, generatePieChart, generateStaticFiles, generateStatistic, generateTestCases, generateTestEnvGroups, generateTestResults, generateTree, generateVariables, } from "./generators.js";
|
|
15
17
|
import { InMemoryReportDataWriter, ReportFileDataWriter } from "./writer.js";
|
|
16
18
|
export class AwesomePlugin {
|
|
17
19
|
constructor(options = {}) {
|
|
@@ -20,14 +22,26 @@ export class AwesomePlugin {
|
|
|
20
22
|
_AwesomePlugin_generate.set(this, async (context, store) => {
|
|
21
23
|
const { singleFile, groupBy = [] } = this.options ?? {};
|
|
22
24
|
const environmentItems = await store.metadataByKey("allure_environment");
|
|
23
|
-
const
|
|
25
|
+
const reportEnvironments = await store.allEnvironments();
|
|
24
26
|
const attachments = await store.allAttachments();
|
|
25
|
-
await generateStatistic(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"),
|
|
26
|
-
await generatePieChart(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"),
|
|
27
|
-
const convertedTrs = await generateTestResults(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
27
|
+
await generateStatistic(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, this.options.filter);
|
|
28
|
+
await generatePieChart(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, this.options.filter);
|
|
29
|
+
const convertedTrs = await generateTestResults(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, this.options.filter);
|
|
28
30
|
const treeLabels = preciseTreeLabels(!groupBy.length ? ["parentSuite", "suite", "subSuite"] : groupBy, convertedTrs, ({ labels }) => labels.map(({ name }) => name));
|
|
29
|
-
await generateTree(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), "tree", treeLabels, convertedTrs);
|
|
30
31
|
await generateHistoryDataPoints(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
32
|
+
await generateTestCases(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), convertedTrs);
|
|
33
|
+
await generateTree(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), "tree.json", treeLabels, convertedTrs);
|
|
34
|
+
await generateNav(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), convertedTrs, "nav.json");
|
|
35
|
+
await generateTestEnvGroups(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
36
|
+
for (const reportEnvironment of reportEnvironments) {
|
|
37
|
+
const envTrs = await store.testResultsByEnvironment(reportEnvironment);
|
|
38
|
+
const envTrsIds = envTrs.map(({ id }) => id);
|
|
39
|
+
const envConvertedTrs = convertedTrs.filter(({ id }) => envTrsIds.includes(id));
|
|
40
|
+
await generateTree(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), join(reportEnvironment, "tree.json"), treeLabels, envConvertedTrs);
|
|
41
|
+
await generateNav(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), envConvertedTrs, join(reportEnvironment, "nav.json"));
|
|
42
|
+
}
|
|
43
|
+
await generateEnvirontmentsList(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
44
|
+
await generateVariables(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
31
45
|
if (environmentItems?.length) {
|
|
32
46
|
await generateEnvironmentJson(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), environmentItems);
|
|
33
47
|
}
|
|
@@ -66,5 +80,16 @@ export class AwesomePlugin {
|
|
|
66
80
|
await __classPrivateFieldGet(this, _AwesomePlugin_generate, "f").call(this, context, store);
|
|
67
81
|
};
|
|
68
82
|
}
|
|
83
|
+
async info(context, store) {
|
|
84
|
+
const allTrs = (await store.allTestResults()).filter((tr) => this.options.filter ? this.options.filter(tr) : true);
|
|
85
|
+
const duration = allTrs.reduce((acc, { duration: trDuration = 0 }) => acc + trDuration, 0);
|
|
86
|
+
const worstStatus = getWorstStatus(allTrs.map(({ status }) => status));
|
|
87
|
+
return {
|
|
88
|
+
name: this.options.reportName || context.reportName,
|
|
89
|
+
stats: await store.testsStatistic(this.options.filter),
|
|
90
|
+
status: worstStatus ?? "passed",
|
|
91
|
+
duration,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
69
94
|
}
|
|
70
95
|
_AwesomePlugin_writer = new WeakMap(), _AwesomePlugin_generate = new WeakMap();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allurereport/plugin-awesome",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.11",
|
|
4
4
|
"description": "Allure Awesome Plugin – brand new HTML report with modern design and new features",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"allure",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"test": "rimraf ./out && vitest run"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@allurereport/core-api": "3.0.0-beta.
|
|
34
|
-
"@allurereport/plugin-api": "3.0.0-beta.
|
|
35
|
-
"@allurereport/web-awesome": "3.0.0-beta.
|
|
36
|
-
"@allurereport/web-commons": "3.0.0-beta.
|
|
33
|
+
"@allurereport/core-api": "3.0.0-beta.11",
|
|
34
|
+
"@allurereport/plugin-api": "3.0.0-beta.11",
|
|
35
|
+
"@allurereport/web-awesome": "3.0.0-beta.11",
|
|
36
|
+
"@allurereport/web-commons": "3.0.0-beta.11",
|
|
37
37
|
"d3-shape": "^3.2.0",
|
|
38
38
|
"handlebars": "^4.7.8"
|
|
39
39
|
},
|