@allurereport/plugin-awesome 3.0.0-beta.3 → 3.0.0-beta.5

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
@@ -1,5 +1,5 @@
1
1
  import type { Statistic, TestStatus } from "@allurereport/core-api";
2
- import { PieArcDatum } from "d3-shape";
2
+ import type { PieArcDatum } from "d3-shape";
3
3
  export type TestResultSlice = {
4
4
  status: TestStatus;
5
5
  count: number;
@@ -10,5 +10,5 @@ export type TestResultChartData = {
10
10
  };
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
- export declare function getPercentage(value: number, total: number): number;
13
+ export declare const getPercentage: (value: number, total: number) => number;
14
14
  export declare const getChartData: (stats: Statistic) => TestResultChartData;
package/dist/charts.js CHANGED
@@ -5,9 +5,7 @@ export const d3Pie = pie()
5
5
  .value((d) => d.count)
6
6
  .padAngle(0.03)
7
7
  .sortValues((a, b) => a - b);
8
- export function getPercentage(value, total) {
9
- return Math.floor((value / total) * 10000) / 100;
10
- }
8
+ export const getPercentage = (value, total) => Math.floor((value / total) * 10000) / 100;
11
9
  export const getChartData = (stats) => {
12
10
  const convertedStatuses = statusesList
13
11
  .filter((status) => !!stats?.[status])
@@ -16,9 +14,9 @@ export const getChartData = (stats) => {
16
14
  count: stats[status],
17
15
  }));
18
16
  const arcsData = d3Pie(convertedStatuses);
19
- const slices = arcsData.map((arc) => ({
20
- d: d3Arc(arc),
21
- ...arc.data,
17
+ const slices = arcsData.map((arcData) => ({
18
+ d: d3Arc(arcData),
19
+ ...arcData.data,
22
20
  }));
23
21
  const percentage = getPercentage(stats.passed ?? 0, stats.total);
24
22
  return {
@@ -11,6 +11,8 @@ export const convertTestResult = (tr) => {
11
11
  return {
12
12
  id: tr.id,
13
13
  name: tr.name,
14
+ start: tr.start,
15
+ stop: tr.stop,
14
16
  duration: tr.duration,
15
17
  status: tr.status,
16
18
  fullName: tr.fullName,
@@ -31,6 +33,7 @@ export const convertTestResult = (tr) => {
31
33
  history: [],
32
34
  retries: [],
33
35
  breadcrumbs: [],
36
+ retry: false,
34
37
  };
35
38
  };
36
39
  export const convertTestStepResult = (tsr) => {
@@ -1,10 +1,11 @@
1
- import type { AttachmentLink, EnvironmentItem, Statistic, TestResult } from "@allurereport/core-api";
2
- import type { AllureStore, ReportFiles, ResultFile } from "@allurereport/plugin-api";
1
+ import { type AttachmentLink, type EnvironmentItem, type Statistic } from "@allurereport/core-api";
2
+ import { type AllureStore, type ReportFiles, type ResultFile } from "@allurereport/plugin-api";
3
+ import type { AllureAwesomeTestResult } from "@allurereport/web-awesome";
3
4
  import type { AllureAwesomeOptions, TemplateManifest } from "./model.js";
4
5
  import type { AllureAwesomeDataWriter, ReportFile } from "./writer.js";
5
6
  export declare const readTemplateManifest: (singleFileMode?: boolean) => Promise<TemplateManifest>;
6
- export declare const generateTestResults: (writer: AllureAwesomeDataWriter, store: AllureStore) => Promise<void>;
7
- export declare const generateTree: (writer: AllureAwesomeDataWriter, treeName: string, labels: string[], tests: TestResult[]) => Promise<void>;
7
+ export declare const generateTestResults: (writer: AllureAwesomeDataWriter, store: AllureStore) => Promise<AllureAwesomeTestResult[]>;
8
+ export declare const generateTree: (writer: AllureAwesomeDataWriter, treeName: string, labels: string[], tests: AllureAwesomeTestResult[]) => Promise<void>;
8
9
  export declare const generateEnvironmentJson: (writer: AllureAwesomeDataWriter, env: EnvironmentItem[]) => Promise<void>;
9
10
  export declare const generateStatistic: (writer: AllureAwesomeDataWriter, statistic: Statistic) => Promise<void>;
10
11
  export declare const generatePieChart: (writer: AllureAwesomeDataWriter, statistic: Statistic) => Promise<void>;
@@ -1,4 +1,6 @@
1
- import { createTreeByLabels } from "@allurereport/plugin-api";
1
+ import { compareBy, incrementStatistic, nullsLast, ordinal, } from "@allurereport/core-api";
2
+ import { filterTree } from "@allurereport/plugin-api";
3
+ import { createTreeByLabels, sortTree, transformTree } from "@allurereport/plugin-api";
2
4
  import { createBaseUrlScript, createFontLinkTag, createReportDataScript, createScriptTag, createStylesLinkTag, } from "@allurereport/web-commons";
3
5
  import Handlebars from "handlebars";
4
6
  import { readFile } from "node:fs/promises";
@@ -35,7 +37,7 @@ const template = `<!DOCTYPE html>
35
37
  "single_file": "{{singleFile}}"
36
38
  });
37
39
  </script>
38
- {{/if}}
40
+ {{/if}}
39
41
  <script>
40
42
  window.allureReportOptions = {{{ reportOptions }}}
41
43
  </script>
@@ -73,13 +75,14 @@ const createBreadcrumbs = (convertedTr) => {
73
75
  };
74
76
  export const generateTestResults = async (writer, store) => {
75
77
  const allTr = await store.allTestResults({ includeHidden: true });
76
- const convertedTrs = [];
78
+ let convertedTrs = [];
77
79
  for (const tr of allTr) {
78
80
  const trFixtures = await store.fixturesByTrId(tr.id);
79
81
  const convertedTrFixtures = trFixtures.map(convertFixtureResult);
80
82
  const convertedTr = convertTestResult(tr);
81
83
  convertedTr.history = await store.historyByTrId(tr.id);
82
84
  convertedTr.retries = await store.retriesByTrId(tr.id);
85
+ convertedTr.retry = convertedTr.retries.length > 0;
83
86
  convertedTr.setup = convertedTrFixtures.filter((f) => f.type === "before");
84
87
  convertedTr.teardown = convertedTrFixtures.filter((f) => f.type === "after");
85
88
  convertedTr.attachments = (await store.attachmentsByTrId(tr.id)).map((attachment) => ({
@@ -89,13 +92,34 @@ export const generateTestResults = async (writer, store) => {
89
92
  convertedTr.breadcrumbs = createBreadcrumbs(convertedTr);
90
93
  convertedTrs.push(convertedTr);
91
94
  }
95
+ convertedTrs = convertedTrs.sort(nullsLast(compareBy("start", ordinal()))).map((tr, idx) => ({
96
+ ...tr,
97
+ order: idx + 1,
98
+ }));
92
99
  for (const convertedTr of convertedTrs) {
93
100
  await writer.writeTestCase(convertedTr);
94
101
  }
102
+ await writer.writeWidget("nav.json", convertedTrs.filter(({ hidden }) => !hidden).map(({ id }) => id));
103
+ return convertedTrs;
95
104
  };
96
105
  export const generateTree = async (writer, treeName, labels, tests) => {
97
106
  const visibleTests = tests.filter((test) => !test.hidden);
98
- const tree = createTreeByLabels(visibleTests, labels);
107
+ const tree = createTreeByLabels(visibleTests, labels, ({ id, name, status, duration, flaky, start, retries }) => {
108
+ return {
109
+ nodeId: id,
110
+ retry: !!retries?.length,
111
+ name,
112
+ status,
113
+ duration,
114
+ flaky,
115
+ start,
116
+ };
117
+ }, undefined, (group, leaf) => {
118
+ incrementStatistic(group.statistic, leaf.status);
119
+ });
120
+ filterTree(tree, (leaf) => !leaf.hidden);
121
+ sortTree(tree, nullsLast(compareBy("start", ordinal())));
122
+ transformTree(tree, (leaf, idx) => ({ ...leaf, groupOrder: idx + 1 }));
99
123
  await writer.writeWidget(`${treeName}.json`, tree);
100
124
  };
101
125
  export const generateEnvironmentJson = async (writer, env) => {
@@ -127,15 +151,14 @@ export const generateAttachmentsFiles = async (writer, attachmentLinks, contentF
127
151
  export const generateHistoryDataPoints = async (writer, store) => {
128
152
  const result = new Map();
129
153
  const allHistoryPoints = await store.allHistoryDataPoints();
130
- allHistoryPoints.sort((a, b) => b.timestamp - a.timestamp);
131
- for (const historyPoint of allHistoryPoints?.slice(0, 6)) {
154
+ for (const historyPoint of allHistoryPoints.slice(0, 6)) {
132
155
  const src = `history/${historyPoint.uuid}.json`;
133
156
  await writer.writeData(src, historyPoint);
134
157
  }
135
158
  return result;
136
159
  };
137
160
  export const generateStaticFiles = async (payload) => {
138
- const { reportName = "Allure Report", reportLanguage = "en", singleFile, logo = "", theme = "light", reportFiles, reportDataFiles, reportUuid, allureVersion, } = payload;
161
+ const { reportName = "Allure Report", reportLanguage = "en", singleFile, logo = "", theme = "light", groupBy, reportFiles, reportDataFiles, reportUuid, allureVersion, } = payload;
139
162
  const compile = Handlebars.compile(template);
140
163
  const manifest = await readTemplateManifest(payload.singleFile);
141
164
  const headTags = [];
@@ -173,6 +196,7 @@ export const generateStaticFiles = async (payload) => {
173
196
  reportLanguage,
174
197
  createdAt: Date.now(),
175
198
  reportUuid,
199
+ groupBy: groupBy?.length ? groupBy : ["parentSuite", "suite", "subSuite"],
176
200
  };
177
201
  const html = compile({
178
202
  headTags: headTags.join("\n"),
package/dist/model.d.ts CHANGED
@@ -4,6 +4,7 @@ export type AllureAwesomeOptions = {
4
4
  logo?: string;
5
5
  theme?: "light" | "dark";
6
6
  reportLanguage?: "en" | "ru";
7
+ groupBy?: string[];
7
8
  ci?: {
8
9
  type: "github" | "jenkins";
9
10
  url: string;
package/dist/plugin.js CHANGED
@@ -10,7 +10,6 @@ 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 _AllureAwesomePlugin_writer, _AllureAwesomePlugin_generate;
13
- import { findByLabelName } from "@allurereport/core-api";
14
13
  import { generateAttachmentsFiles, generateEnvironmentJson, generateHistoryDataPoints, generatePieChart, generateStaticFiles, generateStatistic, generateTestResults, generateTree, } from "./generators.js";
15
14
  import { InMemoryReportDataWriter, ReportFileDataWriter } from "./writer.js";
16
15
  export class AllureAwesomePlugin {
@@ -18,16 +17,14 @@ export class AllureAwesomePlugin {
18
17
  this.options = options;
19
18
  _AllureAwesomePlugin_writer.set(this, void 0);
20
19
  _AllureAwesomePlugin_generate.set(this, async (context, store) => {
21
- const { singleFile } = this.options ?? {};
20
+ const { singleFile, groupBy } = this.options ?? {};
22
21
  const environmentItems = await store.metadataByKey("allure_environment");
23
22
  const statistic = await store.testsStatistic();
24
- const allTr = await store.allTestResults({ includeHidden: true });
25
23
  const attachments = await store.allAttachments();
26
24
  await generateStatistic(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), statistic);
27
25
  await generatePieChart(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), statistic);
28
- const noParentSuite = allTr.find((tr) => findByLabelName(tr.labels, "parentSuite")) === undefined;
29
- await generateTree(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), "suites", noParentSuite ? ["suite", "subSuite"] : ["parentSuite", "suite", "subSuite"], allTr);
30
- await generateTestResults(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), store);
26
+ const convertedTrs = await generateTestResults(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), store);
27
+ await generateTree(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), "tree", groupBy?.length ? groupBy : ["parentSuite", "suite", "subSuite"], convertedTrs);
31
28
  await generateHistoryDataPoints(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), store);
32
29
  if (environmentItems?.length) {
33
30
  await generateEnvironmentJson(__classPrivateFieldGet(this, _AllureAwesomePlugin_writer, "f"), environmentItems);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allurereport/plugin-awesome",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-beta.5",
4
4
  "description": "Allure Awesome Plugin – brand new HTML report with modern design and new features",
5
5
  "keywords": [
6
6
  "allure",
@@ -25,13 +25,15 @@
25
25
  "scripts": {
26
26
  "build": "run clean && tsc --project ./tsconfig.json",
27
27
  "clean": "rimraf ./dist",
28
+ "eslint": "eslint ./src/**/*.{js,jsx,ts,tsx}",
29
+ "eslint:format": "eslint --fix ./src/**/*.{js,jsx,ts,tsx}",
28
30
  "test": "rimraf ./out && vitest run"
29
31
  },
30
32
  "dependencies": {
31
- "@allurereport/core-api": "3.0.0-beta.3",
32
- "@allurereport/plugin-api": "3.0.0-beta.3",
33
- "@allurereport/web-awesome": "3.0.0-beta.3",
34
- "@allurereport/web-commons": "3.0.0-beta.3",
33
+ "@allurereport/core-api": "3.0.0-beta.5",
34
+ "@allurereport/plugin-api": "3.0.0-beta.5",
35
+ "@allurereport/web-awesome": "3.0.0-beta.5",
36
+ "@allurereport/web-commons": "3.0.0-beta.5",
35
37
  "d3-shape": "^3.2.0",
36
38
  "handlebars": "^4.7.8"
37
39
  },