// @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(<ActivityFeed items={[]} />);
    expect(screen.getByText("No activity yet.")).toBeTruthy();
  });

  it("renders each item's message", () => {
    render(
      <ActivityFeed
        items={[
          baseActivity,
          { ...baseActivity, id: "a-2", message: "Remit XYZ received" },
        ]}
      />,
    );
    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(<ActivityFeed items={[unknown]} />)).not.toThrow();
    expect(screen.getByText("future_kind event arrived")).toBeTruthy();
  });
});
