38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import "@testing-library/jest-dom";
|
|
import { render, screen } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
const translations: Record<string, string> = {
|
|
"settings.language.heading": "Language",
|
|
"settings.language.description": "HiveGrid is available in German and English.",
|
|
"settings.language.currentLabel": "Current language",
|
|
"settings.language.v2Note": "You can change the language at any time from the language menu.",
|
|
"shared.locales.en": "English",
|
|
};
|
|
|
|
vi.mock("react-i18next", () => ({
|
|
useTranslation: () => ({
|
|
t: (key: string) => translations[key] ?? key,
|
|
i18n: { language: "en-US" },
|
|
}),
|
|
}));
|
|
|
|
import { LanguageSettingsNotice } from "./LanguageSettingsNotice";
|
|
|
|
describe("LanguageSettingsNotice", () => {
|
|
it("renders the active language and points to the global language menu", () => {
|
|
render(<LanguageSettingsNotice />);
|
|
|
|
expect(screen.getByRole("heading", { name: "Language" })).toBeInTheDocument();
|
|
expect(screen.getByText("HiveGrid is available in German and English.")).toBeInTheDocument();
|
|
expect(screen.getByText("English")).toBeInTheDocument();
|
|
expect(screen.getByText("You can change the language at any time from the language menu.")).toBeInTheDocument();
|
|
});
|
|
|
|
it("routes every visible string through t() so no raw i18n keys leak into the UI", () => {
|
|
const { container } = render(<LanguageSettingsNotice />);
|
|
|
|
expect(container.textContent).not.toContain("settings.language.");
|
|
});
|
|
});
|