import { act, render, screen } from "@testing-library/react"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { phraseIntervalMs, WorkingIndicator, workingPhrases, } from "./WorkingIndicator"; describe("WorkingIndicator", () => { beforeEach(() => { vi.useFakeTimers(); }); afterEach(() => { vi.useRealTimers(); }); it("shows the first working phrase with a spinner", () => { const { container } = render(); expect(screen.getByText(workingPhrases[0])).toBeDefined(); expect(container.querySelector(".spinner")).not.toBeNull(); }); it("rotates to the next phrase after the interval", () => { render(); act(() => { vi.advanceTimersByTime(phraseIntervalMs); }); expect(screen.getByText(workingPhrases[1])).toBeDefined(); }); it("wraps around to the first phrase after the full cycle", () => { render(); act(() => { vi.advanceTimersByTime(phraseIntervalMs * workingPhrases.length); }); expect(screen.getByText(workingPhrases[0])).toBeDefined(); }); });