import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { AgentSlashStatusPanel, type AgentSlashStatusPanelLabels } from "./AgentSlashStatusPanel"; const labels: AgentSlashStatusPanelLabels = { slashStatusTitle: "Status", slashStatusSession: "Session", slashStatusBaseUrl: "Base URL", slashStatusContext: "Context", slashStatusLimits: "Limits", slashStatusClose: "Close", slashStatusContextValue: ({ percentLeft }) => `${percentLeft}% left`, slashStatusContextUnavailable: "—", slashStatusLimitsUnavailable: "Unavailable", slashStatusEmptyValue: "—", slashStatusUsageJustUpdated: "Updated just now", slashStatusUsageMinutesAgo: (count) => `Updated ${count}m ago`, slashStatusUsageHoursAgo: (count) => `Updated ${count}h ago`, slashStatusUsageUpdating: "Updating…", slashStatusUsageRefreshFailed: "Refresh failed", slashStatusUsageRefreshAria: "Refresh status" }; describe("AgentSlashStatusPanel", () => { it("renders the lightweight canonical fields and omits endpoint details", () => { render( ); expect(screen.getByText("session-1")).toBeInTheDocument(); expect(screen.getByText("75% left")).toBeInTheDocument(); expect(screen.getByText("—")).toBeInTheDocument(); expect(screen.queryByText("Base URL:")).not.toBeInTheDocument(); expect( screen.queryByText("https://private.example.test") ).not.toBeInTheDocument(); }); it("shows loading immediately and exposes refresh/close actions", () => { const onClose = vi.fn(); const onRefresh = vi.fn(); const { rerender } = render( ); expect(screen.getAllByText("Updating…")).toHaveLength(2); expect(screen.getByText("Context:")).toBeInTheDocument(); expect(screen.getByText("—")).toBeInTheDocument(); expect( screen.getByRole("button", { name: "Refresh status" }) ).toHaveAttribute("aria-busy", "true"); rerender( ); fireEvent.click(screen.getByRole("button", { name: "Refresh status" })); fireEvent.click(screen.getByRole("button", { name: "Close" })); expect(onRefresh).toHaveBeenCalledOnce(); expect(onClose).toHaveBeenCalledOnce(); }); it("renders the projected account error", () => { render( ); expect(screen.getByRole("alert")).toHaveTextContent( "Account balance or quota is exhausted" ); }); });