@allurereport/plugin-awesome 3.9.0 → 3.11.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/README.md CHANGED
@@ -58,6 +58,27 @@ The plugin accepts the following options:
58
58
  | `groupBy` | Grouping tests by labels or combining labels. By default, tests are grouped using the `titlePath` provided by the test framework. | `string` | `[]`(Grouping by `titlepath`) |
59
59
  | `appendTitlePath`| Special marker for `groupBy`. Forces a final grouping by `titlePath` after all label-based groups. | `boolean` | `false` |
60
60
  | `stepTreeExpansion` | Default expansion policy for step trees in test details. | `"collapsed" \| "expand_failed_only" \| "expanded"` | `"expand_failed_only"` |
61
+ | `defaultSortBy` | Default sort order for the test tree. Accepted values: `order,asc`, `order,desc`, `duration,asc`, `duration,desc`, `name,asc`, `name,desc`, `status,asc`, `status,desc`. User's manual selection is preserved in `localStorage` and takes priority over this value. | `string` | `order,asc` |
62
+
63
+ ### Default sort order
64
+
65
+ Use `defaultSortBy` to change the initial sort order of the test tree:
66
+
67
+ ```ts
68
+ import { defineConfig } from "allure";
69
+
70
+ export default defineConfig({
71
+ plugins: {
72
+ awesome: {
73
+ options: {
74
+ defaultSortBy: "name,asc",
75
+ },
76
+ },
77
+ },
78
+ });
79
+ ```
80
+
81
+ The user's last selected sort order is always preserved in `localStorage`, so once a user changes the sort manually, their preference takes priority over the configured default.
61
82
 
62
83
  ### Step tree expansion
63
84
 
@@ -1,6 +1,6 @@
1
1
  import { type AttachmentLink, type EnvironmentIdentity, type EnvironmentItem, type Statistic, type TestEnvGroup, type TestResult } from "@allurereport/core-api";
2
2
  import type { AllureStore, ExitCode, PluginContext, PluginGlobalAttachment, PluginGlobalError, QualityGateValidationResult, ReportFiles, ResultFile } from "@allurereport/plugin-api";
3
- import type { AwesomeTestResult } from "@allurereport/web-awesome";
3
+ import type { AwesomeExecutorInfo, AwesomeRunSummary, 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>;
@@ -11,6 +11,7 @@ export declare const generateTestCases: (writer: AwesomeDataWriter, trs: Awesome
11
11
  export declare const generateTestEnvGroups: (writer: AwesomeDataWriter, groups: TestEnvGroup[]) => Promise<void>;
12
12
  export declare const generateNav: (writer: AwesomeDataWriter, trs: AwesomeTestResult[], filename?: string) => Promise<void>;
13
13
  export declare const generateSearchIndex: (writer: AwesomeDataWriter, trs: AwesomeTestResult[], filename?: string) => Promise<void>;
14
+ export declare const getRunSummary: (testResults: Pick<TestResult, "start" | "stop">[]) => AwesomeRunSummary | undefined;
14
15
  export declare const generateTree: (writer: AwesomeDataWriter, treeFilename: string, labels: string[], tests: AwesomeTestResult[], options?: {
15
16
  appendTitlePath?: boolean;
16
17
  }) => Promise<void>;
@@ -40,6 +41,8 @@ export declare const generateStaticFiles: (payload: AwesomeOptions & {
40
41
  reportDataFiles: ReportFile[];
41
42
  reportUuid: string;
42
43
  reportName: string;
44
+ executor?: AwesomeExecutorInfo;
45
+ runSummary?: AwesomeRunSummary;
43
46
  }) => Promise<void>;
44
47
  export declare const generateAllCharts: (writer: AwesomeDataWriter, store: AllureStore, options: AwesomeOptions, context: PluginContext) => Promise<void>;
45
48
  export declare const generateTreeFilters: (writer: AwesomeDataWriter, testResults: AwesomeTestResult[]) => Promise<void>;
@@ -172,6 +172,19 @@ export const generateSearchIndex = async (writer, trs, filename = "search-index.
172
172
  const searchDocuments = trs.filter(({ isRetry }) => !isRetry).map(searchDocumentFactory);
173
173
  await writer.writeWidget(filename, searchDocuments);
174
174
  };
175
+ export const getRunSummary = (testResults) => {
176
+ let start = Infinity;
177
+ let stop = -Infinity;
178
+ for (const { start: s, stop: e } of testResults) {
179
+ if (typeof s === "number" && Number.isFinite(s) && typeof e === "number" && Number.isFinite(e)) {
180
+ start = Math.min(start, s);
181
+ stop = Math.max(stop, e);
182
+ }
183
+ }
184
+ return Number.isFinite(start) && Number.isFinite(stop)
185
+ ? { start, stop, duration: Math.max(0, stop - start) }
186
+ : undefined;
187
+ };
175
188
  export const generateTree = async (writer, treeFilename, labels, tests, options) => {
176
189
  const visibleTests = tests.filter((test) => !test.isRetry);
177
190
  const { appendTitlePath } = options || {};
@@ -362,7 +375,7 @@ export const generateQualityGateResults = async (writer, qualityGateResults = {}
362
375
  await writer.writeWidget("quality-gate.json", qualityGateResults);
363
376
  };
364
377
  export const generateStaticFiles = async (payload) => {
365
- const { id, reportName = "Allure Report", reportLanguage = "en", singleFile, logo = "", theme = "auto", groupBy, reportFiles, reportDataFiles, reportUuid, allureVersion, layout = "base", defaultSection = "", ci, stepTreeExpansion, } = payload;
378
+ const { id, reportName = "Allure Report", reportLanguage = "en", singleFile, logo = "", theme = "auto", groupBy, reportFiles, reportDataFiles, reportUuid, allureVersion, layout = "base", defaultSection = "", ci, executor, runSummary, stepTreeExpansion, defaultSortBy, } = payload;
366
379
  const manifest = await readTemplateManifest(payload.singleFile);
367
380
  const headTags = [];
368
381
  const bodyTags = [];
@@ -409,11 +422,14 @@ export const generateStaticFiles = async (payload) => {
409
422
  groupBy: groupBy?.length ? groupBy : [],
410
423
  cacheKey: now.toString(),
411
424
  ci,
425
+ executor,
426
+ runSummary,
412
427
  layout,
413
428
  allureVersion,
414
429
  sections,
415
430
  defaultSection,
416
431
  stepTreeExpansion,
432
+ defaultSortBy,
417
433
  };
418
434
  try {
419
435
  const html = compiledTemplate({
package/dist/model.d.ts CHANGED
@@ -21,6 +21,7 @@ export type AwesomeOptions = {
21
21
  publish?: boolean;
22
22
  appendTitlePath?: boolean;
23
23
  stepTreeExpansion?: StepTreeExpansion;
24
+ defaultSortBy?: string;
24
25
  };
25
26
  export type TemplateManifest = Record<string, string>;
26
27
  export type AwesomePluginOptions = AwesomeOptions;
package/dist/plugin.js CHANGED
@@ -15,7 +15,7 @@ import { createPluginSummary, } from "@allurereport/plugin-api";
15
15
  import { preciseTreeLabels } from "@allurereport/plugin-api";
16
16
  import { applyCategoriesToTestResults, generateCategories } from "./categories.js";
17
17
  import { generateTimeline } from "./generateTimeline.js";
18
- import { generateAllCharts, generateAttachmentsFiles, generateEnvironmentJson, generateEnvirontmentsList, generateGlobals, generateHistoryDataPoints, generateNav, generateQualityGateResults, generateSearchIndex, generateStaticFiles, generateStatistic, generateTestCases, generateTestEnvGroups, generateTestResults, generateTree, generateTreeFilters, generateVariables, } from "./generators.js";
18
+ import { generateAllCharts, generateAttachmentsFiles, generateEnvironmentJson, generateEnvirontmentsList, generateGlobals, generateHistoryDataPoints, generateNav, generateQualityGateResults, generateSearchIndex, generateStaticFiles, generateStatistic, generateTestCases, generateTestEnvGroups, generateTestResults, generateTree, generateTreeFilters, generateVariables, getRunSummary, } from "./generators.js";
19
19
  import { InMemoryReportDataWriter, ReportFileDataWriter } from "./writer.js";
20
20
  const statisticByTestResults = async (store, testResults) => {
21
21
  const statistic = { total: 0 };
@@ -46,8 +46,10 @@ export class AwesomePlugin {
46
46
  const hideLabels = context.hideLabels;
47
47
  const categories = context.categories ?? [];
48
48
  const environmentItems = await store.metadataByKey("allure_environment");
49
+ const executor = await store.metadataByKey("allure2_executor");
49
50
  const attachments = await store.allAttachments();
50
51
  const allTrs = await store.allTestResults({ includeRetries: true, filter });
52
+ const runSummary = getRunSummary(allTrs);
51
53
  const statistics = await store.testsStatistic(filter);
52
54
  const environments = await store.allEnvironmentIdentities();
53
55
  const envStatistics = new Map();
@@ -142,6 +144,8 @@ export class AwesomePlugin {
142
144
  reportUuid: context.reportUuid,
143
145
  reportName: context.reportName,
144
146
  ci: context.ci,
147
+ executor,
148
+ runSummary,
145
149
  reportDataFiles,
146
150
  });
147
151
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allurereport/plugin-awesome",
3
- "version": "3.9.0",
3
+ "version": "3.11.0",
4
4
  "description": "Allure Awesome Plugin – brand new HTML report with modern design and new features",
5
5
  "keywords": [
6
6
  "allure",
@@ -30,11 +30,11 @@
30
30
  "lint:fix": "oxlint --import-plugin --fix src test features stories"
31
31
  },
32
32
  "dependencies": {
33
- "@allurereport/charts-api": "3.9.0",
34
- "@allurereport/core-api": "3.9.0",
35
- "@allurereport/plugin-api": "3.9.0",
36
- "@allurereport/web-awesome": "3.9.0",
37
- "@allurereport/web-commons": "3.9.0",
33
+ "@allurereport/charts-api": "3.11.0",
34
+ "@allurereport/core-api": "3.11.0",
35
+ "@allurereport/plugin-api": "3.11.0",
36
+ "@allurereport/web-awesome": "3.11.0",
37
+ "@allurereport/web-commons": "3.11.0",
38
38
  "d3-shape": "^3.2.0",
39
39
  "handlebars": "^4.7.9",
40
40
  "markdown-it": "^14.1.0"
@@ -42,12 +42,12 @@
42
42
  "devDependencies": {
43
43
  "@types/d3-shape": "^3.1.6",
44
44
  "@types/markdown-it": "^14.1.2",
45
- "@types/node": "^20.17.9",
46
- "@vitest/runner": "^2.1.9",
47
- "allure-js-commons": "^3.3.3",
48
- "allure-vitest": "^3.3.3",
49
- "rimraf": "^6.0.1",
50
- "typescript": "^5.6.3",
51
- "vitest": "^2.1.9"
45
+ "@types/node": "^20",
46
+ "@vitest/runner": "^2",
47
+ "allure-js-commons": "^3",
48
+ "allure-vitest": "^3",
49
+ "rimraf": "^6",
50
+ "typescript": "^5",
51
+ "vitest": "^4.1.0"
52
52
  }
53
53
  }