@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 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 getChartData: (stats: Statistic) => TestResultChartData;
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 getChartData = (stats) => {
9
+ export const getPieChartData = (stats) => {
10
10
  const convertedStatuses = statusesList
11
11
  .filter((status) => !!stats?.[status])
12
12
  .map((status) => ({
@@ -27,6 +27,8 @@ export const convertTestResult = (tr) => {
27
27
  links: tr.links,
28
28
  steps: tr.steps,
29
29
  error: tr.error,
30
+ testCase: tr.testCase,
31
+ environment: tr.environment,
30
32
  setup: [],
31
33
  teardown: [],
32
34
  history: [],
@@ -1,14 +1,19 @@
1
- import { type AttachmentLink, type EnvironmentItem, type Statistic } from "@allurereport/core-api";
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 generateTree: (writer: AwesomeDataWriter, treeName: string, labels: string[], tests: AwesomeTestResult[]) => Promise<void>;
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 generateStatistic: (writer: AwesomeDataWriter, statistic: Statistic) => Promise<void>;
11
- export declare const generatePieChart: (writer: AwesomeDataWriter, statistic: Statistic) => Promise<void>;
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 & {
@@ -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 { getChartData } from "./charts.js";
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 generateTree = async (writer, treeName, labels, tests) => {
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(`${treeName}.json`, tree);
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 generateStatistic = async (writer, statistic) => {
129
- await writer.writeWidget("allure_statistic.json", statistic);
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, statistic) => {
132
- const chartData = getChartData(statistic);
133
- await writer.writeWidget("allure_pie_chart.json", chartData);
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
@@ -1,2 +1,3 @@
1
1
  import { AwesomePlugin } from "./plugin.js";
2
+ export type { AwesomePluginOptions } from "./model.js";
2
3
  export default AwesomePlugin;
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 { generateAttachmentsFiles, generateEnvironmentJson, generateHistoryDataPoints, generatePieChart, generateStaticFiles, generateStatistic, generateTestResults, generateTree, } from "./generators.js";
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 statistic = await store.testsStatistic();
25
+ const reportEnvironments = await store.allEnvironments();
24
26
  const attachments = await store.allAttachments();
25
- await generateStatistic(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), statistic);
26
- await generatePieChart(__classPrivateFieldGet(this, _AwesomePlugin_writer, "f"), statistic);
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.10",
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.10",
34
- "@allurereport/plugin-api": "3.0.0-beta.10",
35
- "@allurereport/web-awesome": "3.0.0-beta.10",
36
- "@allurereport/web-commons": "3.0.0-beta.10",
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
  },