@allurereport/plugin-awesome 3.1.0 → 3.2.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 +4 -0
- package/dist/generateTimeline.d.ts +2 -2
- package/dist/generateTimeline.js +6 -9
- package/dist/generators.d.ts +4 -4
- package/dist/generators.js +9 -13
- package/dist/model.d.ts +1 -1
- package/dist/plugin.js +7 -7
- package/package.json +9 -7
package/dist/converters.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import MarkdownIt from "markdown-it";
|
|
2
|
+
const md = new MarkdownIt();
|
|
3
|
+
const markdownToHtml = (value) => (value ? md.render(value) : undefined);
|
|
1
4
|
const mapLabelsByName = (labels) => {
|
|
2
5
|
return labels.reduce((acc, { name, value }) => {
|
|
3
6
|
acc[name] = acc[name] || [];
|
|
@@ -28,6 +31,7 @@ export const convertTestResult = (tr) => {
|
|
|
28
31
|
steps: tr.steps,
|
|
29
32
|
error: tr.error,
|
|
30
33
|
testCase: tr.testCase,
|
|
34
|
+
descriptionHtml: tr.descriptionHtml ?? markdownToHtml(tr.description),
|
|
31
35
|
environment: tr.environment,
|
|
32
36
|
setup: [],
|
|
33
37
|
teardown: [],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AwesomeTestResult } from "@allurereport/web-awesome";
|
|
2
2
|
import type { AwesomeOptions } from "./model.js";
|
|
3
3
|
type Writer = {
|
|
4
4
|
writeWidget(fileName: string, data: any): Promise<void>;
|
|
5
5
|
};
|
|
6
|
-
export declare const generateTimeline: (writer: Writer,
|
|
6
|
+
export declare const generateTimeline: (writer: Writer, trs: AwesomeTestResult[], options: AwesomeOptions) => Promise<void>;
|
|
7
7
|
export {};
|
package/dist/generateTimeline.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import { hasLabels } from "@allurereport/web-commons";
|
|
2
1
|
const DEFAULT_MIN_DURATION = 1;
|
|
3
|
-
const HOST_LABEL = "host";
|
|
4
|
-
const THREAD_LABEL = "thread";
|
|
5
2
|
const DEFAULT_TIMELINE_OPTIONS = {
|
|
6
3
|
minDuration: DEFAULT_MIN_DURATION,
|
|
7
4
|
};
|
|
8
|
-
export const generateTimeline = async (writer,
|
|
5
|
+
export const generateTimeline = async (writer, trs, options) => {
|
|
9
6
|
const { timeline = DEFAULT_TIMELINE_OPTIONS } = options;
|
|
10
7
|
const { minDuration = DEFAULT_MIN_DURATION } = timeline;
|
|
11
|
-
const testResults = await store.allTestResults({ includeHidden: true });
|
|
12
8
|
const result = [];
|
|
13
|
-
for (const test of
|
|
9
|
+
for (const test of trs) {
|
|
14
10
|
const hasStart = Number.isInteger(test.start);
|
|
15
11
|
const hasStop = Number.isInteger(test.stop);
|
|
16
12
|
if (!hasStart || !hasStop) {
|
|
@@ -20,7 +16,8 @@ export const generateTimeline = async (writer, store, options) => {
|
|
|
20
16
|
if (duration < minDuration) {
|
|
21
17
|
continue;
|
|
22
18
|
}
|
|
23
|
-
|
|
19
|
+
const { host, thread } = test.groupedLabels;
|
|
20
|
+
if (!host?.length || !thread?.length) {
|
|
24
21
|
continue;
|
|
25
22
|
}
|
|
26
23
|
result.push({
|
|
@@ -29,10 +26,10 @@ export const generateTimeline = async (writer, store, options) => {
|
|
|
29
26
|
name: test.name,
|
|
30
27
|
status: test.status,
|
|
31
28
|
hidden: test.hidden,
|
|
32
|
-
|
|
29
|
+
host: host[0],
|
|
30
|
+
thread: thread[0],
|
|
33
31
|
environment: test.environment,
|
|
34
32
|
start: test.start,
|
|
35
|
-
stop: test.stop,
|
|
36
33
|
duration,
|
|
37
34
|
});
|
|
38
35
|
}
|
package/dist/generators.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type AttachmentLink, type EnvironmentItem, type Statistic, type TestEnvGroup, type TestError, type TestResult } from "@allurereport/core-api";
|
|
2
|
-
import type { AllureStore, ExitCode, PluginContext, QualityGateValidationResult, ReportFiles, ResultFile
|
|
2
|
+
import type { AllureStore, ExitCode, PluginContext, QualityGateValidationResult, ReportFiles, ResultFile } 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, trs: TestResult[]
|
|
7
|
+
export declare const generateTestResults: (writer: AwesomeDataWriter, store: AllureStore, trs: TestResult[]) => Promise<AwesomeTestResult[]>;
|
|
8
8
|
export declare const generateTestCases: (writer: AwesomeDataWriter, trs: AwesomeTestResult[]) => Promise<void>;
|
|
9
9
|
export declare const generateTestEnvGroups: (writer: AwesomeDataWriter, groups: TestEnvGroup[]) => Promise<void>;
|
|
10
10
|
export declare const generateNav: (writer: AwesomeDataWriter, trs: AwesomeTestResult[], filename?: string) => Promise<void>;
|
|
@@ -27,7 +27,7 @@ export declare const generateGlobals: (writer: AwesomeDataWriter, payload: {
|
|
|
27
27
|
globalErrors?: TestError[];
|
|
28
28
|
contentFunction: (id: string) => Promise<ResultFile | undefined>;
|
|
29
29
|
}) => Promise<void>;
|
|
30
|
-
export declare const generateQualityGateResults: (writer: AwesomeDataWriter, qualityGateResults?: QualityGateValidationResult[]) => Promise<void>;
|
|
30
|
+
export declare const generateQualityGateResults: (writer: AwesomeDataWriter, qualityGateResults?: Record<string, QualityGateValidationResult[]>) => Promise<void>;
|
|
31
31
|
export declare const generateStaticFiles: (payload: AwesomeOptions & {
|
|
32
32
|
id: string;
|
|
33
33
|
allureVersion: string;
|
|
@@ -37,4 +37,4 @@ export declare const generateStaticFiles: (payload: AwesomeOptions & {
|
|
|
37
37
|
reportName: string;
|
|
38
38
|
}) => Promise<void>;
|
|
39
39
|
export declare const generateAllCharts: (writer: AwesomeDataWriter, store: AllureStore, options: AwesomeOptions, context: PluginContext) => Promise<void>;
|
|
40
|
-
export declare const generateTreeFilters: (writer: AwesomeDataWriter,
|
|
40
|
+
export declare const generateTreeFilters: (writer: AwesomeDataWriter, testResults: AwesomeTestResult[]) => Promise<void>;
|
package/dist/generators.js
CHANGED
|
@@ -73,10 +73,9 @@ const createBreadcrumbs = (convertedTr) => {
|
|
|
73
73
|
return acc;
|
|
74
74
|
}, []);
|
|
75
75
|
};
|
|
76
|
-
export const generateTestResults = async (writer, store, trs
|
|
77
|
-
const allTr = trs.filter((tr) => (filter ? filter(tr) : true));
|
|
76
|
+
export const generateTestResults = async (writer, store, trs) => {
|
|
78
77
|
let convertedTrs = [];
|
|
79
|
-
for (const tr of
|
|
78
|
+
for (const tr of trs) {
|
|
80
79
|
const trFixtures = await store.fixturesByTrId(tr.id);
|
|
81
80
|
const convertedTrFixtures = trFixtures.map(convertFixtureResult);
|
|
82
81
|
const convertedTr = convertTestResult(tr);
|
|
@@ -283,7 +282,7 @@ export const generateGlobals = async (writer, payload) => {
|
|
|
283
282
|
}
|
|
284
283
|
await writer.writeWidget("globals.json", globals);
|
|
285
284
|
};
|
|
286
|
-
export const generateQualityGateResults = async (writer, qualityGateResults =
|
|
285
|
+
export const generateQualityGateResults = async (writer, qualityGateResults = {}) => {
|
|
287
286
|
await writer.writeWidget("quality-gate.json", qualityGateResults);
|
|
288
287
|
};
|
|
289
288
|
export const generateStaticFiles = async (payload) => {
|
|
@@ -359,23 +358,20 @@ export const generateStaticFiles = async (payload) => {
|
|
|
359
358
|
}
|
|
360
359
|
};
|
|
361
360
|
export const generateAllCharts = async (writer, store, options, context) => {
|
|
362
|
-
const { charts = defaultChartsConfig } = options;
|
|
363
|
-
const generatedChartsData = await generateCharts(charts, store, context.reportName, randomUUID);
|
|
361
|
+
const { charts = defaultChartsConfig, filter } = options;
|
|
362
|
+
const generatedChartsData = await generateCharts(charts, store, context.reportName, randomUUID, filter);
|
|
364
363
|
if (Object.keys(generatedChartsData.general).length > 0) {
|
|
365
364
|
await writer.writeWidget("charts.json", generatedChartsData);
|
|
366
365
|
}
|
|
367
366
|
};
|
|
368
|
-
export const generateTreeFilters = async (writer,
|
|
367
|
+
export const generateTreeFilters = async (writer, testResults) => {
|
|
369
368
|
const trTags = new Set();
|
|
370
|
-
const
|
|
371
|
-
for (const tr of trs) {
|
|
369
|
+
for (const tr of testResults) {
|
|
372
370
|
if (tr.labels.length === 0) {
|
|
373
371
|
continue;
|
|
374
372
|
}
|
|
375
|
-
tr.
|
|
376
|
-
|
|
377
|
-
trTags.add(label.value);
|
|
378
|
-
}
|
|
373
|
+
Object.values(tr.groupedLabels.tag ?? []).forEach((tag) => {
|
|
374
|
+
trTags.add(tag);
|
|
379
375
|
});
|
|
380
376
|
}
|
|
381
377
|
if (trTags.size === 0) {
|
package/dist/model.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type AwesomeOptions = {
|
|
|
5
5
|
singleFile?: boolean;
|
|
6
6
|
logo?: string;
|
|
7
7
|
theme?: "light" | "dark" | "auto";
|
|
8
|
-
reportLanguage?:
|
|
8
|
+
reportLanguage?: string;
|
|
9
9
|
groupBy?: string[];
|
|
10
10
|
layout?: "base" | "split";
|
|
11
11
|
environments?: Record<string, EnvironmentsConfig>;
|
package/dist/plugin.js
CHANGED
|
@@ -27,7 +27,7 @@ export class AwesomePlugin {
|
|
|
27
27
|
const environmentItems = await store.metadataByKey("allure_environment");
|
|
28
28
|
const reportEnvironments = await store.allEnvironments();
|
|
29
29
|
const attachments = await store.allAttachments();
|
|
30
|
-
const allTrs = await store.allTestResults({ includeHidden: true });
|
|
30
|
+
const allTrs = await store.allTestResults({ includeHidden: true, filter });
|
|
31
31
|
const statistics = await store.testsStatistic(filter);
|
|
32
32
|
const environments = await store.allEnvironments();
|
|
33
33
|
const envStatistics = new Map();
|
|
@@ -35,7 +35,7 @@ export class AwesomePlugin {
|
|
|
35
35
|
const globalAttachments = await store.allGlobalAttachments();
|
|
36
36
|
const globalExitCode = await store.globalExitCode();
|
|
37
37
|
const globalErrors = await store.allGlobalErrors();
|
|
38
|
-
const qualityGateResults = await store.
|
|
38
|
+
const qualityGateResults = await store.qualityGateResultsByEnv();
|
|
39
39
|
for (const env of environments) {
|
|
40
40
|
envStatistics.set(env, await store.testsStatistic(filterEnv(env, filter)));
|
|
41
41
|
}
|
|
@@ -45,9 +45,9 @@ export class AwesomePlugin {
|
|
|
45
45
|
envs: environments,
|
|
46
46
|
});
|
|
47
47
|
await generateAllCharts(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, this.options, context);
|
|
48
|
-
await
|
|
49
|
-
const convertedTrs = await generateTestResults(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, allTrs, this.options.filter);
|
|
48
|
+
const convertedTrs = await generateTestResults(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store, allTrs);
|
|
50
49
|
const hasGroupBy = groupBy.length > 0;
|
|
50
|
+
await generateTimeline(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), convertedTrs, this.options);
|
|
51
51
|
const treeLabels = hasGroupBy
|
|
52
52
|
? preciseTreeLabels(groupBy, convertedTrs, ({ labels }) => labels.map(({ name }) => name))
|
|
53
53
|
: [];
|
|
@@ -63,7 +63,7 @@ export class AwesomePlugin {
|
|
|
63
63
|
});
|
|
64
64
|
await generateNav(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), envConvertedTrs, join(reportEnvironment, "nav.json"));
|
|
65
65
|
}
|
|
66
|
-
await generateTreeFilters(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"),
|
|
66
|
+
await generateTreeFilters(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), convertedTrs);
|
|
67
67
|
await generateEnvirontmentsList(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
68
68
|
await generateVariables(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), store);
|
|
69
69
|
if (environmentItems?.length) {
|
|
@@ -114,8 +114,8 @@ export class AwesomePlugin {
|
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
116
|
async info(context, store) {
|
|
117
|
-
const allTrs =
|
|
118
|
-
const newTrs = await store.allNewTestResults();
|
|
117
|
+
const allTrs = await store.allTestResults({ filter: this.options.filter });
|
|
118
|
+
const newTrs = await store.allNewTestResults(this.options.filter);
|
|
119
119
|
const retryTrs = allTrs.filter((tr) => !!tr?.retries?.length);
|
|
120
120
|
const flakyTrs = allTrs.filter((tr) => !!tr?.flaky);
|
|
121
121
|
const duration = allTrs.reduce((acc, { duration: trDuration = 0 }) => acc + trDuration, 0);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allurereport/plugin-awesome",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Allure Awesome Plugin – brand new HTML report with modern design and new features",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"allure",
|
|
@@ -30,18 +30,20 @@
|
|
|
30
30
|
"test": "rimraf ./out && vitest run"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@allurereport/charts-api": "3.
|
|
34
|
-
"@allurereport/core-api": "3.
|
|
35
|
-
"@allurereport/plugin-api": "3.
|
|
36
|
-
"@allurereport/web-awesome": "3.
|
|
37
|
-
"@allurereport/web-commons": "3.
|
|
33
|
+
"@allurereport/charts-api": "3.2.0",
|
|
34
|
+
"@allurereport/core-api": "3.2.0",
|
|
35
|
+
"@allurereport/plugin-api": "3.2.0",
|
|
36
|
+
"@allurereport/web-awesome": "3.2.0",
|
|
37
|
+
"@allurereport/web-commons": "3.2.0",
|
|
38
38
|
"d3-shape": "^3.2.0",
|
|
39
|
-
"handlebars": "^4.7.8"
|
|
39
|
+
"handlebars": "^4.7.8",
|
|
40
|
+
"markdown-it": "^14.1.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@stylistic/eslint-plugin": "^2.6.1",
|
|
43
44
|
"@types/d3-shape": "^3.1.6",
|
|
44
45
|
"@types/eslint": "^8.56.11",
|
|
46
|
+
"@types/markdown-it": "^14.1.2",
|
|
45
47
|
"@types/node": "^20.17.9",
|
|
46
48
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
47
49
|
"@typescript-eslint/parser": "^8.0.0",
|