77c6b62ee2
Web UI rework. - Migrate BackupAlertsTable, BackupJobsTable, BackupRunsTable, BackupsPage, BackupDashboardWidget off @mui (shadcn Table + Badge severity variants: success=chart-2, warning=chart-3, destructive) - App.tsx IA: Backups now top-level nav (DatabaseBackup icon); Media surface primary at /media; /applications -> /media redirect in both route trees (mirrors /monitoring -> /observability) Gate: build + lint + test green.
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import { render, screen } from "@testing-library/react";
|
|
import userEvent from "@testing-library/user-event";
|
|
import BackupAlertsTable from "../BackupAlertsTable";
|
|
import type { BackupAlert } from "../../types/backups";
|
|
|
|
function alert(overrides: Partial<BackupAlert> = {}): BackupAlert {
|
|
return {
|
|
id: "a1",
|
|
job_id: "job-1",
|
|
run_id: null,
|
|
alert_type: "failed_status",
|
|
severity: "warning",
|
|
message: "Run failed",
|
|
acknowledged: false,
|
|
resolved_at: null,
|
|
created_at: 1_700_000_000,
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("BackupAlertsTable", () => {
|
|
it("maps alert severity onto Badge variants per design §2.3", () => {
|
|
render(
|
|
<BackupAlertsTable
|
|
alerts={[
|
|
alert({ id: "c", severity: "critical" }),
|
|
alert({ id: "w", severity: "warning" }),
|
|
]}
|
|
onAcknowledge={vi.fn()}
|
|
/>,
|
|
);
|
|
expect(screen.getByText("critical").getAttribute("data-variant")).toBe(
|
|
"destructive",
|
|
);
|
|
expect(screen.getByText("warning").getAttribute("data-variant")).toBe(
|
|
"warning",
|
|
);
|
|
});
|
|
|
|
it("calls onAcknowledge with the alert id when the button is clicked", async () => {
|
|
const onAcknowledge = vi.fn();
|
|
render(
|
|
<BackupAlertsTable
|
|
alerts={[alert({ id: "ack-me" })]}
|
|
onAcknowledge={onAcknowledge}
|
|
/>,
|
|
);
|
|
await userEvent.click(screen.getByRole("button", { name: "Acknowledge" }));
|
|
expect(onAcknowledge).toHaveBeenCalledTimes(1);
|
|
expect(onAcknowledge).toHaveBeenCalledWith("ack-me");
|
|
});
|
|
|
|
it("hides the acknowledge button for already-acknowledged alerts", () => {
|
|
render(
|
|
<BackupAlertsTable
|
|
alerts={[alert({ id: "done", acknowledged: true })]}
|
|
onAcknowledge={vi.fn()}
|
|
/>,
|
|
);
|
|
expect(screen.queryByRole("button", { name: "Acknowledge" })).toBeNull();
|
|
});
|
|
});
|