import { EventId, TurnId } from "@t3tools/contracts";
import type { ReactNode } from "react";
import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it, vi } from "vite-plus/test";
import { deriveLatestContextWindowSnapshot } from "~/lib/contextWindow";
import { ContextWindowMeter } from "./ContextWindowMeter";
vi.mock("../ui/popover", () => ({
Popover: ({ children }: { children: ReactNode }) => children,
PopoverPopup: ({ children }: { children: ReactNode }) => children,
PopoverTrigger: ({ closeDelay, render }: { closeDelay: number; render: ReactNode }) => (
{render}
),
}));
const usage = deriveLatestContextWindowSnapshot([
{
id: EventId.make("activity-1"),
tone: "info",
kind: "context-window.updated",
summary: "Context updated",
payload: { usedTokens: 100_000, maxTokens: 1_000_000 },
turnId: TurnId.make("turn-1"),
createdAt: "2026-08-24T12:00:00.000Z",
},
]);
if (!usage) {
throw new Error("The context window test fixture did not produce a snapshot.");
}
describe("ContextWindowMeter", () => {
it("keeps the hover popover open while the pointer moves to the compact button", () => {
const markup = renderToStaticMarkup( {}} />);
expect(markup).toContain('data-close-delay="150"');
expect(markup).toContain("Compact context");
});
it("closes an informational hover popover without delay", () => {
const markup = renderToStaticMarkup();
expect(markup).toContain('data-close-delay="0"');
expect(markup).not.toContain("Compact context");
});
it("explains why the compact action is disabled", () => {
const markup = renderToStaticMarkup(
{}}
compactDisabled
compactDisabledReason="Send or clear your draft before compacting"
/>,
);
expect(markup).toContain('disabled=""');
expect(markup).toContain(">Send or clear your draft before compacting<");
expect(markup).not.toContain('aria-label="Send or clear your draft before compacting"');
});
});