From 53b5359ad5bd90e62ee14aaac3c8eda8c0423a62 Mon Sep 17 00:00:00 2001 From: gnezim Date: Tue, 21 Apr 2026 19:14:41 +0300 Subject: [PATCH] =?UTF-8?q?Align=20Board=20tab=20tooltip=20preposition=20t?= =?UTF-8?q?o=20TZ-exact=20'=D0=B2=20=D0=B1=D0=BB=D0=B8=D0=B6=D0=B0=D0=B9?= =?UTF-8?q?=D1=88=D0=B8=D0=B5=20=D0=B4=D0=BD=D0=B8'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/ru/common.json | 2 +- src/ui/layout/PageTabs.test.tsx | 92 +++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/ui/layout/PageTabs.test.tsx diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index e137c513..fba7ce80 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -396,7 +396,7 @@ "SHORT-HOUR": "ч.", "SHORT-MIN": "мин.", "STOCK": "Акция", - "TAB-BOARD-TOOLTIP": "Информация о фактическом выполнении рейсов на ближайшие дни", + "TAB-BOARD-TOOLTIP": "Информация о фактическом выполнении рейсов в ближайшие дни", "TAB-SCHEDULE-TOOLTIP": "Информация о планируемом выполнении рейсов на ближайший год", "TAB-FLIGHTS-MAP-TOOLTIP": "Картографический сервис представления информации об маршрутной сети «Аэрофлот»", "TERMINAL": "Терминал", diff --git a/src/ui/layout/PageTabs.test.tsx b/src/ui/layout/PageTabs.test.tsx new file mode 100644 index 00000000..4dd1ebf2 --- /dev/null +++ b/src/ui/layout/PageTabs.test.tsx @@ -0,0 +1,92 @@ +// @vitest-environment jsdom +import { describe, it, expect, vi } from "vitest"; +import { render, screen } from "@testing-library/react"; +import { PageTabs } from "./PageTabs.js"; +import ruCommon from "@/i18n/locales/ru/common.json" with { type: "json" }; + +// Mock Link component from Modern.js router +vi.mock("@modern-js/runtime/router", () => ({ + Link: ({ + children, + to, + "data-testid": testid, + title, + "aria-current": ariaCurrent, + ...props + }: { + children: React.ReactNode; + to: string; + className?: string; + "data-testid"?: string; + title?: string; + "aria-current"?: "page"; + [k: string]: unknown; + }) => ( + + {children} + + ), +})); + +// Mock i18n provider +vi.mock("@/i18n/provider.js", () => ({ + useTranslation: () => ({ + t: (key: string) => { + const parts = key.split("."); + let value: unknown = ruCommon as Record; + for (const part of parts) { + if (typeof value === "object" && value !== null && part in value) { + value = (value as Record)[part]; + } else { + return key; // fallback to key if path not found + } + } + return value as string; + }, + }), +})); + +// Mock useLocale hook +vi.mock("@/i18n/useLocale.js", () => ({ + useLocale: () => ({ locale: "ru-ru" }), +})); + +// Mock feature flag +vi.mock("@/features/flights-map/hooks/useFeatureFlag.js", () => ({ + useFeatureFlag: () => true, +})); + +// Suppress SCSS import errors in jsdom +vi.mock("./PageTabs.scss", () => ({})); + +describe("4.1 section-tab tooltips match TZ verbatim (Russian)", () => { + it("Board tooltip: 'Информация о фактическом выполнении рейсов в ближайшие дни'", () => { + render(); + const tab = screen.getByTestId("onlineboard-tab"); + expect(tab.getAttribute("title")).toBe( + "Информация о фактическом выполнении рейсов в ближайшие дни", + ); + }); + + it("Schedule tooltip: 'Информация о планируемом выполнении рейсов на ближайший год'", () => { + render(); + const tab = screen.getByTestId("schedule-tab"); + expect(tab.getAttribute("title")).toBe( + "Информация о планируемом выполнении рейсов на ближайший год", + ); + }); + + it("Flight-Map tooltip: 'Картографический сервис представления информации об маршрутной сети «Аэрофлот»'", () => { + render(); + const tab = screen.getByTestId("flights-map-tab"); + expect(tab.getAttribute("title")).toBe( + "Картографический сервис представления информации об маршрутной сети «Аэрофлот»", + ); + }); +});