import { act, fireEvent, render, screen } from "@testing-library/react" import { PanelLeftClose, PanelLeftOpen } from "lucide-react" import { beforeEach, describe, expect, it, vi } from "vitest" import { useUserSettings } from "@/features/user-settings" import { BrowserToggle } from "../../../components/layout/browser-toggle" // Мокаем хук useUserSettings vi.mock("@/features/user-settings") // Мокаем компоненты Lucide vi.mock("lucide-react", () => ({ PanelLeftClose: vi.fn(() =>
PanelLeftClose
), PanelLeftOpen: vi.fn(() =>
PanelLeftOpen
), })) // Мокаем react-i18next vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: (key: string) => { const translations: Record = { "browser.hide": "Hide Browser", "browser.show": "Show Browser", } return translations[key] || key }, }), })) describe("BrowserToggle", () => { // Очищаем моки перед каждым тестом beforeEach(() => { vi.clearAllMocks() }) it("should render PanelLeftClose icon when browser is visible", () => { // Мокаем useUserSettings для случая, когда браузер видим vi.mocked(useUserSettings).mockReturnValue({ isBrowserVisible: true, toggleBrowserVisibility: vi.fn(), } as any) // Рендерим компонент render() // Проверяем, что отображается правильная иконка expect(screen.getByTestId("panel-left-close")).toBeInTheDocument() expect(screen.queryByTestId("panel-left-open")).not.toBeInTheDocument() // Проверяем, что PanelLeftClose был вызван expect(PanelLeftClose).toHaveBeenCalled() expect(PanelLeftOpen).not.toHaveBeenCalled() // Проверяем, что кнопка имеет правильный title expect(screen.getByTitle("Hide Browser")).toBeInTheDocument() }) it("should render PanelLeftOpen icon when browser is hidden", () => { // Мокаем useUserSettings для случая, когда браузер скрыт vi.mocked(useUserSettings).mockReturnValue({ isBrowserVisible: false, toggleBrowserVisibility: vi.fn(), } as any) // Рендерим компонент render() // Проверяем, что отображается правильная иконка expect(screen.getByTestId("panel-left-open")).toBeInTheDocument() expect(screen.queryByTestId("panel-left-close")).not.toBeInTheDocument() // Проверяем, что PanelLeftOpen был вызван expect(PanelLeftOpen).toHaveBeenCalled() expect(PanelLeftClose).not.toHaveBeenCalled() // Проверяем, что кнопка имеет правильный title expect(screen.getByTitle("Show Browser")).toBeInTheDocument() }) it("should call toggleBrowserVisibility when button is clicked", () => { // Создаем мок для toggleBrowserVisibility const toggleBrowserVisibilityMock = vi.fn() // Мокаем useUserSettings vi.mocked(useUserSettings).mockReturnValue({ isBrowserVisible: true, toggleBrowserVisibility: toggleBrowserVisibilityMock, } as any) // Рендерим компонент render() // Кликаем на кнопку act(() => { act(() => { fireEvent.click(screen.getByTitle("Hide Browser")) }) }) // Проверяем, что toggleBrowserVisibility был вызван expect(toggleBrowserVisibilityMock).toHaveBeenCalledTimes(1) }) })