Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/core-api/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const statusesList: readonly TestStatus[] = ["failed", "broken", "passed"
export const severityLevels: readonly SeverityLevel[] = ["blocker", "critical", "normal", "minor", "trivial"];

export const severityLabelName = "severity";

export const fallbackTestCaseIdLabelName = "_fallbackTestCaseId";

export const unsuccessfulStatuses = new Set<TestStatus>(["failed", "broken"]);
Expand Down
4 changes: 4 additions & 0 deletions packages/plugin-api/src/report.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,10 @@ export type ReportTreeLeaf = Pick<
tooltips?: Record<string, string>;
tags?: string[];
categories?: string[];
/**
* Value of the test result's `severity` label. Absent when the test result has no severity label.
*/
severity?: string;
};

export type ReportTreeGroup = WithChildren & DefaultTreeGroup & { nodeId: string };
Expand Down
7 changes: 7 additions & 0 deletions packages/plugin-awesome/src/generators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
joinPosixPath,
nullsLast,
ordinal,
severityLabelName,
} from "@allurereport/core-api";
import type {
AllureStore,
Expand Down Expand Up @@ -482,6 +483,12 @@ const leafFactory = ({
tooltips,
};

const severity = groupedLabels[severityLabelName]?.[0];

if (severity) {
leaf.severity = severity;
}

if (groupedLabels.tag && groupedLabels.tag.length > 0) {
leaf.tags = groupedLabels.tag;
}
Expand Down
45 changes: 45 additions & 0 deletions packages/plugin-awesome/test/generators.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,51 @@ describe("generateQualityGateResults", () => {
});
});

it("should expose the severity label on tree leaves and omit it when there is none", async () => {
const writtenWidgets = new Map<string, unknown>();
const writer: AwesomeDataWriter = {
writeData: vi.fn().mockResolvedValue(undefined),
writeWidget: vi.fn(async (fileName: string, data: unknown) => {
writtenWidgets.set(fileName, data);
}),
writeTestCase: vi.fn().mockResolvedValue(undefined),
writeAttachment: vi.fn().mockResolvedValue(undefined),
};
const tests = [
{
...mockTestResult("tr-blocker", "blocker test", "failed"),
groupedLabels: { severity: ["blocker"] },
},
{
...mockTestResult("tr-no-severity", "test without severity", "failed"),
groupedLabels: {},
},
] as AwesomeTestResult[];

await generateQualityGateResults(
writer,
{
default: [
{
rule: "maxFailures",
success: false,
expected: 0,
actual: 2,
message: "Too many failures",
testResults: ["tr-blocker", "tr-no-severity"],
},
],
},
{ tests },
);

const results = writtenWidgets.get("quality-gate.json") as AwesomeQualityGateResults;
const leavesById = results.default[0].testResultsTree?.leavesById ?? {};

expect(leavesById["tr-blocker"]).toMatchObject({ severity: "blocker" });
expect(leavesById["tr-no-severity"]).not.toHaveProperty("severity");
});

it("should omit the tree when no related test result can be resolved", async () => {
const writer: AwesomeDataWriter = {
writeData: vi.fn().mockResolvedValue(undefined),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { capitalize, severityLevels } from "@allurereport/core-api";
import { allureIcons } from "@allurereport/web-components";
import { useMemo } from "preact/hooks";

import { useI18n } from "@/stores";

import { NO_SEVERITY } from "../../stores/treeFilters/constants";
import type { AwesomeFilterGroupSimple } from "../../stores/treeFilters/model";
import { MultipleChoiceFieldFilter } from "./BaseFilters";

const severityIcons: Record<string, string> = {
blocker: allureIcons.lineArrowsChevronUpDouble,
critical: allureIcons.lineArrowsChevronUp,
normal: allureIcons.lineGeneralEqual,
minor: allureIcons.lineArrowsChevronDown,
trivial: allureIcons.lineArrowsChevronDownDouble,
[NO_SEVERITY]: allureIcons.lineGeneralXClose,
};

const severityOptions = [...severityLevels, NO_SEVERITY];

export const SeverityFilter = (props: {
group: AwesomeFilterGroupSimple;
onChange: (group: AwesomeFilterGroupSimple) => void;
}) => {
const { group, onChange } = props;
const { t } = useI18n("filters");
const { t: tSeverity } = useI18n("severity");
const options = useMemo(
() =>
severityOptions.map((severity) => ({
key: severity,
icon: severityIcons[severity],
label: capitalize(tSeverity(severity)),
})),
[tSeverity],
);

return (
<MultipleChoiceFieldFilter
group={group}
onChange={onChange}
options={options}
label={t("severity")}
fieldKey="severity"
logicalOperator="OR"
strict
counter
testId="severity-filter"
onClear={() =>
onChange({
...group,
value: [],
})
}
/>
);
};
6 changes: 6 additions & 0 deletions packages/web-awesome/src/components/ReportFilters/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
isFlakyFilter,
isResolutionFilter,
isRetryFilter,
isSeverityFilter,
isTagFilter,
isTransitionFilter,
} from "@/stores/treeFilters/utils";
Expand All @@ -17,6 +18,7 @@ import { BooleanFieldFilter } from "./BaseFilters";
import { CategoriesFilter } from "./CategoriesFilter";
import { ResolutionFilter } from "./ResolutionFilter";
import { RetryFlakyFilter } from "./RetryFlaky";
import { SeverityFilter } from "./SeverityFilter";
import { TagsFilter } from "./TagsFilter";
import { TransitionFilter } from "./TransitionFilter";

Expand All @@ -34,6 +36,10 @@ const Filter = (props: { filter: AwesomeFilter; onChange: (filter: AwesomeFilter
return <TransitionFilter group={filter} onChange={onChange} />;
}

if (isSeverityFilter(filter)) {
return <SeverityFilter group={filter} onChange={onChange} />;
}

if (isResolutionFilter(filter)) {
return <ResolutionFilter group={filter} onChange={onChange} />;
}
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "خطورة عالية",
"normal": "عادي",
"minor": "ثانوي",
"trivial": "بسيط"
"trivial": "بسيط",
"none": "بدون خطورة"
},
"execution": {
"name": "التنفيذ",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/az.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "kritik",
"normal": "normal",
"minor": "kiçik",
"trivial": "əhəmiyyətsiz"
"trivial": "əhəmiyyətsiz",
"none": "ciddilik dərəcəsi yoxdur"
},
"execution": {
"name": "İcra",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "kritisch",
"normal": "normal",
"minor": "geringfügig",
"trivial": "trivial"
"trivial": "trivial",
"none": "kein Schweregrad"
},
"execution": {
"name": "Ausführung",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "critical",
"normal": "normal",
"minor": "minor",
"trivial": "trivial"
"trivial": "trivial",
"none": "no severity"
},
"execution": {
"name": "Execution",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "crítico",
"normal": "normal",
"minor": "menor",
"trivial": "trivial"
"trivial": "trivial",
"none": "sin severidad"
},
"execution": {
"name": "Ejecución",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "critique",
"normal": "normal",
"minor": "mineur",
"trivial": "trivial"
"trivial": "trivial",
"none": "sans sévérité"
},
"execution": {
"name": "Exécution",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/he.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "קריטי",
"normal": "רגיל",
"minor": "קל",
"trivial": "פעוט"
"trivial": "פעוט",
"none": "ללא חומרה"
},
"execution": {
"name": "ביצוע",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/hy.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "կրիտիկական",
"normal": "նորմալ",
"minor": "աննշան",
"trivial": "աննշան"
"trivial": "աննշան",
"none": "առանց ծանրության"
},
"execution": {
"name": "Կատարում",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "critico",
"normal": "normale",
"minor": "minore",
"trivial": "banale"
"trivial": "banale",
"none": "senza gravità"
},
"execution": {
"name": "Esecuzione",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "重大",
"normal": "通常",
"minor": "小規模",
"trivial": "些細"
"trivial": "些細",
"none": "重要度なし"
},
"execution": {
"name": "実行",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/ka.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "კრიტიკული",
"normal": "ჩვეულებრივი",
"minor": "მნიშვნელობა",
"trivial": "უმნიშვნელო"
"trivial": "უმნიშვნელო",
"none": "სიმძიმის გარეშე"
},
"execution": {
"name": "შესრულება",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/kr.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "치명적",
"normal": "보통",
"minor": "경미함",
"trivial": "사소함"
"trivial": "사소함",
"none": "심각도 없음"
},
"execution": {
"name": "실행",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "kritiek",
"normal": "normaal",
"minor": "klein",
"trivial": "onbeduidend"
"trivial": "onbeduidend",
"none": "geen ernst"
},
"execution": {
"name": "Uitvoering",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "krytyczna",
"normal": "zwykła",
"minor": "niska",
"trivial": "minimalna"
"trivial": "minimalna",
"none": "brak ważności"
},
"execution": {
"name": "Wykonanie",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "crítico",
"normal": "normal",
"minor": "menor",
"trivial": "trivial"
"trivial": "trivial",
"none": "sem severidade"
},
"execution": {
"name": "Execução",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "критическая",
"normal": "обычная",
"minor": "невысокая",
"trivial": "минимальная"
"trivial": "минимальная",
"none": "без важности"
},
"execution": {
"name": "Выполнение",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/sv.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "kritisk",
"normal": "normal",
"minor": "mindre",
"trivial": "obetydlig"
"trivial": "obetydlig",
"none": "ingen allvarlighetsgrad"
},
"execution": {
"name": "Utförande",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/tr.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "kritik",
"normal": "normal",
"minor": "küçük",
"trivial": "önemsiz"
"trivial": "önemsiz",
"none": "önem derecesi yok"
},
"execution": {
"name": "Yürütme",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/uk.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "критична",
"normal": "звичайна",
"minor": "невисока",
"trivial": "мінімальна"
"trivial": "мінімальна",
"none": "без важливості"
},
"execution": {
"name": "Виконання",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/zh-TW.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "嚴重",
"normal": "正常",
"minor": "次要",
"trivial": "輕微"
"trivial": "輕微",
"none": "無嚴重程度"
},
"execution": {
"name": "執行",
Expand Down
3 changes: 2 additions & 1 deletion packages/web-awesome/src/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@
"critical": "严重",
"normal": "正常",
"minor": "次要",
"trivial": "轻微"
"trivial": "轻微",
"none": "无严重程度"
},
"execution": {
"name": "执行",
Expand Down
Loading