import { describe, expect, it } from "vitest"; import { render, screen } from "@testing-library/react"; import { LoadingPill } from "../../src/components/LoadingPill"; import i18n from "../../src/i18n"; describe("LoadingPill", () => { it("shows a loading label with a live region", () => { render(); expect(screen.getByRole("status")).toHaveTextContent("Loading nodes… (42)"); }); it("shows a total-failure label when nothing loaded", () => { render(); expect(screen.getByRole("status")).toHaveTextContent("Failed to load observers"); }); it("shows a partial-failure label when some rows loaded", () => { render(); expect(screen.getByRole("status")).toHaveTextContent("Some nodes failed to load (7 shown)"); }); it("renders nothing when idle (not loading, no error)", () => { const { container } = render(); expect(container).toBeEmptyDOMElement(); }); it("agrees in French with each noun's gender and the shown count", async () => { await i18n.changeLanguage("fr"); const { rerender } = render(); expect(screen.getByRole("status")).toHaveTextContent("Chargement des nœuds… (42)"); rerender(); expect(screen.getByRole("status")).toHaveTextContent("Certaines routes n’ont pas pu être chargées (7 affichées)"); rerender(); expect(screen.getByRole("status")).toHaveTextContent("Certains paquets n’ont pas pu être chargés (1 affiché)"); rerender(); expect(screen.getByRole("status")).toHaveTextContent("Échec du chargement des observateurs"); }); });