@allurereport/plugin-awesome 3.0.0-beta.10 → 3.0.0-beta.12
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/environments.d.ts +3 -0
- package/dist/environments.js +8 -0
- package/dist/generators.d.ts +11 -6
- package/dist/generators.js +54 -13
- 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,13 +1,14 @@
|
|
|
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
|
+
import { filterEnv } from "./environments.js";
|
|
11
12
|
const require = createRequire(import.meta.url);
|
|
12
13
|
const template = `<!DOCTYPE html>
|
|
13
14
|
<html dir="ltr" lang="en">
|
|
@@ -73,8 +74,8 @@ const createBreadcrumbs = (convertedTr) => {
|
|
|
73
74
|
return acc;
|
|
74
75
|
}, []);
|
|
75
76
|
};
|
|
76
|
-
export const generateTestResults = async (writer, store) => {
|
|
77
|
-
const allTr = await store.allTestResults({ includeHidden: true });
|
|
77
|
+
export const generateTestResults = async (writer, store, filter) => {
|
|
78
|
+
const allTr = (await store.allTestResults({ includeHidden: true })).filter((tr) => (filter ? filter(tr) : true));
|
|
78
79
|
let convertedTrs = [];
|
|
79
80
|
for (const tr of allTr) {
|
|
80
81
|
const trFixtures = await store.fixturesByTrId(tr.id);
|
|
@@ -99,15 +100,31 @@ export const generateTestResults = async (writer, store) => {
|
|
|
99
100
|
for (const convertedTr of convertedTrs) {
|
|
100
101
|
await writer.writeTestCase(convertedTr);
|
|
101
102
|
}
|
|
102
|
-
await writer.writeWidget("nav.json", convertedTrs.filter(({ hidden }) => !hidden).map(({ id }) => id));
|
|
103
103
|
return convertedTrs;
|
|
104
104
|
};
|
|
105
|
-
export const
|
|
105
|
+
export const generateTestCases = async (writer, trs) => {
|
|
106
|
+
for (const tr of trs) {
|
|
107
|
+
await writer.writeTestCase(tr);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
export const generateTestEnvGroups = async (writer, store) => {
|
|
111
|
+
const groups = await store.allTestEnvGroups();
|
|
112
|
+
for (const group of groups) {
|
|
113
|
+
const src = join("test-env-groups", `${group.id}.json`);
|
|
114
|
+
await writer.writeData(src, group);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
export const generateNav = async (writer, trs, filename = "nav.json") => {
|
|
118
|
+
await writer.writeWidget(filename, trs.filter(({ hidden }) => !hidden).map(({ id }) => id));
|
|
119
|
+
};
|
|
120
|
+
export const generateTree = async (writer, treeFilename, labels, tests) => {
|
|
106
121
|
const visibleTests = tests.filter((test) => !test.hidden);
|
|
107
122
|
const tree = createTreeByLabels(visibleTests, labels, ({ id, name, status, duration, flaky, start, retries }) => {
|
|
123
|
+
const retriesCount = retries?.length;
|
|
108
124
|
return {
|
|
109
125
|
nodeId: id,
|
|
110
|
-
retry:
|
|
126
|
+
retry: Boolean(retriesCount),
|
|
127
|
+
retriesCount,
|
|
111
128
|
name,
|
|
112
129
|
status,
|
|
113
130
|
duration,
|
|
@@ -120,17 +137,41 @@ export const generateTree = async (writer, treeName, labels, tests) => {
|
|
|
120
137
|
filterTree(tree, (leaf) => !leaf.hidden);
|
|
121
138
|
sortTree(tree, nullsLast(compareBy("start", ordinal())));
|
|
122
139
|
transformTree(tree, (leaf, idx) => ({ ...leaf, groupOrder: idx + 1 }));
|
|
123
|
-
await writer.writeWidget(
|
|
140
|
+
await writer.writeWidget(treeFilename, tree);
|
|
124
141
|
};
|
|
125
142
|
export const generateEnvironmentJson = async (writer, env) => {
|
|
126
143
|
await writer.writeWidget("allure_environment.json", env);
|
|
127
144
|
};
|
|
128
|
-
export const
|
|
129
|
-
await
|
|
145
|
+
export const generateEnvirontmentsList = async (writer, store) => {
|
|
146
|
+
const environments = await store.allEnvironments();
|
|
147
|
+
await writer.writeWidget("environments.json", environments);
|
|
130
148
|
};
|
|
131
|
-
export const
|
|
132
|
-
const
|
|
133
|
-
await
|
|
149
|
+
export const generateVariables = async (writer, store) => {
|
|
150
|
+
const reportVariables = await store.allVariables();
|
|
151
|
+
const environments = await store.allEnvironments();
|
|
152
|
+
await writer.writeWidget("variables.json", reportVariables);
|
|
153
|
+
for (const env of environments) {
|
|
154
|
+
const envVariables = await store.envVariables(env);
|
|
155
|
+
await writer.writeWidget(join(env, "variables.json"), envVariables);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
export const generateStatistic = async (writer, store, filter) => {
|
|
159
|
+
const statistic = await store.testsStatistic(filter);
|
|
160
|
+
const environments = await store.allEnvironments();
|
|
161
|
+
await writer.writeWidget("statistic.json", statistic);
|
|
162
|
+
for (const env of environments) {
|
|
163
|
+
const envStatistic = await store.testsStatistic(filterEnv(env, filter));
|
|
164
|
+
await writer.writeWidget(join(env, "statistic.json"), envStatistic);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
export const generatePieChart = async (writer, store, filter) => {
|
|
168
|
+
const reportStatistic = await store.testsStatistic(filter);
|
|
169
|
+
const environments = await store.allEnvironments();
|
|
170
|
+
await writer.writeWidget("pie_chart.json", getPieChartData(reportStatistic));
|
|
171
|
+
for (const env of environments) {
|
|
172
|
+
const envStatistic = await store.testsStatistic(filterEnv(env, filter));
|
|
173
|
+
await writer.writeWidget(join(env, "pie_chart.json"), getPieChartData(envStatistic));
|
|
174
|
+
}
|
|
134
175
|
};
|
|
135
176
|
export const generateAttachmentsFiles = async (writer, attachmentLinks, contentFunction) => {
|
|
136
177
|
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.12",
|
|
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.12",
|
|
34
|
+
"@allurereport/plugin-api": "3.0.0-beta.12",
|
|
35
|
+
"@allurereport/web-awesome": "3.0.0-beta.12",
|
|
36
|
+
"@allurereport/web-commons": "3.0.0-beta.12",
|
|
37
37
|
"d3-shape": "^3.2.0",
|
|
38
38
|
"handlebars": "^4.7.8"
|
|
39
39
|
},
|