mirror of
https://github.com/mgeeky/decode-spam-headers.git
synced 2026-02-22 13:33:30 +01:00
MAESTRO: add report component tests
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import type { ReactElement } from "react";
|
||||
import { act } from "react-dom/test-utils";
|
||||
import { createRoot } from "react-dom/client";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
|
||||
import SecurityAppliancesSummary from "../../components/report/SecurityAppliancesSummary";
|
||||
import type { SecurityAppliance } from "../../types/analysis";
|
||||
|
||||
type RenderResult = {
|
||||
container: HTMLDivElement;
|
||||
};
|
||||
|
||||
const cleanups: Array<() => void> = [];
|
||||
|
||||
const render = (ui: ReactElement): RenderResult => {
|
||||
const container = document.createElement("div");
|
||||
document.body.appendChild(container);
|
||||
const root = createRoot(container);
|
||||
|
||||
act(() => {
|
||||
root.render(ui);
|
||||
});
|
||||
|
||||
cleanups.push(() => {
|
||||
act(() => {
|
||||
root.unmount();
|
||||
});
|
||||
container.remove();
|
||||
});
|
||||
|
||||
return { container };
|
||||
};
|
||||
|
||||
const getByTestId = (container: HTMLElement, testId: string): HTMLElement => {
|
||||
const element = container.querySelector(`[data-testid="${testId}"]`);
|
||||
if (!element) {
|
||||
throw new Error(`Expected element ${testId} to be rendered.`);
|
||||
}
|
||||
return element as HTMLElement;
|
||||
};
|
||||
|
||||
const sampleAppliances: SecurityAppliance[] = [
|
||||
{
|
||||
name: "Mimecast Email Security",
|
||||
vendor: "Mimecast",
|
||||
headers: ["X-Mimecast-Spam-Info"],
|
||||
},
|
||||
{
|
||||
name: "Proofpoint Protection",
|
||||
vendor: "Proofpoint",
|
||||
headers: ["X-Proofpoint-Verdict"],
|
||||
},
|
||||
];
|
||||
|
||||
afterEach(() => {
|
||||
while (cleanups.length > 0) {
|
||||
const cleanup = cleanups.pop();
|
||||
if (cleanup) {
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
describe("SecurityAppliancesSummary", () => {
|
||||
it("renders detected security appliances as badges", () => {
|
||||
const { container } = render(
|
||||
<SecurityAppliancesSummary appliances={sampleAppliances} />,
|
||||
);
|
||||
|
||||
const summary = getByTestId(container, "security-appliances-summary");
|
||||
expect(summary.textContent ?? "").toContain("Mimecast Email Security");
|
||||
expect(summary.textContent ?? "").toContain("Proofpoint Protection");
|
||||
|
||||
const firstBadge = getByTestId(container, "security-appliance-0");
|
||||
expect(firstBadge.textContent ?? "").toContain("Mimecast");
|
||||
});
|
||||
|
||||
it("renders an empty state when no appliances are detected", () => {
|
||||
const { container } = render(<SecurityAppliancesSummary appliances={[]} />);
|
||||
|
||||
const emptyState = getByTestId(container, "security-appliances-empty");
|
||||
expect(emptyState.textContent ?? "").toMatch(/No security appliances detected/i);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user