// @vitest-environment happy-dom (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; import { describe, expect, it } from "vitest"; import { render, screen } from "@testing-library/react"; import { ActivityFeed } from "./ActivityFeed"; import type { Activity } from "@/types"; const baseActivity: Activity = { id: "a-1", kind: "claim_submitted", message: "Claim ABC-1 submitted", timestamp: "2026-06-20T12:00:00Z", }; describe("ActivityFeed", () => { it("renders the empty-state copy when items is empty", () => { render(); expect(screen.getByText("No activity yet.")).toBeTruthy(); }); it("renders each item's message", () => { render( , ); expect(screen.getByText("Claim ABC-1 submitted")).toBeTruthy(); expect(screen.getByText("Remit XYZ received")).toBeTruthy(); }); it("does not crash on an unknown kind", () => { // Backwards-compat guard: the backend may emit a kind the frontend // hasn't been updated for yet (manual_match was the original case). // The feed must fall back to a neutral icon instead of throwing. const unknown = { ...baseActivity, id: "a-3", message: "future_kind event arrived", // Cast through `unknown` so the type-checker doesn't widen the // `kind` literal away from the exhaustive union. kind: "future_kind" as Activity["kind"], }; expect(() => render()).not.toThrow(); expect(screen.getByText("future_kind event arrived")).toBeTruthy(); }); });