@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.
- package/dist/multi/173.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/174.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/252.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/282.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/29.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/416.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/527.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/600.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/605.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/638.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/672.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/686.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/725.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/741.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/755.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/894.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/943.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/980.app-3f57abaa5734556b2988.js +1 -0
- package/dist/multi/app-3f57abaa5734556b2988.js +2 -0
- package/dist/multi/app-3f57abaa5734556b2988.js.LICENSE.txt +16 -0
- package/dist/multi/manifest.json +24 -24
- package/dist/multi/styles-9475296a2cbcd0e5d2d0.css +44 -0
- package/dist/single/app-800f7e75bb52ecb2ae21.js +2 -0
- package/dist/single/app-800f7e75bb52ecb2ae21.js.LICENSE.txt +16 -0
- package/dist/single/manifest.json +1 -1
- package/package.json +23 -17
- package/src/assets/scss/day.scss +2 -0
- package/src/assets/scss/night.scss +2 -0
- package/src/assets/scss/theme.scss +4 -0
- package/src/components/Charts/index.tsx +2 -2
- package/src/components/Header/CiInfo/index.tsx +51 -0
- package/src/components/Header/CiInfo/styles.scss +7 -0
- package/src/components/Header/index.tsx +6 -1
- package/src/components/MetadataButton/index.tsx +1 -1
- package/src/components/ReportBody/Filters.tsx +44 -63
- package/src/components/ReportMetadata/MetadataSummary.tsx +1 -1
- package/src/components/ReportMetadata/MetadataWithIcon.tsx +9 -11
- package/src/components/TestResult/TrDescription/index.tsx +1 -1
- package/src/components/TestResult/TrError/TrDiff.tsx +0 -1
- package/src/components/TestResult/TrHistory/TrHistoryItem.tsx +63 -34
- package/src/components/TestResult/TrHistory/styles.scss +2 -1
- package/src/components/TestResult/TrInfo/TrInfoStatuses.tsx +4 -2
- package/src/components/TestResult/TrOverview.tsx +0 -1
- package/src/components/TestResult/TrPrevStatuses/index.tsx +20 -5
- package/src/components/TestResult/TrPwTraces/index.tsx +6 -3
- package/src/components/TestResult/TrRetriesView/TrRetriesItem.tsx +24 -6
- package/src/components/TestResult/TrRetriesView/index.tsx +8 -1
- package/src/components/TestResult/TrSteps/TrAttachment.tsx +13 -1
- package/src/components/TestResult/TrSteps/TrStep.tsx +4 -3
- package/src/components/TestResult/TrSteps/TrStepInfo.tsx +61 -1
- package/src/components/TestResult/TrSteps/styles.scss +31 -0
- package/src/components/Tree/index.tsx +15 -3
- package/src/index.html +14 -1
- package/src/locales/az.json +34 -16
- package/src/locales/de.json +34 -15
- package/src/locales/en.json +20 -2
- package/src/locales/es.json +31 -12
- package/src/locales/fr.json +31 -12
- package/src/locales/he.json +21 -2
- package/src/locales/hy.json +21 -2
- package/src/locales/it.json +24 -5
- package/src/locales/ja.json +24 -5
- package/src/locales/ka.json +31 -12
- package/src/locales/kr.json +21 -2
- package/src/locales/nl.json +31 -12
- package/src/locales/pl.json +41 -20
- package/src/locales/pt.json +32 -12
- package/src/locales/ru.json +42 -21
- package/src/locales/sv.json +31 -12
- package/src/locales/tr.json +31 -12
- package/src/locales/zh.json +31 -12
- package/src/stores/locale.ts +2 -0
- package/src/stores/tree.ts +7 -1
- package/src/utils/charts.ts +16 -18
- package/src/utils/tree.ts +23 -0
- package/src/utils/treeFilters.ts +14 -3
- package/test/components/Header/CiInfo.test.tsx +151 -0
- package/test/components/Header.test.tsx +127 -0
- package/tsconfig.json +7 -2
- package/tsconfig.node.json +8 -0
- package/types.d.ts +4 -1
- package/vitest.config.ts +15 -2
- package/vitest.setup.ts +1 -0
- package/webpack.config.js +5 -5
- package/dist/multi/173.app-35b67161.js +0 -1
- package/dist/multi/174.app-35b67161.js +0 -1
- package/dist/multi/252.app-35b67161.js +0 -1
- package/dist/multi/282.app-35b67161.js +0 -1
- package/dist/multi/29.app-35b67161.js +0 -1
- package/dist/multi/416.app-35b67161.js +0 -1
- package/dist/multi/527.app-35b67161.js +0 -1
- package/dist/multi/600.app-35b67161.js +0 -1
- package/dist/multi/605.app-35b67161.js +0 -1
- package/dist/multi/638.app-35b67161.js +0 -1
- package/dist/multi/672.app-35b67161.js +0 -1
- package/dist/multi/686.app-35b67161.js +0 -1
- package/dist/multi/725.app-35b67161.js +0 -1
- package/dist/multi/741.app-35b67161.js +0 -1
- package/dist/multi/755.app-35b67161.js +0 -1
- package/dist/multi/894.app-35b67161.js +0 -1
- package/dist/multi/943.app-35b67161.js +0 -1
- package/dist/multi/980.app-35b67161.js +0 -1
- package/dist/multi/app-35b67161.js +0 -2
- package/dist/multi/app-35b67161.js.LICENSE.txt +0 -23
- package/dist/multi/styles-35b67161.css +0 -43
- package/dist/single/app-f5ecfcd9.js +0 -2
- package/dist/single/app-f5ecfcd9.js.LICENSE.txt +0 -23
- /package/dist/multi/{JetBrainsMono_vf-b9a9c326..woff → JetBrainsMono_vf.woff} +0 -0
- /package/dist/multi/{JetBrainsMono_vf-9e9649b6..woff2 → JetBrainsMono_vf.woff2} +0 -0
- /package/dist/multi/{pt-root-ui_vf-22fe60ca..woff → pt-root-ui_vf.woff} +0 -0
- /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
|
-
<
|
|
28
|
+
<a className={styles["test-result-prev-status"]} href={navigateUrl.toString()}>
|
|
14
29
|
<SvgIcon id={allureIcons.lineShapesDotCircle} className={styles[`status-${item?.status}`]} />
|
|
15
|
-
</
|
|
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
|
|
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
|
|
12
|
+
export type TrRetriesItemProps = {
|
|
12
13
|
testResultItem: AwesomeTestResult;
|
|
13
|
-
|
|
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
|
-
|
|
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
|
|
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"]}>
|
|
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) =>
|
|
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 {
|
|
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>
|
package/src/locales/az.json
CHANGED
|
@@ -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": "Sonuncu
|
|
46
|
-
"order-asc": "Birinci
|
|
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": "A
|
|
50
|
-
"alphabet-desc": "Z
|
|
51
|
-
"alphabet-asc-short": "A
|
|
52
|
-
"alphabet-desc-short": "Z
|
|
53
|
-
"duration-asc": "1
|
|
54
|
-
"duration-desc": "9
|
|
55
|
-
"duration-asc-short": "1
|
|
56
|
-
"duration-desc-short": "9
|
|
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
|
-
"
|
|
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
|
-
"
|
|
110
|
-
"
|
|
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
|
}
|
package/src/locales/de.json
CHANGED
|
@@ -24,11 +24,22 @@
|
|
|
24
24
|
"search-placeholder": "Name oder ID"
|
|
25
25
|
},
|
|
26
26
|
"filters": {
|
|
27
|
-
"more-filters": "
|
|
28
|
-
"enable-filter": "Filter
|
|
27
|
+
"more-filters": "Filter",
|
|
28
|
+
"enable-filter": "Filter nach \"{{filter}}\" aktivieren",
|
|
29
29
|
"flaky": "Instabil",
|
|
30
|
-
"retry": "
|
|
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
|
|
46
|
-
"order-asc": "Älteste
|
|
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": "A
|
|
50
|
-
"alphabet-desc": "Z
|
|
51
|
-
"alphabet-asc-short": "A
|
|
52
|
-
"alphabet-desc-short": "Z
|
|
53
|
-
"duration-asc": "1
|
|
54
|
-
"duration-desc": "9
|
|
55
|
-
"duration-asc-short": "1
|
|
56
|
-
"duration-desc-short": "9
|
|
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
|
-
"
|
|
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
|
}
|
package/src/locales/en.json
CHANGED
|
@@ -25,10 +25,21 @@
|
|
|
25
25
|
},
|
|
26
26
|
"filters": {
|
|
27
27
|
"more-filters": "More filters",
|
|
28
|
-
"enable-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
|
}
|