Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
7 changes: 7 additions & 0 deletions packages/core-api/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ export const statusesList: readonly TestStatus[] = ["failed", "broken", "passed"
export const severityLevels: readonly SeverityLevel[] = ["blocker", "critical", "normal", "minor", "trivial"];

export const severityLabelName = "severity";

/**
* Sentinel value used by reports to represent a test result without a severity label,
* so that "no severity" can be filtered for explicitly.
*/
export const noSeverityValue = "none";

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 @@ -122,6 +122,10 @@ export type ReportTreeLeaf = Pick<
tooltips?: Record<string, string>;
tags?: string[];
categories?: string[];
/**
* Value of the test result's `severity` label, or `"none"` when the label is absent.
*/
severity?: string;
};

export type ReportTreeGroup = WithChildren & DefaultTreeGroup & { nodeId: string };
Expand Down
3 changes: 3 additions & 0 deletions packages/plugin-awesome/src/generators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ import {
createStylesLinkTag,
incrementStatistic,
joinPosixPath,
noSeverityValue,
nullsLast,
ordinal,
severityLabelName,
} from "@allurereport/core-api";
import type {
AllureStore,
Expand Down Expand Up @@ -472,6 +474,7 @@ const leafFactory = ({
retriesCount,
transition,
tooltips,
severity: groupedLabels[severityLabelName]?.[0] ?? noSeverityValue,
};

if (groupedLabels.tag && groupedLabels.tag.length > 0) {
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 @@ -632,6 +632,51 @@ describe("generateQualityGateResults", () => {
});
});

it('should expose the severity label on tree leaves and fall back to "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"]).toMatchObject({ severity: "none" });
});

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,57 @@
import { capitalize, noSeverityValue, severityLevels } from "@allurereport/core-api";
import { allureIcons } from "@allurereport/web-components";
import { useMemo } from "preact/hooks";

import { useI18n } from "@/stores";

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,
[noSeverityValue]: allureIcons.lineGeneralXClose,
};

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

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 @@ -8,13 +8,15 @@ import {
isCategoryFilter,
isFlakyFilter,
isRetryFilter,
isSeverityFilter,
isTagFilter,
isTransitionFilter,
} from "@/stores/treeFilters/utils";

import { BooleanFieldFilter } from "./BaseFilters";
import { CategoriesFilter } from "./CategoriesFilter";
import { RetryFlakyFilter } from "./RetryFlaky";
import { SeverityFilter } from "./SeverityFilter";
import { TagsFilter } from "./TagsFilter";
import { TransitionFilter } from "./TransitionFilter";

Expand All @@ -32,6 +34,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 (type === "field" && field.type === "boolean") {
return <BooleanFieldFilter field={field} onChange={(value) => onChange({ ...filter, value })} />;
}
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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,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 @@ -119,7 +119,8 @@
"critical": "严重",
"normal": "正常",
"minor": "次要",
"trivial": "轻微"
"trivial": "轻微",
"none": "无严重程度"
},
"execution": {
"name": "执行",
Expand Down
Loading
Loading