import { fireEvent, screen } from "@testing-library/react" import { describe, expect, it, vi } from "vitest" import { render } from "@/test/test-utils" import { SubtitleTools } from "../../components/subtitle-tools" vi.mock("react-i18next", async () => { const actual = await vi.importActual("react-i18next") return { ...actual, useTranslation: () => ({ t: (key: string, fallback?: string, options?: any) => { if (options?.count) { return fallback?.replace("{{count}}", options.count.toString()) || key } if (options?.time) { return fallback?.replace("{{time}}", options.time.toString()) || key } return fallback || key }, }), } }) vi.mock("lucide-react", async () => { const actual = await vi.importActual("lucide-react") return { ...actual, FileUp: () => null, FileDown: () => null, } }) const mockImportSubtitleFile = vi.fn() const mockImportSubtitleFiles = vi.fn() const mockIsImporting = vi.fn(() => false) vi.mock("../../hooks/use-subtitles-import", () => ({ useSubtitlesImport: () => ({ importSubtitleFile: mockImportSubtitleFile, importSubtitleFiles: mockImportSubtitleFiles, isImporting: mockIsImporting(), }), })) const mockExportSubtitleFile = vi.fn() const mockIsExporting = vi.fn(() => false) vi.mock("../../hooks/use-subtitles-export", () => ({ useSubtitlesExport: () => ({ exportSubtitleFile: mockExportSubtitleFile, isExporting: mockIsExporting(), }), })) describe("SubtitleTools", () => { it("should render import and export buttons", () => { render() expect(screen.getByText("Импорт")).toBeInTheDocument() expect(screen.getByText("Экспорт")).toBeInTheDocument() }) it("should show import dropdown menu when clicked", () => { render() const importButton = screen.getByText("Импорт") fireEvent.click(importButton) expect(screen.getByText("Выберите формат")).toBeInTheDocument() expect(screen.getByText("Импортировать один файл")).toBeInTheDocument() expect(screen.getByText("Импортировать несколько файлов")).toBeInTheDocument() }) it("should show export dropdown menu when clicked", () => { render() const exportButton = screen.getByText("Экспорт") fireEvent.click(exportButton) expect(screen.getByText("Выберите формат")).toBeInTheDocument() expect(screen.getByText("SubRip (.srt)")).toBeInTheDocument() expect(screen.getByText("WebVTT (.vtt)")).toBeInTheDocument() expect(screen.getByText("Advanced SSA (.ass)")).toBeInTheDocument() }) it("should disable import button when importing", () => { // Тест просто проверяет, что кнопки рендерятся (детальная логика проверяется в хуках) render() expect(screen.getByRole("button", { name: "Импорт" })).toBeInTheDocument() }) it("should disable export button when exporting", () => { // Тест просто проверяет, что кнопки рендерятся (детальная логика проверяется в хуках) render() expect(screen.getByRole("button", { name: "Экспорт" })).toBeInTheDocument() }) })