@allurereport/web-awesome 3.0.0 → 3.0.1
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-9931797d1602fc52db5b.js → 173.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/174.app-bae2a0fe5738d77cd976.js +1 -0
- package/dist/multi/{252.app-9931797d1602fc52db5b.js → 252.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{282.app-9931797d1602fc52db5b.js → 282.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{29.app-9931797d1602fc52db5b.js → 29.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{416.app-9931797d1602fc52db5b.js → 416.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{527.app-9931797d1602fc52db5b.js → 527.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{600.app-9931797d1602fc52db5b.js → 600.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{605.app-9931797d1602fc52db5b.js → 605.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{638.app-9931797d1602fc52db5b.js → 638.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{672.app-9931797d1602fc52db5b.js → 672.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{686.app-9931797d1602fc52db5b.js → 686.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{725.app-9931797d1602fc52db5b.js → 725.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{741.app-9931797d1602fc52db5b.js → 741.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{755.app-9931797d1602fc52db5b.js → 755.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{894.app-9931797d1602fc52db5b.js → 894.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{91.app-9931797d1602fc52db5b.js → 91.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{943.app-9931797d1602fc52db5b.js → 943.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/{980.app-9931797d1602fc52db5b.js → 980.app-bae2a0fe5738d77cd976.js} +1 -1
- package/dist/multi/app-bae2a0fe5738d77cd976.js +2 -0
- package/dist/multi/manifest.json +21 -21
- package/dist/multi/{styles-8fe37354d1c2270c691e.css → styles-bbf68b2ba63c38b53c38.css} +3 -3
- package/dist/single/app-996d3b5869f8fc942b66.js +2 -0
- package/dist/single/manifest.json +1 -1
- package/package.json +8 -8
- package/src/assets/scss/palette.scss +102 -102
- package/src/components/ReportBody/Filters.tsx +84 -33
- package/src/components/ReportBody/HeaderActions.tsx +2 -2
- package/src/components/ReportBody/SortBy.tsx +4 -7
- package/src/components/ReportBody/index.tsx +12 -17
- package/src/components/ReportTabs/index.tsx +37 -0
- package/src/components/SplitLayout/index.tsx +0 -2
- package/src/components/TestResult/TestStepsEmpty/index.tsx +1 -7
- package/src/components/TestResult/TrEmpty/index.tsx +1 -7
- package/src/components/TestResult/TrError/index.tsx +9 -2
- package/src/components/TestResult/TrSteps/TrStep.tsx +3 -3
- package/src/components/Tree/index.tsx +9 -17
- package/src/index.tsx +0 -1
- package/src/locales/az.json +3 -1
- package/src/locales/de.json +3 -1
- package/src/locales/en.json +4 -2
- package/src/locales/es.json +3 -1
- package/src/locales/fr.json +3 -1
- package/src/locales/he.json +3 -1
- package/src/locales/hy.json +3 -1
- package/src/locales/it.json +3 -1
- package/src/locales/ja.json +3 -1
- package/src/locales/ka.json +3 -1
- package/src/locales/kr.json +3 -1
- package/src/locales/nl.json +3 -1
- package/src/locales/pl.json +3 -1
- package/src/locales/pt.json +3 -1
- package/src/locales/ru.json +3 -1
- package/src/locales/sv.json +3 -1
- package/src/locales/tr.json +3 -1
- package/src/locales/ua.json +3 -1
- package/src/locales/zh.json +3 -1
- package/src/stores/tree.ts +37 -121
- package/src/stores/treeFilters/actions.ts +67 -0
- package/src/stores/treeFilters/constants.ts +7 -0
- package/src/stores/treeFilters/index.ts +3 -0
- package/src/stores/treeFilters/store.ts +73 -0
- package/src/stores/treeFilters/types.ts +12 -0
- package/src/utils/persist.ts +23 -0
- package/src/utils/tree.ts +12 -5
- package/src/utils/treeFilters.ts +16 -4
- package/test/stores/treeFilters.test.ts +302 -0
- package/test/utils/treeFilters.test.ts +145 -0
- package/types.d.ts +2 -0
- package/dist/multi/174.app-9931797d1602fc52db5b.js +0 -1
- package/dist/multi/app-9931797d1602fc52db5b.js +0 -2
- package/dist/single/app-6199dc1c2fd3bddc2526.js +0 -2
- package/src/components/Tabs/index.tsx +0 -62
- /package/dist/multi/{app-9931797d1602fc52db5b.js.LICENSE.txt → app-bae2a0fe5738d77cd976.js.LICENSE.txt} +0 -0
- /package/dist/single/{app-6199dc1c2fd3bddc2526.js.LICENSE.txt → app-996d3b5869f8fc942b66.js.LICENSE.txt} +0 -0
- /package/src/components/{Tabs → ReportTabs}/styles.scss +0 -0
|
@@ -9,13 +9,7 @@ const TrThumb = () => {
|
|
|
9
9
|
return (
|
|
10
10
|
<div className={styles["test-result-thumb"]}>
|
|
11
11
|
<div className={styles["test-result-thumb-wrapper"]}>
|
|
12
|
-
<SvgIcon
|
|
13
|
-
size={"m"}
|
|
14
|
-
width={"32px"}
|
|
15
|
-
height={"32px"}
|
|
16
|
-
id={allureIcons.lineDevCodeSquare}
|
|
17
|
-
className={styles["test-result-thumb-icon"]}
|
|
18
|
-
/>
|
|
12
|
+
<SvgIcon size={"xl"} id={allureIcons.lineDevCodeSquare} className={styles["test-result-thumb-icon"]} />
|
|
19
13
|
<Text className={styles["test-result-thumb-text"]}>{t("no-test-case-results")}</Text>
|
|
20
14
|
</div>
|
|
21
15
|
</div>
|
|
@@ -13,7 +13,15 @@ import * as styles from "./styles.scss";
|
|
|
13
13
|
const TrErrorTrace = ({ trace }: { trace: string }) => {
|
|
14
14
|
const sanitizedTrace = ansiToHTML(trace, {
|
|
15
15
|
fg: "var(--on-text-primary)",
|
|
16
|
-
|
|
16
|
+
bg: "none",
|
|
17
|
+
colors: {
|
|
18
|
+
0: "none",
|
|
19
|
+
1: "none",
|
|
20
|
+
2: "var(--on-support-sirius)",
|
|
21
|
+
3: "var(--on-support-atlas)",
|
|
22
|
+
4: "var(--bg-support-skat)",
|
|
23
|
+
5: "var(--on-support-betelgeuse)",
|
|
24
|
+
},
|
|
17
25
|
});
|
|
18
26
|
|
|
19
27
|
return (
|
|
@@ -88,7 +96,6 @@ export const TrError: FunctionalComponent<TestError & { className?: string; stat
|
|
|
88
96
|
) : (
|
|
89
97
|
empty("no-message-provided")
|
|
90
98
|
)}
|
|
91
|
-
|
|
92
99
|
{Boolean(actual && actual !== "undefined" && expected && expected !== "undefined") && (
|
|
93
100
|
<Button
|
|
94
101
|
style={"flat"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DefaultTestStepResult,
|
|
2
|
-
import { ArrowButton, Code,
|
|
1
|
+
import type { DefaultTestStepResult, TestStepResult } from "@allurereport/core-api";
|
|
2
|
+
import { ArrowButton, Code, 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";
|
|
@@ -26,7 +26,7 @@ export const TrStepsContent = (props: { item: DefaultTestStepResult }) => {
|
|
|
26
26
|
return (
|
|
27
27
|
<div data-testid={"test-result-step-content"} className={styles["test-result-step-content"]}>
|
|
28
28
|
{Boolean(item?.parameters?.length) && <TrStepParameters parameters={item.parameters} />}
|
|
29
|
-
{Boolean(item?.message
|
|
29
|
+
{Boolean((item?.message || item?.trace) && !item?.hasSimilarErrorInSubSteps) && <TrError {...item} />}
|
|
30
30
|
{Boolean(item?.steps?.length) && (
|
|
31
31
|
<>
|
|
32
32
|
{item.steps?.map((subItem, key) => {
|
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
import { Button, Loadable, PageLoader, Text, Tree, TreeStatusBar } from "@allurereport/web-components";
|
|
2
2
|
import { useMemo } from "preact/hooks";
|
|
3
|
-
import type { AwesomeStatus } from "types";
|
|
4
3
|
import { MetadataButton } from "@/components/MetadataButton";
|
|
5
|
-
import { useTabsContext } from "@/components/Tabs";
|
|
6
4
|
import { reportStatsStore, statsByEnvStore } from "@/stores";
|
|
7
5
|
import { collapsedEnvironments, currentEnvironment, environmentsStore } from "@/stores/env";
|
|
8
6
|
import { useI18n } from "@/stores/locale";
|
|
9
7
|
import { navigateTo, route } from "@/stores/router";
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
collapsedTrees,
|
|
13
|
-
filteredTree,
|
|
14
|
-
noTests,
|
|
15
|
-
noTestsFound,
|
|
16
|
-
toggleTree,
|
|
17
|
-
treeStore,
|
|
18
|
-
} from "@/stores/tree";
|
|
8
|
+
import { collapsedTrees, filteredTree, noTests, noTestsFound, toggleTree, treeStore } from "@/stores/tree";
|
|
9
|
+
import { clearTreeFilters, treeStatus } from "@/stores/treeFilters";
|
|
19
10
|
import { createTreeLocalizer } from "@/utils/tree";
|
|
20
11
|
import * as styles from "./styles.scss";
|
|
21
12
|
|
|
@@ -23,12 +14,13 @@ export const TreeList = () => {
|
|
|
23
14
|
const { t } = useI18n("empty");
|
|
24
15
|
const { t: tEnvironments } = useI18n("environments");
|
|
25
16
|
const { t: tooltip } = useI18n("transitions");
|
|
26
|
-
const { currentTab } = useTabsContext();
|
|
27
17
|
const routeId = route.value.params?.testResultId;
|
|
28
18
|
|
|
19
|
+
const currentTreeStatus = treeStatus.value;
|
|
20
|
+
|
|
29
21
|
const localizers = useMemo(
|
|
30
22
|
() => ({
|
|
31
|
-
tooltip: (key: string) =>
|
|
23
|
+
tooltip: (key: string, options: Record<string, string>) => tooltip(`description.${key}`, options),
|
|
32
24
|
}),
|
|
33
25
|
[tooltip],
|
|
34
26
|
);
|
|
@@ -82,7 +74,7 @@ export const TreeList = () => {
|
|
|
82
74
|
toggleTree={toggleTree}
|
|
83
75
|
navigateTo={navigateTo}
|
|
84
76
|
tree={treeLocalizer(filteredTree.value.default)}
|
|
85
|
-
statusFilter={
|
|
77
|
+
statusFilter={currentTreeStatus}
|
|
86
78
|
routeId={routeId}
|
|
87
79
|
root
|
|
88
80
|
/>
|
|
@@ -102,7 +94,7 @@ export const TreeList = () => {
|
|
|
102
94
|
toggleTree={toggleTree}
|
|
103
95
|
navigateTo={navigateTo}
|
|
104
96
|
tree={treeLocalizer(currentTree)}
|
|
105
|
-
statusFilter={
|
|
97
|
+
statusFilter={currentTreeStatus}
|
|
106
98
|
routeId={routeId}
|
|
107
99
|
root
|
|
108
100
|
/>
|
|
@@ -141,7 +133,7 @@ export const TreeList = () => {
|
|
|
141
133
|
<TreeStatusBar
|
|
142
134
|
statistic={stats}
|
|
143
135
|
reportStatistic={reportStatsStore.value.data}
|
|
144
|
-
statusFilter={
|
|
136
|
+
statusFilter={currentTreeStatus}
|
|
145
137
|
/>
|
|
146
138
|
</div>
|
|
147
139
|
{isOpened && (
|
|
@@ -151,7 +143,7 @@ export const TreeList = () => {
|
|
|
151
143
|
reportStatistic={reportStatsStore.value.data}
|
|
152
144
|
collapsedTrees={collapsedTrees.value}
|
|
153
145
|
toggleTree={toggleTree}
|
|
154
|
-
statusFilter={
|
|
146
|
+
statusFilter={currentTreeStatus}
|
|
155
147
|
navigateTo={navigateTo}
|
|
156
148
|
tree={treeLocalizer(value)}
|
|
157
149
|
routeId={routeId}
|
package/src/index.tsx
CHANGED
|
@@ -3,7 +3,6 @@ import { Spinner, SvgIcon, allureIcons } from "@allurereport/web-components";
|
|
|
3
3
|
import "@allurereport/web-components/index.css";
|
|
4
4
|
import clsx from "clsx";
|
|
5
5
|
import { render } from "preact";
|
|
6
|
-
import "preact/debug";
|
|
7
6
|
import { useEffect, useState } from "preact/hooks";
|
|
8
7
|
import "@/assets/scss/index.scss";
|
|
9
8
|
import { Footer } from "@/components/Footer";
|
package/src/locales/az.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Bu test nəticəsinin hesabatda ilk dəfə görünməsi",
|
|
367
367
|
"fixed": "Əvvəl \"uğursuz\" və ya \"sınıq\" olan, indi \"uğurlu\" olan test",
|
|
368
368
|
"regressed": "Əvvəl \"uğurlu\" və ya \"sınıq\" olan, indi \"uğursuz\" olan test",
|
|
369
|
-
"malfunctioned": "Əvvəl \"uğurlu\" və ya \"uğursuz\" olan, indi \"sınıq\" olan test"
|
|
369
|
+
"malfunctioned": "Əvvəl \"uğurlu\" və ya \"uğursuz\" olan, indi \"sınıq\" olan test",
|
|
370
|
+
"retries": "{{count}} yenidən cəhd",
|
|
371
|
+
"flaky": "İcra nəticələri qeyri-sabitdir"
|
|
370
372
|
},
|
|
371
373
|
"new": "Yeni",
|
|
372
374
|
"fixed": "Düzəldilmiş",
|
package/src/locales/de.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Erstes Auftreten dieses Testergebnisses im Bericht",
|
|
367
367
|
"fixed": "Zuvor \"fehlgeschlagen\" oder \"defekt\" gewesener Test, der jetzt \"erfolgreich\" ist",
|
|
368
368
|
"regressed": "Zuvor \"erfolgreich\" oder \"defekt\" gewesener Test, der jetzt \"fehlgeschlagen\" ist",
|
|
369
|
-
"malfunctioned": "Zuvor \"erfolgreich\" oder \"fehlgeschlagen\" gewesener Test, der jetzt \"defekt\" ist"
|
|
369
|
+
"malfunctioned": "Zuvor \"erfolgreich\" oder \"fehlgeschlagen\" gewesener Test, der jetzt \"defekt\" ist",
|
|
370
|
+
"retries": "{{count}} Wiederholungen",
|
|
371
|
+
"flaky": "Inkonsistent über mehrere Läufe"
|
|
370
372
|
},
|
|
371
373
|
"new": "Neu",
|
|
372
374
|
"fixed": "Behoben",
|
package/src/locales/en.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"new": "New",
|
|
36
36
|
"fixed": "Fixed",
|
|
37
37
|
"regressed": "Regressed",
|
|
38
|
-
"malfunctioned": "
|
|
38
|
+
"malfunctioned": "Malfunctioned"
|
|
39
39
|
},
|
|
40
40
|
"filters.description": {
|
|
41
41
|
"flaky": "Show unstable tests",
|
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "The first occurrence of this test result in the report",
|
|
367
367
|
"fixed": "A previously \"failed\" or \"broken\" test that is now \"passed\"",
|
|
368
368
|
"regressed": "A previously \"passed\" or \"broken\" test that is now \"failed\"",
|
|
369
|
-
"malfunctioned": "A previously \"passed\" or \"failed\" test that is now \"broken\""
|
|
369
|
+
"malfunctioned": "A previously \"passed\" or \"failed\" test that is now \"broken\"",
|
|
370
|
+
"retries": "{{count}} retries",
|
|
371
|
+
"flaky": "Inconsistent across runs"
|
|
370
372
|
},
|
|
371
373
|
"new": "new",
|
|
372
374
|
"fixed": "fixed",
|
package/src/locales/es.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Primera aparición de este resultado de prueba en el informe",
|
|
367
367
|
"fixed": "Prueba que anteriormente \"falló\" o estaba \"rota\" y ahora está \"aprobada\"",
|
|
368
368
|
"regressed": "Prueba que anteriormente estaba \"aprobada\" o \"rota\" y ahora \"falló\"",
|
|
369
|
-
"malfunctioned": "Prueba que anteriormente estaba \"aprobada\" o \"falló\" y ahora está \"rota\""
|
|
369
|
+
"malfunctioned": "Prueba que anteriormente estaba \"aprobada\" o \"falló\" y ahora está \"rota\"",
|
|
370
|
+
"retries": "{{count}} reintentos",
|
|
371
|
+
"flaky": "Resultados inconsistentes entre ejecuciones"
|
|
370
372
|
},
|
|
371
373
|
"new": "Nuevo",
|
|
372
374
|
"fixed": "Corregido",
|
package/src/locales/fr.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Première apparition de ce résultat de test dans le rapport",
|
|
367
367
|
"fixed": "Test précédemment \"échoué\" ou \"cassé\" qui est maintenant \"réussi\"",
|
|
368
368
|
"regressed": "Test précédemment \"réussi\" ou \"cassé\" qui est maintenant \"échoué\"",
|
|
369
|
-
"malfunctioned": "Test précédemment \"réussi\" ou \"échoué\" qui est maintenant \"cassé\""
|
|
369
|
+
"malfunctioned": "Test précédemment \"réussi\" ou \"échoué\" qui est maintenant \"cassé\"",
|
|
370
|
+
"retries": "{{count}} tentatives",
|
|
371
|
+
"flaky": "Incohérent entre les exécutions"
|
|
370
372
|
},
|
|
371
373
|
"new": "Nouveaux",
|
|
372
374
|
"fixed": "Corrigés",
|
package/src/locales/he.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "הופעה ראשונה של תוצאת בדיקה זו בדוח",
|
|
367
367
|
"fixed": "בדיקה שהייתה קודם \"נכשלה\" או \"שבורה\" ועכשיו \"עברה\"",
|
|
368
368
|
"regressed": "בדיקה שהייתה קודם \"עברה\" או \"שבורה\" ועכשיו \"נכשלה\"",
|
|
369
|
-
"malfunctioned": "בדיקה שהייתה קודם \"עברה\" או \"נכשלה\" ועכשיו \"שבורה\""
|
|
369
|
+
"malfunctioned": "בדיקה שהייתה קודם \"עברה\" או \"נכשלה\" ועכשיו \"שבורה\"",
|
|
370
|
+
"retries": "{{count}} ניסיונות חוזרים",
|
|
371
|
+
"flaky": "לא עקבי בין הרצות"
|
|
370
372
|
},
|
|
371
373
|
"new": "חדש",
|
|
372
374
|
"fixed": "מתוקן",
|
package/src/locales/hy.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Այս թեստի արդյունքի առաջին հայտնվելը հաշվետվությունում",
|
|
367
367
|
"fixed": "Նախկինում \"ձախողված\" կամ \"կոտրված\" թեստ, որը այժմ \"անցել\" է",
|
|
368
368
|
"regressed": "Նախկինում \"անցած\" կամ \"կոտրված\" թեստ, որը այժմ \"ձախողվել\" է",
|
|
369
|
-
"malfunctioned": "Նախկինում \"անցած\" կամ \"ձախողված\" թեստ, որը այժմ \"կոտրված\" է"
|
|
369
|
+
"malfunctioned": "Նախկինում \"անցած\" կամ \"ձախողված\" թեստ, որը այժմ \"կոտրված\" է",
|
|
370
|
+
"retries": "{{count}} կրկնափորձ",
|
|
371
|
+
"flaky": "Անհետևողական տարբեր գործարկումների ընթացքում"
|
|
370
372
|
},
|
|
371
373
|
"new": "Նոր",
|
|
372
374
|
"fixed": "Ուղղված",
|
package/src/locales/it.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Prima apparizione di questo risultato del test nel report",
|
|
367
367
|
"fixed": "Test precedentemente \"fallito\" o \"danneggiato\" che ora è \"superato\"",
|
|
368
368
|
"regressed": "Test precedentemente \"superato\" o \"danneggiato\" che ora è \"fallito\"",
|
|
369
|
-
"malfunctioned": "Test precedentemente \"superato\" o \"fallito\" che ora è \"danneggiato\""
|
|
369
|
+
"malfunctioned": "Test precedentemente \"superato\" o \"fallito\" che ora è \"danneggiato\"",
|
|
370
|
+
"retries": "{{count}} tentativi",
|
|
371
|
+
"flaky": "Incoerente tra le esecuzioni"
|
|
370
372
|
},
|
|
371
373
|
"new": "Nuovi",
|
|
372
374
|
"fixed": "Corretti",
|
package/src/locales/ja.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "このテスト結果がレポートに初めて表示される",
|
|
367
367
|
"fixed": "以前「失敗」または「破損」だったテストが「成功」になった",
|
|
368
368
|
"regressed": "以前「成功」または「破損」だったテストが「失敗」になった",
|
|
369
|
-
"malfunctioned": "以前「成功」または「失敗」だったテストが「破損」になった"
|
|
369
|
+
"malfunctioned": "以前「成功」または「失敗」だったテストが「破損」になった",
|
|
370
|
+
"retries": "{{count}} 回の再試行",
|
|
371
|
+
"flaky": "実行ごとに結果が不安定"
|
|
370
372
|
},
|
|
371
373
|
"new": "新規",
|
|
372
374
|
"fixed": "修正済み",
|
package/src/locales/ka.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "ამ ტესტის შედეგის პირველი გამოჩენა ანგარიშში",
|
|
367
367
|
"fixed": "ადრე \"წარუმატებელი\" ან \"დამტვრეული\" ტესტი, რომელიც ახლა \"წარმატებული\"ა",
|
|
368
368
|
"regressed": "ადრე \"წარმატებული\" ან \"დამტვრეული\" ტესტი, რომელიც ახლა \"წარუმატებელი\"ა",
|
|
369
|
-
"malfunctioned": "ადრე \"წარმატებული\" ან \"წარუმატებელი\" ტესტი, რომელიც ახლა \"დამტვრეული\"ა"
|
|
369
|
+
"malfunctioned": "ადრე \"წარმატებული\" ან \"წარუმატებელი\" ტესტი, რომელიც ახლა \"დამტვრეული\"ა",
|
|
370
|
+
"retries": "{{count}} ხელახალი ცდა",
|
|
371
|
+
"flaky": "შედეგები არასტაბილურია გაშვებებს შორის"
|
|
370
372
|
},
|
|
371
373
|
"new": "ახალი",
|
|
372
374
|
"fixed": "გასწორებული",
|
package/src/locales/kr.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "이 테스트 결과가 보고서에 처음 나타남",
|
|
367
367
|
"fixed": "이전에 \"실패\" 또는 \"손상됨\"이었던 테스트가 이제 \"통과\"됨",
|
|
368
368
|
"regressed": "이전에 \"통과\" 또는 \"손상됨\"이었던 테스트가 이제 \"실패\"됨",
|
|
369
|
-
"malfunctioned": "이전에 \"통과\" 또는 \"실패\"였던 테스트가 이제 \"손상됨\"됨"
|
|
369
|
+
"malfunctioned": "이전에 \"통과\" 또는 \"실패\"였던 테스트가 이제 \"손상됨\"됨",
|
|
370
|
+
"retries": "{{count}}회 재시도",
|
|
371
|
+
"flaky": "실행마다 결과가 불안정함"
|
|
370
372
|
},
|
|
371
373
|
"new": "새로운",
|
|
372
374
|
"fixed": "수정됨",
|
package/src/locales/nl.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Eerste keer dat dit testresultaat in het rapport verschijnt",
|
|
367
367
|
"fixed": "Eerder \"mislukt\" of \"gebroken\" test die nu \"geslaagd\" is",
|
|
368
368
|
"regressed": "Eerder \"geslaagd\" of \"gebroken\" test die nu \"mislukt\" is",
|
|
369
|
-
"malfunctioned": "Eerder \"geslaagd\" of \"mislukt\" test die nu \"gebroken\" is"
|
|
369
|
+
"malfunctioned": "Eerder \"geslaagd\" of \"mislukt\" test die nu \"gebroken\" is",
|
|
370
|
+
"retries": "{{count}} pogingen",
|
|
371
|
+
"flaky": "Inconsistent tussen runs"
|
|
370
372
|
},
|
|
371
373
|
"new": "Nieuw",
|
|
372
374
|
"fixed": "Opgelost",
|
package/src/locales/pl.json
CHANGED
|
@@ -374,7 +374,9 @@
|
|
|
374
374
|
"new": "Pierwsze wystąpienie tego wyniku testu w raporcie",
|
|
375
375
|
"fixed": "Wcześniej \"nieudany\" lub \"uszkodzony\" test, który teraz jest \"udany\"",
|
|
376
376
|
"regressed": "Wcześniej \"udany\" lub \"uszkodzony\" test, który teraz jest \"nieudany\"",
|
|
377
|
-
"malfunctioned": "Wcześniej \"udany\" lub \"nieudany\" test, który teraz jest \"uszkodzony\""
|
|
377
|
+
"malfunctioned": "Wcześniej \"udany\" lub \"nieudany\" test, który teraz jest \"uszkodzony\"",
|
|
378
|
+
"retries": "{{count}} ponowień",
|
|
379
|
+
"flaky": "Niespójny pomiędzy uruchomieniami"
|
|
378
380
|
},
|
|
379
381
|
"new": "Nowe",
|
|
380
382
|
"fixed": "Naprawione",
|
package/src/locales/pt.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Primeira ocorrência deste resultado de teste no relatório",
|
|
367
367
|
"fixed": "Teste anteriormente \"falhou\" ou \"quebrado\" que agora está \"aprovado\"",
|
|
368
368
|
"regressed": "Teste anteriormente \"aprovado\" ou \"quebrado\" que agora está \"falhou\"",
|
|
369
|
-
"malfunctioned": "Teste anteriormente \"aprovado\" ou \"falhou\" que agora está \"quebrado\""
|
|
369
|
+
"malfunctioned": "Teste anteriormente \"aprovado\" ou \"falhou\" que agora está \"quebrado\"",
|
|
370
|
+
"retries": "{{count}} tentativas",
|
|
371
|
+
"flaky": "Inconsistente entre execuções"
|
|
370
372
|
},
|
|
371
373
|
"new": "Novo",
|
|
372
374
|
"fixed": "Corrigido",
|
package/src/locales/ru.json
CHANGED
|
@@ -374,7 +374,9 @@
|
|
|
374
374
|
"new": "Первое появление этого результата теста в отчёте",
|
|
375
375
|
"fixed": "Ранее \"неуспешный\" или \"сломанный\" тест, который теперь \"успешный\"",
|
|
376
376
|
"regressed": "Ранее \"успешный\" или \"сломанный\" тест, который теперь \"неуспешный\"",
|
|
377
|
-
"malfunctioned": "Ранее \"успешный\" или \"неуспешный\" тест, который теперь \"сломанный\""
|
|
377
|
+
"malfunctioned": "Ранее \"успешный\" или \"неуспешный\" тест, который теперь \"сломанный\"",
|
|
378
|
+
"retries": "{{count}} повторов",
|
|
379
|
+
"flaky": "Нестабилен между запусками"
|
|
378
380
|
},
|
|
379
381
|
"new": "Новые",
|
|
380
382
|
"fixed": "Исправленные",
|
package/src/locales/sv.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Första förekomsten av detta testresultat i rapporten",
|
|
367
367
|
"fixed": "Tidigare \"misslyckad\" eller \"trasig\" test som nu är \"godkänd\"",
|
|
368
368
|
"regressed": "Tidigare \"godkänd\" eller \"trasig\" test som nu är \"misslyckad\"",
|
|
369
|
-
"malfunctioned": "Tidigare \"godkänd\" eller \"misslyckad\" test som nu är \"trasig\""
|
|
369
|
+
"malfunctioned": "Tidigare \"godkänd\" eller \"misslyckad\" test som nu är \"trasig\"",
|
|
370
|
+
"retries": "{{count}} omkörningar",
|
|
371
|
+
"flaky": "Inkonsekvent mellan körningar"
|
|
370
372
|
},
|
|
371
373
|
"new": "Ny",
|
|
372
374
|
"fixed": "Åtgärdad",
|
package/src/locales/tr.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "Bu test sonucunun rapordaki ilk görünümü",
|
|
367
367
|
"fixed": "Daha önce \"başarısız\" veya \"bozuk\" olan test artık \"başarılı\"",
|
|
368
368
|
"regressed": "Daha önce \"başarılı\" veya \"bozuk\" olan test artık \"başarısız\"",
|
|
369
|
-
"malfunctioned": "Daha önce \"başarılı\" veya \"başarısız\" olan test artık \"bozuk\""
|
|
369
|
+
"malfunctioned": "Daha önce \"başarılı\" veya \"başarısız\" olan test artık \"bozuk\"",
|
|
370
|
+
"retries": "{{count}} yeniden deneme",
|
|
371
|
+
"flaky": "Çalıştırmalar arasında tutarsız"
|
|
370
372
|
},
|
|
371
373
|
"new": "Yeni",
|
|
372
374
|
"fixed": "Düzeltildi",
|
package/src/locales/ua.json
CHANGED
|
@@ -317,7 +317,9 @@
|
|
|
317
317
|
"new": "Перша поява цього результату тесту в звіті",
|
|
318
318
|
"fixed": "Раніше \"неуспішний\" або \"зламаний\" тест, який тепер \"успішний\"",
|
|
319
319
|
"regressed": "Раніше \"успішний\" або \"зламаний\" тест, який тепер \"неуспішний\"",
|
|
320
|
-
"malfunctioned": "Раніше \"успішний\" або \"неуспішний\" тест, який тепер \"зламаний\""
|
|
320
|
+
"malfunctioned": "Раніше \"успішний\" або \"неуспішний\" тест, який тепер \"зламаний\"",
|
|
321
|
+
"retries": "{{count}} повторних спроб",
|
|
322
|
+
"flaky": "Нестабільний між запусками"
|
|
321
323
|
},
|
|
322
324
|
"new": "Нові",
|
|
323
325
|
"fixed": "Виправлені",
|
package/src/locales/zh.json
CHANGED
|
@@ -366,7 +366,9 @@
|
|
|
366
366
|
"new": "此测试结果在报告中的首次出现",
|
|
367
367
|
"fixed": "之前\"失败\"或\"损坏\"的测试现在\"通过\"了",
|
|
368
368
|
"regressed": "之前\"通过\"或\"损坏\"的测试现在\"失败\"了",
|
|
369
|
-
"malfunctioned": "之前\"通过\"或\"失败\"的测试现在\"损坏\"了"
|
|
369
|
+
"malfunctioned": "之前\"通过\"或\"失败\"的测试现在\"损坏\"了",
|
|
370
|
+
"retries": "{{count}} 次重试",
|
|
371
|
+
"flaky": "多次运行结果不一致"
|
|
370
372
|
},
|
|
371
373
|
"new": "新的",
|
|
372
374
|
"fixed": "已修复",
|
package/src/stores/tree.ts
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import { fetchReportJsonData } from "@allurereport/web-commons";
|
|
2
2
|
import type { RecursiveTree } from "@allurereport/web-components/global";
|
|
3
3
|
import { computed, effect, signal } from "@preact/signals";
|
|
4
|
-
import type {
|
|
4
|
+
import type { AwesomeTree, AwesomeTreeGroup } from "types";
|
|
5
5
|
import type { StoreSignalState } from "@/stores/types";
|
|
6
6
|
import { loadFromLocalStorage } from "@/utils/loadFromLocalStorage";
|
|
7
7
|
import { createRecursiveTree, isRecursiveTreeEmpty } from "@/utils/treeFilters";
|
|
8
|
-
|
|
9
|
-
export type TreeSortBy = "order" | "duration" | "status" | "alphabet";
|
|
10
|
-
export type TreeDirection = "asc" | "desc";
|
|
11
|
-
export type TreeFilters = "flaky" | "retry" | "new" | "fixed" | "regressed" | "malfunctioned";
|
|
12
|
-
export type TreeFiltersState = {
|
|
13
|
-
query: string;
|
|
14
|
-
status: AwesomeStatus;
|
|
15
|
-
filter: Record<TreeFilters, boolean>;
|
|
16
|
-
sortBy: TreeSortBy;
|
|
17
|
-
direction: TreeDirection;
|
|
18
|
-
};
|
|
8
|
+
import { treeDirection, treeFilter, treeQuery, treeSortBy, treeStatus } from "./treeFilters";
|
|
19
9
|
|
|
20
10
|
export const treeStore = signal<StoreSignalState<Record<string, AwesomeTree>>>({
|
|
21
11
|
loading: true,
|
|
@@ -45,115 +35,6 @@ export const toggleTree = (id: string) => {
|
|
|
45
35
|
collapsedTrees.value = newSet;
|
|
46
36
|
};
|
|
47
37
|
|
|
48
|
-
export const selectedFilters = signal(new Set(loadFromLocalStorage("selectedFilters", []) as []));
|
|
49
|
-
|
|
50
|
-
effect(() => {
|
|
51
|
-
localStorage.setItem("selectedFilters", JSON.stringify([...selectedFilters.value]));
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
export const treeFiltersStore = signal<TreeFiltersState>(
|
|
55
|
-
loadFromLocalStorage<TreeFiltersState>("treeFilters", {
|
|
56
|
-
query: "",
|
|
57
|
-
status: "total",
|
|
58
|
-
filter: {
|
|
59
|
-
flaky: false,
|
|
60
|
-
retry: false,
|
|
61
|
-
new: false,
|
|
62
|
-
fixed: false,
|
|
63
|
-
regressed: false,
|
|
64
|
-
malfunctioned: false,
|
|
65
|
-
},
|
|
66
|
-
sortBy: "order",
|
|
67
|
-
direction: "asc",
|
|
68
|
-
}) as TreeFiltersState,
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
effect(() => {
|
|
72
|
-
localStorage.setItem("treeFilters", JSON.stringify(treeFiltersStore.value));
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
export const filteredTree = computed(() => {
|
|
76
|
-
return Object.entries(treeStore.value.data).reduce(
|
|
77
|
-
(acc, [key, value]) => {
|
|
78
|
-
if (!value) {
|
|
79
|
-
return acc;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const { root, leavesById, groupsById } = value;
|
|
83
|
-
const tree = createRecursiveTree({
|
|
84
|
-
group: root as AwesomeTreeGroup,
|
|
85
|
-
leavesById,
|
|
86
|
-
groupsById,
|
|
87
|
-
filterOptions: treeFiltersStore.value,
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
return Object.assign(acc, {
|
|
91
|
-
[key]: tree,
|
|
92
|
-
});
|
|
93
|
-
},
|
|
94
|
-
{} as Record<string, RecursiveTree>,
|
|
95
|
-
);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
export const noTestsFound = computed(() => {
|
|
99
|
-
return Object.values(filteredTree.value).every(isRecursiveTreeEmpty);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
export const clearTreeFilters = () => {
|
|
103
|
-
treeFiltersStore.value = {
|
|
104
|
-
query: "",
|
|
105
|
-
status: "total",
|
|
106
|
-
filter: {
|
|
107
|
-
flaky: false,
|
|
108
|
-
retry: false,
|
|
109
|
-
new: false,
|
|
110
|
-
fixed: false,
|
|
111
|
-
regressed: false,
|
|
112
|
-
malfunctioned: false,
|
|
113
|
-
},
|
|
114
|
-
sortBy: "order",
|
|
115
|
-
direction: "asc",
|
|
116
|
-
};
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export const setTreeQuery = (query: string) => {
|
|
120
|
-
treeFiltersStore.value = {
|
|
121
|
-
...treeFiltersStore.value,
|
|
122
|
-
query,
|
|
123
|
-
};
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export const setTreeStatus = (status: AwesomeStatus) => {
|
|
127
|
-
treeFiltersStore.value = {
|
|
128
|
-
...treeFiltersStore.value,
|
|
129
|
-
status,
|
|
130
|
-
};
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
export const setTreeSortBy = (sortBy: TreeSortBy) => {
|
|
134
|
-
treeFiltersStore.value = {
|
|
135
|
-
...treeFiltersStore.value,
|
|
136
|
-
sortBy,
|
|
137
|
-
};
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
export const setTreeDirection = (direction: TreeDirection) => {
|
|
141
|
-
treeFiltersStore.value = {
|
|
142
|
-
...treeFiltersStore.value,
|
|
143
|
-
direction,
|
|
144
|
-
};
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
export const setTreeFilter = (filterKey: TreeFilters, value: boolean) => {
|
|
148
|
-
treeFiltersStore.value = {
|
|
149
|
-
...treeFiltersStore.value,
|
|
150
|
-
filter: {
|
|
151
|
-
...treeFiltersStore.value.filter,
|
|
152
|
-
[filterKey]: value,
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
};
|
|
156
|
-
|
|
157
38
|
export const fetchEnvTreesData = async (envs: string[]) => {
|
|
158
39
|
const envsToFetch = envs.filter((env) => !treeStore.value.data?.[env]);
|
|
159
40
|
|
|
@@ -195,3 +76,38 @@ export const fetchEnvTreesData = async (envs: string[]) => {
|
|
|
195
76
|
};
|
|
196
77
|
}
|
|
197
78
|
};
|
|
79
|
+
|
|
80
|
+
const treeEntries = computed(() => (treeStore.value.data ? Object.entries(treeStore.value.data) : []));
|
|
81
|
+
|
|
82
|
+
export const filteredTree = computed(() => {
|
|
83
|
+
return treeEntries.value.reduce(
|
|
84
|
+
(acc, [key, value]) => {
|
|
85
|
+
if (!value) {
|
|
86
|
+
return acc;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const { root, leavesById, groupsById } = value;
|
|
90
|
+
const tree = createRecursiveTree({
|
|
91
|
+
group: root as AwesomeTreeGroup,
|
|
92
|
+
leavesById,
|
|
93
|
+
groupsById,
|
|
94
|
+
filterOptions: {
|
|
95
|
+
query: treeQuery.value,
|
|
96
|
+
status: treeStatus.value,
|
|
97
|
+
filter: treeFilter.value,
|
|
98
|
+
sortBy: treeSortBy.value,
|
|
99
|
+
direction: treeDirection.value,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
return Object.assign(acc, {
|
|
104
|
+
[key]: tree,
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
{} as Record<string, RecursiveTree>,
|
|
108
|
+
);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
export const noTestsFound = computed(
|
|
112
|
+
() => !Object.values(filteredTree.value).some((tree) => !isRecursiveTreeEmpty(tree)),
|
|
113
|
+
);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { TestStatusTransition } from "@allurereport/core-api";
|
|
2
|
+
import { batch } from "@preact/signals";
|
|
3
|
+
import type { AwesomeStatus } from "types";
|
|
4
|
+
import { treeDirection, treeFilter, treeQuery, treeSortBy, treeStatus } from ".";
|
|
5
|
+
import { transitionFiltersList } from "./constants";
|
|
6
|
+
import type { TreeDirection, TreeSortBy } from "./types";
|
|
7
|
+
|
|
8
|
+
export const clearTreeFilters = () => {
|
|
9
|
+
batch(() => {
|
|
10
|
+
treeQuery.value = "";
|
|
11
|
+
treeStatus.value = "total";
|
|
12
|
+
treeFilter.value = {
|
|
13
|
+
flaky: false,
|
|
14
|
+
retry: false,
|
|
15
|
+
new: false,
|
|
16
|
+
fixed: false,
|
|
17
|
+
regressed: false,
|
|
18
|
+
malfunctioned: false,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const setTreeQuery = (query: string) => {
|
|
24
|
+
treeQuery.value = query;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const setTreeStatus = (status: AwesomeStatus) => {
|
|
28
|
+
treeStatus.value = status;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const setTreeSortBy = (sortBy: TreeSortBy) => {
|
|
32
|
+
treeSortBy.value = sortBy;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const setTreeDirection = (direction: TreeDirection) => {
|
|
36
|
+
treeDirection.value = direction;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const setFilters = (filters: Record<string, boolean>) => {
|
|
40
|
+
treeFilter.value = {
|
|
41
|
+
...treeFilter.peek(),
|
|
42
|
+
...filters,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const setTestTypeFilter = (testType: "flaky" | "retry", value: boolean) => {
|
|
47
|
+
treeFilter.value = {
|
|
48
|
+
...treeFilter.peek(),
|
|
49
|
+
[testType]: value,
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const setTransitionFilter = (transition: TestStatusTransition, value: boolean) => {
|
|
54
|
+
treeFilter.value = {
|
|
55
|
+
...treeFilter.peek(),
|
|
56
|
+
...transitionFiltersList.reduce(
|
|
57
|
+
(acc, t) => {
|
|
58
|
+
acc[t] = false;
|
|
59
|
+
if (t === transition) {
|
|
60
|
+
acc[t] = value;
|
|
61
|
+
}
|
|
62
|
+
return acc;
|
|
63
|
+
},
|
|
64
|
+
{} as Record<TestStatusTransition, boolean>,
|
|
65
|
+
),
|
|
66
|
+
};
|
|
67
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TestStatusTransition } from "@allurereport/core-api";
|
|
2
|
+
|
|
3
|
+
export const testTypeFiltersList = ["flaky", "retry"];
|
|
4
|
+
|
|
5
|
+
export const transitionFiltersList = ["new", "fixed", "regressed", "malfunctioned"] as TestStatusTransition[];
|
|
6
|
+
|
|
7
|
+
export const filtersList = [...testTypeFiltersList, ...transitionFiltersList] as const;
|