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");
});
});