Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/components/audit/AdminAuditLogToolbar.test.tsx
T

75 lines
2.8 KiB
TypeScript

import "@testing-library/jest-dom";
import { render, screen } from "@testing-library/react";
import { MemoryRouter } from "react-router";
import { describe, expect, it, vi } from "vitest";
import AdminAuditLogToolbar from "./AdminAuditLogToolbar";
vi.mock("react-i18next", () => ({
useTranslation: () => ({ t: (key: string) => key }),
}));
vi.mock("~/components/ui/input/InputFilters", () => ({
default: ({ filters }: { filters: { name: string; title: string }[] }) => (
<div data-testid="input-filters">
{filters.map((filter) => (
<span key={filter.name}>{filter.title}</span>
))}
</div>
),
}));
const filters = [
{ name: "action", title: "models.log.action" },
{ name: "url", title: "models.log.url" },
{ name: "tenantId", title: "models.tenant.object" },
];
function renderToolbar(initialEntry: string) {
return render(
<MemoryRouter initialEntries={[initialEntry]}>
<AdminAuditLogToolbar filters={filters} />
</MemoryRouter>
);
}
describe("AdminAuditLogToolbar", () => {
it("renders the provided filters", () => {
renderToolbar("/audit-trails?action=create");
expect(screen.getByTestId("input-filters")).toBeInTheDocument();
expect(screen.getByText("models.log.action")).toBeInTheDocument();
expect(screen.getByText("models.log.url")).toBeInTheDocument();
expect(screen.getByText("models.tenant.object")).toBeInTheDocument();
});
it("preserves active filters while replacing stale pagination with CSV export", () => {
renderToolbar("/audit-trails?q=login&action=auth&url=%2Flogin&tenantId=tenant-1&page=3&pageSize=25");
const exportUrl = new URL(screen.getByRole("link", { name: "Export" }).getAttribute("href") ?? "", "https://example.test");
expect(exportUrl.pathname).toBe("/audit-trails");
expect(exportUrl.searchParams.get("q")).toBe("login");
expect(exportUrl.searchParams.get("action")).toBe("auth");
expect(exportUrl.searchParams.get("url")).toBe("/login");
expect(exportUrl.searchParams.get("tenantId")).toBe("tenant-1");
expect(exportUrl.searchParams.get("pageSize")).toBe("25");
expect(exportUrl.searchParams.get("page")).toBeNull();
expect(exportUrl.searchParams.get("export")).toBe("csv");
});
it("replaces an existing export value with csv", () => {
renderToolbar("/audit-trails?export=json&userId=user-1");
const exportUrl = new URL(screen.getByRole("link", { name: "Export" }).getAttribute("href") ?? "", "https://example.test");
expect(exportUrl.searchParams.get("userId")).toBe("user-1");
expect(exportUrl.searchParams.get("export")).toBe("csv");
});
it("creates a valid CSV export href without existing search params", () => {
renderToolbar("/audit-trails");
expect(screen.getByRole("link", { name: "Export" })).toHaveAttribute("href", "/audit-trails?export=csv");
});
});