import { fireEvent, render, screen } from "@testing-library/react" import { beforeEach, describe, expect, it, vi } from "vitest" import { SpeedRampingToggle } from "../../../components/speed-ramping/speed-ramping-toggle" // Mock компонентов vi.mock("@/components/ui/button", () => ({ Button: ({ children, onClick, ...props }: any) => ( ), })) vi.mock("@/components/ui/tooltip", () => ({ TooltipProvider: ({ children }: any) =>
{children}
, Tooltip: ({ children }: any) =>
{children}
, TooltipContent: ({ children }: any) =>
{children}
, TooltipTrigger: ({ children }: any) =>
{children}
, })) // Mock хука speed ramping const mockUseSpeedRamping = { getConfig: vi.fn(), enableSpeedRamping: vi.fn(), disableSpeedRamping: vi.fn(), } vi.mock("../../../hooks/use-speed-ramping", () => ({ useSpeedRamping: () => mockUseSpeedRamping, })) describe("SpeedRampingToggle", () => { const defaultProps = { clipId: "test-clip-1", } beforeEach(() => { vi.clearAllMocks() }) it("показывает неактивное состояние когда speed ramping выключен", () => { mockUseSpeedRamping.getConfig.mockReturnValue(null) render() const button = screen.getByRole("button") expect(button).toBeInTheDocument() // Проверяем tooltip expect(screen.getByText("Enable Speed Ramping")).toBeInTheDocument() expect(screen.getByText("Cmd/Ctrl+Shift+R")).toBeInTheDocument() }) it("показывает активное состояние когда speed ramping включен", () => { mockUseSpeedRamping.getConfig.mockReturnValue({ enabled: true, keyframes: [], maintainPitch: true, minSpeed: 0.1, maxSpeed: 4.0, showGraph: true, graphHeight: 120, graphOpacity: 0.8, }) render() expect(screen.getByText("Disable Speed Ramping")).toBeInTheDocument() }) it("включает speed ramping при клике когда выключен", () => { mockUseSpeedRamping.getConfig.mockReturnValue(null) render() const button = screen.getByRole("button") fireEvent.click(button) expect(mockUseSpeedRamping.enableSpeedRamping).toHaveBeenCalledWith("test-clip-1") }) it("выключает speed ramping при клике когда включен", () => { mockUseSpeedRamping.getConfig.mockReturnValue({ enabled: true, keyframes: [], maintainPitch: true, minSpeed: 0.1, maxSpeed: 4.0, showGraph: true, graphHeight: 120, graphOpacity: 0.8, }) render() const button = screen.getByRole("button") fireEvent.click(button) expect(mockUseSpeedRamping.disableSpeedRamping).toHaveBeenCalledWith("test-clip-1") }) it("применяет дополнительные CSS классы", () => { mockUseSpeedRamping.getConfig.mockReturnValue(null) render() const button = screen.getByRole("button") expect(button).toHaveClass("custom-class") }) })