// @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();
});
});