@allurereport/web-awesome 3.0.0-beta.15 → 3.0.0-beta.17

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.
Files changed (111) hide show
  1. package/dist/multi/173.app-3f57abaa5734556b2988.js +1 -0
  2. package/dist/multi/174.app-3f57abaa5734556b2988.js +1 -0
  3. package/dist/multi/252.app-3f57abaa5734556b2988.js +1 -0
  4. package/dist/multi/282.app-3f57abaa5734556b2988.js +1 -0
  5. package/dist/multi/29.app-3f57abaa5734556b2988.js +1 -0
  6. package/dist/multi/416.app-3f57abaa5734556b2988.js +1 -0
  7. package/dist/multi/527.app-3f57abaa5734556b2988.js +1 -0
  8. package/dist/multi/600.app-3f57abaa5734556b2988.js +1 -0
  9. package/dist/multi/605.app-3f57abaa5734556b2988.js +1 -0
  10. package/dist/multi/638.app-3f57abaa5734556b2988.js +1 -0
  11. package/dist/multi/672.app-3f57abaa5734556b2988.js +1 -0
  12. package/dist/multi/686.app-3f57abaa5734556b2988.js +1 -0
  13. package/dist/multi/725.app-3f57abaa5734556b2988.js +1 -0
  14. package/dist/multi/741.app-3f57abaa5734556b2988.js +1 -0
  15. package/dist/multi/755.app-3f57abaa5734556b2988.js +1 -0
  16. package/dist/multi/894.app-3f57abaa5734556b2988.js +1 -0
  17. package/dist/multi/943.app-3f57abaa5734556b2988.js +1 -0
  18. package/dist/multi/980.app-3f57abaa5734556b2988.js +1 -0
  19. package/dist/multi/app-3f57abaa5734556b2988.js +2 -0
  20. package/dist/multi/app-3f57abaa5734556b2988.js.LICENSE.txt +16 -0
  21. package/dist/multi/manifest.json +24 -24
  22. package/dist/multi/styles-9475296a2cbcd0e5d2d0.css +44 -0
  23. package/dist/single/app-800f7e75bb52ecb2ae21.js +2 -0
  24. package/dist/single/app-800f7e75bb52ecb2ae21.js.LICENSE.txt +16 -0
  25. package/dist/single/manifest.json +1 -1
  26. package/package.json +23 -17
  27. package/src/assets/scss/day.scss +2 -0
  28. package/src/assets/scss/night.scss +2 -0
  29. package/src/assets/scss/theme.scss +4 -0
  30. package/src/components/Charts/index.tsx +2 -2
  31. package/src/components/Header/CiInfo/index.tsx +51 -0
  32. package/src/components/Header/CiInfo/styles.scss +7 -0
  33. package/src/components/Header/index.tsx +6 -1
  34. package/src/components/MetadataButton/index.tsx +1 -1
  35. package/src/components/ReportBody/Filters.tsx +44 -63
  36. package/src/components/ReportMetadata/MetadataSummary.tsx +1 -1
  37. package/src/components/ReportMetadata/MetadataWithIcon.tsx +9 -11
  38. package/src/components/TestResult/TrDescription/index.tsx +1 -1
  39. package/src/components/TestResult/TrError/TrDiff.tsx +0 -1
  40. package/src/components/TestResult/TrHistory/TrHistoryItem.tsx +63 -34
  41. package/src/components/TestResult/TrHistory/styles.scss +2 -1
  42. package/src/components/TestResult/TrInfo/TrInfoStatuses.tsx +4 -2
  43. package/src/components/TestResult/TrOverview.tsx +0 -1
  44. package/src/components/TestResult/TrPrevStatuses/index.tsx +20 -5
  45. package/src/components/TestResult/TrPwTraces/index.tsx +6 -3
  46. package/src/components/TestResult/TrRetriesView/TrRetriesItem.tsx +24 -6
  47. package/src/components/TestResult/TrRetriesView/index.tsx +8 -1
  48. package/src/components/TestResult/TrSteps/TrAttachment.tsx +13 -1
  49. package/src/components/TestResult/TrSteps/TrStep.tsx +4 -3
  50. package/src/components/TestResult/TrSteps/TrStepInfo.tsx +61 -1
  51. package/src/components/TestResult/TrSteps/styles.scss +31 -0
  52. package/src/components/Tree/index.tsx +15 -3
  53. package/src/index.html +14 -1
  54. package/src/locales/az.json +34 -16
  55. package/src/locales/de.json +34 -15
  56. package/src/locales/en.json +20 -2
  57. package/src/locales/es.json +31 -12
  58. package/src/locales/fr.json +31 -12
  59. package/src/locales/he.json +21 -2
  60. package/src/locales/hy.json +21 -2
  61. package/src/locales/it.json +24 -5
  62. package/src/locales/ja.json +24 -5
  63. package/src/locales/ka.json +31 -12
  64. package/src/locales/kr.json +21 -2
  65. package/src/locales/nl.json +31 -12
  66. package/src/locales/pl.json +41 -20
  67. package/src/locales/pt.json +32 -12
  68. package/src/locales/ru.json +42 -21
  69. package/src/locales/sv.json +31 -12
  70. package/src/locales/tr.json +31 -12
  71. package/src/locales/zh.json +31 -12
  72. package/src/stores/locale.ts +2 -0
  73. package/src/stores/tree.ts +7 -1
  74. package/src/utils/charts.ts +16 -18
  75. package/src/utils/tree.ts +23 -0
  76. package/src/utils/treeFilters.ts +14 -3
  77. package/test/components/Header/CiInfo.test.tsx +151 -0
  78. package/test/components/Header.test.tsx +127 -0
  79. package/tsconfig.json +7 -2
  80. package/tsconfig.node.json +8 -0
  81. package/types.d.ts +4 -1
  82. package/vitest.config.ts +15 -2
  83. package/vitest.setup.ts +1 -0
  84. package/webpack.config.js +5 -5
  85. package/dist/multi/173.app-35b67161.js +0 -1
  86. package/dist/multi/174.app-35b67161.js +0 -1
  87. package/dist/multi/252.app-35b67161.js +0 -1
  88. package/dist/multi/282.app-35b67161.js +0 -1
  89. package/dist/multi/29.app-35b67161.js +0 -1
  90. package/dist/multi/416.app-35b67161.js +0 -1
  91. package/dist/multi/527.app-35b67161.js +0 -1
  92. package/dist/multi/600.app-35b67161.js +0 -1
  93. package/dist/multi/605.app-35b67161.js +0 -1
  94. package/dist/multi/638.app-35b67161.js +0 -1
  95. package/dist/multi/672.app-35b67161.js +0 -1
  96. package/dist/multi/686.app-35b67161.js +0 -1
  97. package/dist/multi/725.app-35b67161.js +0 -1
  98. package/dist/multi/741.app-35b67161.js +0 -1
  99. package/dist/multi/755.app-35b67161.js +0 -1
  100. package/dist/multi/894.app-35b67161.js +0 -1
  101. package/dist/multi/943.app-35b67161.js +0 -1
  102. package/dist/multi/980.app-35b67161.js +0 -1
  103. package/dist/multi/app-35b67161.js +0 -2
  104. package/dist/multi/app-35b67161.js.LICENSE.txt +0 -23
  105. package/dist/multi/styles-35b67161.css +0 -43
  106. package/dist/single/app-f5ecfcd9.js +0 -2
  107. package/dist/single/app-f5ecfcd9.js.LICENSE.txt +0 -23
  108. /package/dist/multi/{JetBrainsMono_vf-b9a9c326..woff → JetBrainsMono_vf.woff} +0 -0
  109. /package/dist/multi/{JetBrainsMono_vf-9e9649b6..woff2 → JetBrainsMono_vf.woff2} +0 -0
  110. /package/dist/multi/{pt-root-ui_vf-22fe60ca..woff → pt-root-ui_vf.woff} +0 -0
  111. /package/dist/multi/{pt-root-ui_vf-9d251e8b..woff2 → pt-root-ui_vf.woff2} +0 -0
@@ -1,18 +1,33 @@
1
1
  import { type HistoryTestResult } from "@allurereport/core-api";
2
+ import { getReportOptions } from "@allurereport/web-commons";
2
3
  import { SvgIcon, Text, TooltipWrapper, allureIcons } from "@allurereport/web-components";
3
4
  import type { FunctionalComponent } from "preact";
4
- import type { AwesomeTestResult } from "types";
5
+ import type { AwesomeReportOptions, AwesomeTestResult } from "types";
5
6
  import { useI18n } from "@/stores";
6
- import { navigateTo } from "@/stores/router";
7
7
  import { capitalize } from "@/utils/capitalize";
8
8
  import { timestampToDate } from "@/utils/time";
9
9
  import * as styles from "./styles.scss";
10
10
 
11
11
  const TrPrevStatus: FunctionalComponent<{ item: HistoryTestResult }> = ({ item }) => {
12
+ const reportOptions = getReportOptions<AwesomeReportOptions & { id: string }>();
13
+
14
+ if (!item.url) {
15
+ return (
16
+ <div className={styles["test-result-prev-status"]}>
17
+ <SvgIcon id={allureIcons.lineShapesDotCircle} className={styles[`status-${item?.status}`]} />
18
+ </div>
19
+ );
20
+ }
21
+
22
+ const { origin, pathname } = new URL(item.url);
23
+ const navigateUrl = new URL([pathname, reportOptions.id].join("/"), origin);
24
+
25
+ navigateUrl.hash = item.id;
26
+
12
27
  return (
13
- <div className={styles["test-result-prev-status"]} onClick={() => navigateTo(`${item.id}`)}>
28
+ <a className={styles["test-result-prev-status"]} href={navigateUrl.toString()}>
14
29
  <SvgIcon id={allureIcons.lineShapesDotCircle} className={styles[`status-${item?.status}`]} />
15
- </div>
30
+ </a>
16
31
  );
17
32
  };
18
33
  const TrPrevStatusTooltip: FunctionalComponent<{ item: HistoryTestResult }> = ({ item }) => {
@@ -38,7 +53,7 @@ export const TrPrevStatuses: FunctionalComponent<TrPrevStatusesProps> = ({ histo
38
53
  return (
39
54
  <div className={styles["test-result-prev-statuses"]}>
40
55
  {history?.slice(0, 6).map((item, key) => (
41
- <div key={key} className={styles["test-result-prev-status"]}>
56
+ <div key={key} data-testid={"test-result-prev-status"} className={styles["test-result-prev-status"]}>
42
57
  <TooltipWrapper key={key} tooltipComponent={<TrPrevStatusTooltip item={item} />}>
43
58
  <TrPrevStatus item={item} />
44
59
  </TooltipWrapper>
@@ -4,7 +4,6 @@ import { useState } from "preact/hooks";
4
4
  import type { AwesomeTestResult } from "types";
5
5
  import { MetadataButton } from "@/components/MetadataButton";
6
6
  import { TrAttachment } from "@/components/TestResult/TrSteps/TrAttachment";
7
- import { useI18n } from "@/stores/locale";
8
7
  import * as styles from "./styles.scss";
9
8
 
10
9
  export type TrMetadataProps = {
@@ -13,12 +12,16 @@ export type TrMetadataProps = {
13
12
  };
14
13
 
15
14
  export const TrPwTraces: FunctionalComponent<TrMetadataProps> = ({ pwTraces }) => {
16
- const { t } = useI18n("ui");
17
15
  const [isOpened, setIsOpened] = useState(true);
18
16
 
19
17
  return (
20
18
  <div className={styles["tr-metadata"]}>
21
- <MetadataButton isOpened={isOpened} setIsOpen={setIsOpened} counter={pwTraces?.length} title={t("pwTrace")} />
19
+ <MetadataButton
20
+ isOpened={isOpened}
21
+ setIsOpen={setIsOpened}
22
+ counter={pwTraces?.length}
23
+ title={"Playwright Trace"}
24
+ />
22
25
  {isOpened && (
23
26
  <div className={styles["tr-metadata-wrapper"]}>
24
27
  {pwTraces?.map((pw, index) => <TrAttachment stepIndex={index + 1} item={pw} key={pw.link.id} />)}
@@ -5,27 +5,44 @@ import { useState } from "preact/hooks";
5
5
  import type { AwesomeTestResult } from "types";
6
6
  import { TrError } from "@/components/TestResult/TrError";
7
7
  import * as styles from "@/components/TestResult/TrRetriesView/styles.scss";
8
+ import { useI18n } from "@/stores/locale";
8
9
  import { navigateTo } from "@/stores/router";
9
10
  import { timestampToDate } from "@/utils/time";
10
11
 
11
- export const TrRetriesItem: FunctionalComponent<{
12
+ export type TrRetriesItemProps = {
12
13
  testResultItem: AwesomeTestResult;
13
- }> = ({ testResultItem }) => {
14
+ attempt: number;
15
+ totalAttempts: number;
16
+ };
17
+
18
+ export const TrRetriesItem: FunctionalComponent<TrRetriesItemProps> = ({ testResultItem, attempt, totalAttempts }) => {
14
19
  const { id, status, error, stop, duration } = testResultItem;
15
20
  const [isOpened, setIsOpen] = useState(false);
16
- const convertedStop = timestampToDate(stop);
21
+
22
+ const { t } = useI18n("ui");
23
+
24
+ const retryTitlePrefix = t("attempt", { attempt, total: totalAttempts });
25
+ const convertedStop = stop ? timestampToDate(stop) : undefined;
26
+ const retryTitle = convertedStop ? `${retryTitlePrefix} – ${convertedStop}` : retryTitlePrefix;
27
+
17
28
  const formattedDuration = typeof duration === "number" ? formatDuration(duration) : undefined;
18
29
  const navigateUrl = id;
19
30
 
20
31
  return (
21
- <div>
32
+ <div data-testid="test-result-retries-item">
22
33
  <div className={styles["test-result-retries-item-header"]} onClick={() => setIsOpen(!isOpened)}>
23
34
  {Boolean(error.trace || error.message) && (
24
- <ArrowButton isOpened={isOpened} icon={allureIcons.lineArrowsChevronDown} />
35
+ <ArrowButton
36
+ data-testid="test-result-retries-item-arrow-button"
37
+ isOpened={isOpened}
38
+ icon={allureIcons.lineArrowsChevronDown}
39
+ />
25
40
  )}
26
41
  <div className={styles["test-result-retries-item-wrap"]}>
27
42
  <TreeItemIcon status={status} className={styles["test-result-retries-item-status"]} />
28
- <Text className={styles["test-result-retries-item-text"]}>{convertedStop}</Text>
43
+ <Text data-testid="test-result-retries-item-text" className={styles["test-result-retries-item-text"]}>
44
+ {retryTitle}
45
+ </Text>
29
46
  <div className={styles["test-result-retries-item-info"]}>
30
47
  {Boolean(formattedDuration) && (
31
48
  <Text type="ui" size={"s"} className={styles["item-time"]}>
@@ -37,6 +54,7 @@ export const TrRetriesItem: FunctionalComponent<{
37
54
  style={"ghost"}
38
55
  size={"s"}
39
56
  className={styles["test-result-retries-item-link"]}
57
+ data-testid="test-result-retries-item-open-button"
40
58
  onClick={() => navigateTo(navigateUrl)}
41
59
  />
42
60
  </div>
@@ -13,7 +13,14 @@ export const TrRetriesView: FunctionalComponent<{
13
13
  return (
14
14
  <div className={styles["test-result-history"]}>
15
15
  {retries.length ? (
16
- retries?.map((item, key) => <TrRetriesItem testResultItem={item as unknown as AwesomeTestResult} key={key} />)
16
+ retries?.map((item, key) => (
17
+ <TrRetriesItem
18
+ testResultItem={item as unknown as AwesomeTestResult}
19
+ key={key}
20
+ attempt={retries.length - key}
21
+ totalAttempts={retries.length + 1}
22
+ />
23
+ ))
17
24
  ) : (
18
25
  <div className={styles["test-result-empty"]}>{t("no-retries-results")}</div>
19
26
  )}
@@ -6,6 +6,7 @@ import type { FunctionComponent } from "preact";
6
6
  import { useState } from "preact/hooks";
7
7
  import { TrAttachmentInfo } from "@/components/TestResult/TrSteps/TrAttachmentInfo";
8
8
  import * as styles from "@/components/TestResult/TrSteps/styles.scss";
9
+ import { openModal } from "@/stores/modal";
9
10
 
10
11
  const { lineImagesImage, lineFilesFileAttachment2, playwrightLogo } = allureIcons;
11
12
 
@@ -60,6 +61,17 @@ export const TrAttachment: FunctionComponent<{
60
61
  const componentType = attachmentType(link.contentType);
61
62
  const isValidComponentType = !["archive", null].includes(componentType.type as string);
62
63
 
64
+ const expandAttachment = (event: Event) => {
65
+ event.stopPropagation();
66
+ if (componentType.type !== "image") {
67
+ return;
68
+ }
69
+ openModal({
70
+ data: item,
71
+ component: <Attachment item={item} previewable={true} />,
72
+ });
73
+ };
74
+
63
75
  return (
64
76
  <div data-testid={"test-result-attachment"} className={styles["test-result-step"]}>
65
77
  <div
@@ -96,7 +108,7 @@ export const TrAttachment: FunctionComponent<{
96
108
  </div>
97
109
  {isOpened && isValidComponentType && (
98
110
  <div className={styles["test-result-attachment-content-wrapper"]}>
99
- <div className={styles["test-result-attachment-content"]}>
111
+ <div className={styles["test-result-attachment-content"]} role={"button"} onClick={expandAttachment}>
100
112
  <Attachment item={item} />
101
113
  </div>
102
114
  </div>
@@ -1,5 +1,5 @@
1
- import type { DefaultTestStepResult, TestStepResult } from "@allurereport/core-api";
2
- import { ArrowButton, Code, Text, TreeItemIcon, allureIcons } from "@allurereport/web-components";
1
+ import type { DefaultTestStepResult, TestStatus, TestStepResult } from "@allurereport/core-api";
2
+ import { ArrowButton, Code, SvgIcon, Text, TreeItemIcon, allureIcons } from "@allurereport/web-components";
3
3
  import type { FunctionComponent } from "preact";
4
4
  import { useState } from "preact/hooks";
5
5
  import { MetadataList } from "@/components/Metadata";
@@ -19,13 +19,14 @@ export const TrStepParameters = (props: { parameters: DefaultTestStepResult["par
19
19
  </div>
20
20
  );
21
21
  };
22
+
22
23
  export const TrStepsContent = (props: { item: DefaultTestStepResult }) => {
23
24
  const { item } = props;
24
25
 
25
26
  return (
26
27
  <div data-testid={"test-result-step-content"} className={styles["test-result-step-content"]}>
27
28
  {Boolean(item?.parameters?.length) && <TrStepParameters parameters={item.parameters} />}
28
- {Boolean(item?.message && item?.trace) && <TrError {...item} />}
29
+ {Boolean(item?.message && item?.trace && !item?.hasSimilarErrorInSubSteps) && <TrError {...item} />}
29
30
  {Boolean(item?.steps?.length) && (
30
31
  <>
31
32
  {item.steps?.map((subItem, key) => {
@@ -1,15 +1,75 @@
1
- import { type DefaultTestStepResult, formatDuration } from "@allurereport/core-api";
1
+ import {
2
+ type DefaultTestStepResult,
3
+ type TestStatus,
4
+ type TestStepResult,
5
+ formatDuration,
6
+ } from "@allurereport/core-api";
2
7
  import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
8
+ import clsx from "clsx";
3
9
  import * as styles from "@/components/TestResult/TrSteps/styles.scss";
4
10
 
11
+ const countErrorStatuses = (step: TestStepResult): Record<string, number> => {
12
+ if (step.type !== "step") {
13
+ return;
14
+ }
15
+ const result: Record<string, number> = {};
16
+
17
+ const collectFromSteps = (currentStep: TestStepResult) => {
18
+ if (currentStep.type !== "step") {
19
+ return;
20
+ }
21
+ if (currentStep.status !== "passed") {
22
+ result[currentStep.status] = (result[currentStep.status] || 0) + 1;
23
+ }
24
+ currentStep.steps?.forEach(collectFromSteps);
25
+ };
26
+ step?.steps?.forEach(collectFromSteps);
27
+
28
+ return result;
29
+ };
30
+
31
+ const {
32
+ lineGeneralCheckCircle,
33
+ lineGeneralHelpCircle,
34
+ lineGeneralMinusCircle,
35
+ lineGeneralXCircle,
36
+ lineGeneralInfoCircle,
37
+ } = allureIcons;
38
+
39
+ const icons = {
40
+ failed: lineGeneralXCircle,
41
+ broken: lineGeneralInfoCircle,
42
+ passed: lineGeneralCheckCircle,
43
+ skipped: lineGeneralMinusCircle,
44
+ unknown: lineGeneralHelpCircle,
45
+ };
46
+
5
47
  export const TrStepInfo = (props: { item: DefaultTestStepResult }) => {
6
48
  const { item } = props;
7
49
  const formattedDuration = formatDuration(item?.duration as number);
8
50
  const stepLength = item.steps?.length;
9
51
  const attachmentLength = item.steps?.filter((step) => step.type === "attachment")?.length;
10
52
 
53
+ const failedStepsInTree = countErrorStatuses(item);
54
+
55
+ const FailedSteps = () => (
56
+ <div>
57
+ {Object.entries(failedStepsInTree).map(([status, count], index) => (
58
+ <div className={styles["item-status"]} key={index}>
59
+ <SvgIcon
60
+ size="m"
61
+ id={icons[status as TestStatus]}
62
+ className={clsx(styles["item-status-icon"], styles[`status-${status}`])}
63
+ />
64
+ {count && <span>{count}</span>}
65
+ </div>
66
+ ))}
67
+ </div>
68
+ );
69
+
11
70
  return (
12
71
  <div className={styles["item-info"]}>
72
+ <FailedSteps />
13
73
  {Boolean(stepLength) && (
14
74
  <div className={styles["item-info-step"]}>
15
75
  <SvgIcon id={allureIcons.lineArrowsCornerDownRight} className={styles["item-info-step-icon"]} />
@@ -1,3 +1,5 @@
1
+ @import "~@allurereport/web-components/mixins.scss";
2
+
1
3
  .test-result-steps {
2
4
  padding-right: 24px;
3
5
 
@@ -217,8 +219,37 @@
217
219
 
218
220
  .test-result-strut {
219
221
  width: 24px;
222
+ flex: none;
220
223
  }
221
224
 
222
225
  .html-attachment-preview {
223
226
  padding: 0 16px;
224
227
  }
228
+
229
+ .item-status {
230
+ display: flex;
231
+ align-items: center;
232
+ gap: 4px;
233
+ }
234
+
235
+ .item-status-icon {
236
+ &.status-passed {
237
+ color: var(--bg-support-castor);
238
+ }
239
+
240
+ &.status-failed {
241
+ color: var(--bg-support-capella);
242
+ }
243
+
244
+ &.status-broken {
245
+ color: var(--bg-support-atlas);
246
+ }
247
+
248
+ &.status-skipped {
249
+ color: var(--bg-support-rau);
250
+ }
251
+
252
+ &.status-unknown {
253
+ color: var(--bg-support-skat);
254
+ }
255
+ }
@@ -1,4 +1,5 @@
1
1
  import { Button, Loadable, PageLoader, Text, Tree, TreeStatusBar } from "@allurereport/web-components";
2
+ import { useMemo } from "preact/hooks";
2
3
  import type { AwesomeStatus } from "types";
3
4
  import { MetadataButton } from "@/components/MetadataButton";
4
5
  import { useTabsContext } from "@/components/Tabs";
@@ -15,14 +16,23 @@ import {
15
16
  toggleTree,
16
17
  treeStore,
17
18
  } from "@/stores/tree";
19
+ import { createTreeLocalizer } from "@/utils/tree";
18
20
  import * as styles from "./styles.scss";
19
21
 
20
22
  export const TreeList = () => {
21
23
  const { t } = useI18n("empty");
22
24
  const { t: tEnvironments } = useI18n("environments");
25
+ const { t: tooltip } = useI18n("transitions.description");
23
26
  const { currentTab } = useTabsContext();
24
27
  const routeId = route.value.params?.testResultId;
25
28
 
29
+ const localizers = useMemo(
30
+ () => ({
31
+ tooltip,
32
+ }),
33
+ [tooltip],
34
+ );
35
+
26
36
  return (
27
37
  <Loadable
28
38
  source={treeStore}
@@ -59,6 +69,8 @@ export const TreeList = () => {
59
69
  );
60
70
  }
61
71
 
72
+ const treeLocalizer = createTreeLocalizer(localizers);
73
+
62
74
  // render single tree for single environment
63
75
  if (environmentsStore.value.data.length === 1) {
64
76
  return (
@@ -69,7 +81,7 @@ export const TreeList = () => {
69
81
  collapsedTrees={collapsedTrees.value}
70
82
  toggleTree={toggleTree}
71
83
  navigateTo={navigateTo}
72
- tree={filteredTree.value.default}
84
+ tree={treeLocalizer(filteredTree.value.default)}
73
85
  statusFilter={currentTab as AwesomeStatus}
74
86
  routeId={routeId}
75
87
  root
@@ -89,7 +101,7 @@ export const TreeList = () => {
89
101
  collapsedTrees={collapsedTrees.value}
90
102
  toggleTree={toggleTree}
91
103
  navigateTo={navigateTo}
92
- tree={currentTree}
104
+ tree={treeLocalizer(currentTree)}
93
105
  statusFilter={currentTab as AwesomeStatus}
94
106
  routeId={routeId}
95
107
  root
@@ -141,7 +153,7 @@ export const TreeList = () => {
141
153
  toggleTree={toggleTree}
142
154
  statusFilter={currentTab}
143
155
  navigateTo={navigateTo}
144
- tree={value}
156
+ tree={treeLocalizer(value)}
145
157
  routeId={routeId}
146
158
  root
147
159
  />
package/src/index.html CHANGED
@@ -30,7 +30,20 @@
30
30
  "reportUuid": "51b36daf-614b-409c-b6a1-e8e401b2c144",
31
31
  "groupBy": ["parentSuite", "suite", "subSuite"],
32
32
  "layout": "split",
33
- "allureVersion": "3.0.0-beta.8"
33
+ "allureVersion": "3.0.0-beta.8",
34
+ "ci": {
35
+ "type": "github",
36
+ "detected": true,
37
+ "jobUid": "1234567890",
38
+ "jobUrl": "#",
39
+ "jobName": "Sample job name",
40
+ "jobRunUid": "0987654321",
41
+ "jobRunUrl": "#",
42
+ "jobRunName": "Sample job run name",
43
+ "jobRunBranch": "master",
44
+ "pullRequestName": "Pull request #123",
45
+ "pullRequestUrl": "#"
46
+ }
34
47
  };
35
48
  </script>
36
49
  <script async>
@@ -25,10 +25,21 @@
25
25
  },
26
26
  "filters": {
27
27
  "more-filters": "Daha çox filtr",
28
- "enable-filter": "\"{filter}\" filtrlərini aktiv edin",
28
+ "enable-filter": "\"{{filter}}\" filtrlərini aktiv edin",
29
29
  "flaky": "Etibarsız",
30
30
  "retry": "Təkrar",
31
- "new": "Yeni"
31
+ "new": "Yeni",
32
+ "fixed": "Düzəldilmiş",
33
+ "regressed": "Reqressiya",
34
+ "malfunctioned": "Sınıq"
35
+ },
36
+ "filters.description": {
37
+ "flaky": "Qeyri-sabit testləri göstərir",
38
+ "retry": "Yenidən işə salınan test nəticələrini göstərir",
39
+ "new": "Bu hesabatda ilk dəfə görünən test nəticələrini göstərir",
40
+ "fixed": "İndi uğurlu olan, əvvəl \"uğursuz\" və ya \"sınıq\" olan testləri göstərir",
41
+ "regressed": "Statusu \"uğursuz\" olan, əvvəl \"uğurlu\" və ya \"sınıq\" olan test nəticələrini göstərir",
42
+ "malfunctioned": "Statusu \"sınıq\" olan, əvvəl \"uğurlu\" və ya \"uğursuz\" olan test nəticələrini göstərir"
32
43
  },
33
44
  "sort-by": {
34
45
  "sort-by-text": "Sıralamaq üzrə:",
@@ -42,18 +53,18 @@
42
53
  "status": "Status"
43
54
  },
44
55
  "sort-by.directions": {
45
- "order-desc": "SonuncuBirinci",
46
- "order-asc": "BirinciSonuncu",
56
+ "order-desc": "Sonuncu Birinci",
57
+ "order-asc": "Birinci Sonuncu",
47
58
  "order-asc-short": "Birinci",
48
59
  "order-desc-short": "Sonuncu",
49
- "alphabet-asc": "AZ",
50
- "alphabet-desc": "ZA",
51
- "alphabet-asc-short": "AZ",
52
- "alphabet-desc-short": "ZA",
53
- "duration-asc": "19",
54
- "duration-desc": "91",
55
- "duration-asc-short": "19",
56
- "duration-desc-short": "91",
60
+ "alphabet-asc": "A Z",
61
+ "alphabet-desc": "Z A",
62
+ "alphabet-asc-short": "A Z",
63
+ "alphabet-desc-short": "Z A",
64
+ "duration-asc": "1 9",
65
+ "duration-desc": "9 1",
66
+ "duration-asc-short": "1 9",
67
+ "duration-desc-short": "9 1",
57
68
  "status-asc": "Filtr siyahısına uyğun",
58
69
  "status-desc": "Tərsinə çevrilmiş",
59
70
  "status-asc-short": "Adi",
@@ -62,6 +73,7 @@
62
73
  "empty": {
63
74
  "no-results": "Nəticə tapılmadı",
64
75
  "no-tests-found": "Nəticə tapılmadı",
76
+ "no-message-provided": "Mesaj təqdim edilməyib",
65
77
  "clear-filters": "Filtrləri təmizlə",
66
78
  "no-attachments-results": "Əlavə məlumatı mövcud deyil",
67
79
  "no-history-results": "Tarixçə məlumatı mövcud deyil",
@@ -98,16 +110,16 @@
98
110
  "history": "Tarixçə",
99
111
  "attachments": "Əlavələr",
100
112
  "retries": "Təkrarlar",
101
- "environment_one": "Mühit",
102
- "environment_other": "Mühitlər",
113
+ "environments": "Mühitlər",
103
114
  "error": "Səhv",
104
115
  "goToStep": "Addıma keç",
105
116
  "showLess": "Daha az göstər",
106
117
  "showMore": "Daha çox göstər",
107
118
  "copy": "Kopyala",
119
+ "attempt": "Cəhd {{attempt}} / {{total}}",
108
120
  "at": "üçün",
109
- "openPwTrace": "Playwright Trace aç",
110
- "variables": "Dəyişənlər"
121
+ "variables": "Dəyişənlər",
122
+ "openPwTrace": "Playwright Trace aç"
111
123
  },
112
124
  "controls": {
113
125
  "newTabAttachment": "Yeni sekmede aç",
@@ -155,5 +167,11 @@
155
167
  "pie": {
156
168
  "title": "Test Uğur Dərəcəsi"
157
169
  }
170
+ },
171
+ "transitions.description": {
172
+ "new": "Bu test nəticəsinin hesabatda ilk dəfə görünməsi",
173
+ "fixed": "Əvvəl \"uğursuz\" və ya \"sınıq\" olan, indi \"uğurlu\" olan test",
174
+ "regressed": "Əvvəl \"uğurlu\" və ya \"sınıq\" olan, indi \"uğursuz\" olan test",
175
+ "malfunctioned": "Əvvəl \"uğurlu\" və ya \"uğursuz\" olan, indi \"sınıq\" olan test"
158
176
  }
159
177
  }
@@ -24,11 +24,22 @@
24
24
  "search-placeholder": "Name oder ID"
25
25
  },
26
26
  "filters": {
27
- "more-filters": "Weitere Filter",
28
- "enable-filter": "Filter für \"{filter}\" aktivieren",
27
+ "more-filters": "Filter",
28
+ "enable-filter": "Filter nach \"{{filter}}\" aktivieren",
29
29
  "flaky": "Instabil",
30
- "retry": "Wiederholen",
31
- "new": "Neu"
30
+ "retry": "Wiederholt",
31
+ "new": "Neu",
32
+ "fixed": "Behoben",
33
+ "regressed": "Regressiert",
34
+ "malfunctioned": "Defekt"
35
+ },
36
+ "filters.description": {
37
+ "flaky": "Instabile Tests anzeigen",
38
+ "retry": "Testergebnisse anzeigen, die wiederholt wurden",
39
+ "new": "Testergebnisse anzeigen, die zum ersten Mal in diesem Bericht erscheinen",
40
+ "fixed": "Tests anzeigen, die jetzt erfolgreich sind, aber zuvor \"fehlgeschlagen\" oder \"defekt\" waren",
41
+ "regressed": "Testergebnisse anzeigen, die den Status von \"erfolgreich\" oder \"defekt\" zu \"fehlgeschlagen\" geändert haben",
42
+ "malfunctioned": "Testergebnisse anzeigen, die den Status von \"erfolgreich\" oder \"fehlgeschlagen\" zu \"defekt\" geändert haben"
32
43
  },
33
44
  "sort-by": {
34
45
  "sort-by-text": "Sortieren nach:",
@@ -42,18 +53,18 @@
42
53
  "status": "Status"
43
54
  },
44
55
  "sort-by.directions": {
45
- "order-desc": "NeuesteÄlteste",
46
- "order-asc": "ÄltesteNeueste",
56
+ "order-desc": "Neueste Älteste",
57
+ "order-asc": "Älteste Neueste",
47
58
  "order-asc-short": "Älteste",
48
59
  "order-desc-short": "Neueste",
49
- "alphabet-asc": "AZ",
50
- "alphabet-desc": "ZA",
51
- "alphabet-asc-short": "AZ",
52
- "alphabet-desc-short": "ZA",
53
- "duration-asc": "19",
54
- "duration-desc": "91",
55
- "duration-asc-short": "19",
56
- "duration-desc-short": "91",
60
+ "alphabet-asc": "A Z",
61
+ "alphabet-desc": "Z A",
62
+ "alphabet-asc-short": "A Z",
63
+ "alphabet-desc-short": "Z A",
64
+ "duration-asc": "1 9",
65
+ "duration-desc": "9 1",
66
+ "duration-asc-short": "1 9",
67
+ "duration-desc-short": "9 1",
57
68
  "status-asc": "Wie in der Filterliste",
58
69
  "status-desc": "Umgekehrt",
59
70
  "status-asc-short": "Normal",
@@ -62,7 +73,8 @@
62
73
  "empty": {
63
74
  "no-results": "Keine Ergebnisse",
64
75
  "no-tests-found": "Keine Ergebnisse gefunden",
65
- "clear-filters": "Filter löschen",
76
+ "no-message-provided": "Keine Nachricht vorhanden",
77
+ "clear-filters": "Filter zurücksetzen",
66
78
  "no-attachments-results": "Keine Anhängeinformationen verfügbar",
67
79
  "no-history-results": "Keine Verlaufsinformationen verfügbar",
68
80
  "no-retries-results": "Keine Wiederholungsinformationen verfügbar",
@@ -104,6 +116,7 @@
104
116
  "showLess": "Weniger anzeigen",
105
117
  "showMore": "Mehr anzeigen",
106
118
  "copy": "Kopieren",
119
+ "attempt": "Versuch {{attempt}} von {{total}}",
107
120
  "at": "bei",
108
121
  "variables": "Variablen",
109
122
  "openPwTrace": "Playwright Trace öffnen"
@@ -154,5 +167,11 @@
154
167
  "pie": {
155
168
  "title": "Testerfolgsrate"
156
169
  }
170
+ },
171
+ "transitions.description": {
172
+ "new": "Erstes Auftreten dieses Testergebnisses im Bericht",
173
+ "fixed": "Zuvor \"fehlgeschlagen\" oder \"defekt\" gewesener Test, der jetzt \"erfolgreich\" ist",
174
+ "regressed": "Zuvor \"erfolgreich\" oder \"defekt\" gewesener Test, der jetzt \"fehlgeschlagen\" ist",
175
+ "malfunctioned": "Zuvor \"erfolgreich\" oder \"fehlgeschlagen\" gewesener Test, der jetzt \"defekt\" ist"
157
176
  }
158
177
  }
@@ -25,10 +25,21 @@
25
25
  },
26
26
  "filters": {
27
27
  "more-filters": "More filters",
28
- "enable-filter": "params('Enable \"{filter}\" filter')",
28
+ "enable-filter": "Enable \"{{filter}}\" filter",
29
29
  "flaky": "Flaky",
30
30
  "retry": "Retry",
31
- "new": "New"
31
+ "new": "New",
32
+ "fixed": "Fixed",
33
+ "regressed": "Regressed",
34
+ "malfunctioned": "Malfuctioned"
35
+ },
36
+ "filters.description": {
37
+ "flaky": "Show unstable tests",
38
+ "retry": "Show test results that were rerun",
39
+ "new": "Show test results that appear for the first time in this report",
40
+ "fixed": "Show tests that are passed now but had been \"failed\" or \"broken\" in a previous report",
41
+ "regressed": "Show test results that changed to \"failed\" status from \"passed\" or \"broken\" status",
42
+ "malfunctioned": "Show test results that changed to \"broken\" status from \"passed\" or \"failed\" status"
32
43
  },
33
44
  "sort-by": {
34
45
  "sort-by-text": "Sort by:",
@@ -105,6 +116,7 @@
105
116
  "showLess": "Show less",
106
117
  "showMore": "Show more",
107
118
  "copy": "Copy",
119
+ "attempt": "Attempt {{attempt}} of {{total}}",
108
120
  "at": "at",
109
121
  "variables": "Variables",
110
122
  "openPwTrace": "Open Playwright Trace"
@@ -155,5 +167,11 @@
155
167
  "pie": {
156
168
  "title": "Test Success Rate"
157
169
  }
170
+ },
171
+ "transitions.description": {
172
+ "new": "The first occurrence of this test result in the report",
173
+ "fixed": "A previously \"failed\" or \"broken\" test that is now \"passed\"",
174
+ "regressed": "A previously \"passed\" or \"broken\" test that is now \"failed\"",
175
+ "malfunctioned": "A previously \"passed\" or \"failed\" test that is now \"broken\""
158
176
  }
159
177
  }