import { render, screen } from "@testing-library/react"; import { describe, it, expect, vi } from "vitest"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { MemoryRouter } from "react-router"; import { AgentStatus } from "#/components/features/controls/agent-status"; import { AgentState } from "#/types/agent-state"; import { useAgentState } from "#/hooks/use-agent-state"; import { useConversationStore } from "#/stores/conversation-store"; vi.mock("#/hooks/use-agent-state"); vi.mock("#/hooks/use-conversation-id", () => ({ useConversationId: () => ({ conversationId: "test-id" }), })); const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} ); const renderAgentStatus = ({ isPausing = false, }: { isPausing?: boolean } = {}) => render( , { wrapper }, ); describe("AgentStatus - isLoading logic", () => { it("should show loading when curAgentState is INIT", () => { vi.mocked(useAgentState).mockReturnValue({ curAgentState: AgentState.INIT, isArchived: false, }); renderAgentStatus(); expect(screen.getByTestId("agent-loading-spinner")).toBeInTheDocument(); }); it("should show loading when isPausing is true, even if shouldShownAgentLoading is false", () => { vi.mocked(useAgentState).mockReturnValue({ curAgentState: AgentState.AWAITING_USER_INPUT, isArchived: false, }); renderAgentStatus({ isPausing: true }); expect(screen.getByTestId("agent-loading-spinner")).toBeInTheDocument(); }); it("should NOT update global shouldShownAgentLoading when only isPausing is true", () => { vi.mocked(useAgentState).mockReturnValue({ curAgentState: AgentState.AWAITING_USER_INPUT, isArchived: false, }); renderAgentStatus({ isPausing: true }); // Loading spinner shows (because isPausing) expect(screen.getByTestId("agent-loading-spinner")).toBeInTheDocument(); // But global state should be false (because shouldShownAgentLoading is false) const { shouldShownAgentLoading } = useConversationStore.getState(); expect(shouldShownAgentLoading).toBe(false); }); });