import { render, screen } from "@testing-library/react" import { beforeEach, describe, expect, it, vi } from "vitest" import { useLanguage } from "@/features/language" import { useModal } from "@/features/modals/services/modal-provider" import { UserSettingsModalTabs } from "../../components/user-settings-modal-tabs" import { useApiKeys } from "../../hooks/use-api-keys" import { useUserSettings } from "../../hooks/use-user-settings" // Мокаем хуки vi.mock("../../hooks/use-user-settings") vi.mock("../../hooks/use-api-keys") vi.mock("@/features/language") vi.mock("@/features/modals/services/modal-provider") vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: (key: string) => key, }), })) // Мокаем Tauri Dialog Plugin vi.mock("@tauri-apps/plugin-dialog", () => ({ open: vi.fn().mockResolvedValue("selected/path"), })) describe("UserSettingsModalTabs", () => { beforeEach(() => { vi.clearAllMocks() // Мок для useUserSettings vi.mocked(useUserSettings).mockImplementation(() => ({ screenshotsPath: "public/screenshots", playerScreenshotsPath: "public/media", openAiApiKey: "", claudeApiKey: "", isBrowserVisible: true, isTimelineVisible: true, isOptionsVisible: true, activeTab: "media", layoutMode: "default", playerVolume: 100, handleScreenshotsPathChange: vi.fn(), handleAiApiKeyChange: vi.fn(), handleClaudeApiKeyChange: vi.fn(), handlePlayerScreenshotsPathChange: vi.fn(), handleTabChange: vi.fn(), handleLayoutChange: vi.fn(), toggleBrowserVisibility: vi.fn(), handlePlayerVolumeChange: vi.fn(), toggleTimelineVisibility: vi.fn(), toggleOptionsVisibility: vi.fn(), })) // Мок для useApiKeys vi.mocked(useApiKeys).mockImplementation(() => ({ getApiKeyStatus: vi.fn().mockReturnValue("not_set"), updateApiKeyStatus: vi.fn(), testApiKey: vi.fn(), initiateOAuth: vi.fn(), youtubeCredentials: { clientId: "", clientSecret: "" }, updateYoutubeCredentials: vi.fn(), tiktokCredentials: { clientId: "", clientSecret: "" }, updateTiktokCredentials: vi.fn(), vimeoCredentials: { clientId: "", clientSecret: "", accessToken: "" }, updateVimeoCredentials: vi.fn(), telegramCredentials: { botToken: "", chatId: "" }, updateTelegramCredentials: vi.fn(), codecovToken: "", updateCodecovToken: vi.fn(), tauriAnalyticsKey: "", updateTauriAnalyticsKey: vi.fn(), })) // Мок для useLanguage vi.mocked(useLanguage).mockImplementation(() => ({ currentLanguage: "ru", changeLanguage: vi.fn(), systemLanguage: "ru", isLoading: false, error: null, refreshLanguage: vi.fn(), })) // Мок для useModal vi.mocked(useModal).mockImplementation(() => ({ openModal: vi.fn(), closeModal: vi.fn(), modalType: null, modalData: null, isOpen: false, submitModal: vi.fn(), })) }) it("should render main tabs correctly", () => { render() // Проверяем, что основные вкладки отображаются expect(screen.getByText("dialogs.userSettings.tabs.general")).toBeInTheDocument() expect(screen.getByText("dialogs.userSettings.tabs.aiServices")).toBeInTheDocument() expect(screen.getByText("dialogs.userSettings.tabs.socialNetworks")).toBeInTheDocument() // Development вкладка показывается только в dev режиме }) it("should show General tab content by default", () => { render() // Проверяем, что общие настройки отображаются по умолчанию expect(screen.getByText("dialogs.userSettings.interfaceLanguage")).toBeInTheDocument() expect(screen.getByText("dialogs.userSettings.screenshotsPath")).toBeInTheDocument() }) it("should have clickable tabs", () => { render() // Проверяем, что табы кликабельны const aiServicesTab = screen.getByText("dialogs.userSettings.tabs.aiServices") const socialNetworksTab = screen.getByText("dialogs.userSettings.tabs.socialNetworks") expect(aiServicesTab).toBeInTheDocument() expect(socialNetworksTab).toBeInTheDocument() // Проверяем, что это кнопки expect(aiServicesTab.closest("button")).toBeInTheDocument() expect(socialNetworksTab.closest("button")).toBeInTheDocument() }) })