import { MantineProvider } from "@mantine/core"; import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import { SourceSyncStatus, type SourceSyncStatusProps } from "./SourceSyncStatus"; function renderStatus(props: SourceSyncStatusProps) { render( , ); } describe("SourceSyncStatus", () => { it("renders nothing without source data", () => { renderStatus({}); expect(screen.queryByRole("status")).not.toBeInTheDocument(); expect(screen.queryByText(/Данные/)).not.toBeInTheDocument(); }); it("renders the source timestamp", () => { renderStatus({ lastSuccessfulAt: "2026-02-03T10:15:00.000Z" }); expect(screen.getByText(/Данные на/)).toBeInTheDocument(); }); it("announces the caller-provided error text as a status", () => { renderStatus({ errorText: "Обновление не удалось" }); expect(screen.getByRole("status")).toHaveTextContent("Обновление не удалось"); }); it("announces an active or failed source attempt with text", () => { renderStatus({ lastAttempt: { finishedAt: null, problems: [], startedAt: "2026-02-03T10:15:00.000Z", state: "running", }, }); expect(screen.getByRole("status")).toHaveTextContent( "Обновление выполняется", ); }); it("keeps the notices next to the timestamp they belong to", () => { renderStatus({ errorText: "Обновление не удалось", lastSuccessfulAt: "2026-02-03T10:15:00.000Z", stale: true, }); expect(screen.getByText(/Данные на/)).toBeInTheDocument(); expect(screen.getByText("Данные требуют обновления")).toBeInTheDocument(); expect(screen.getByRole("status")).toHaveTextContent("Обновление не удалось"); }); });