import { render, screen } from "@testing-library/react" import { describe, expect, it, vi } from "vitest" import { MediaFile } from "@/features/media/types/media" import { MediaPreview } from "../../../components/preview/media-preview" // Мокаем lucide-react иконки vi.mock("lucide-react", () => ({ Loader2: ({ className }: any) => (
Loading...
), })) // Мокаем cn функцию vi.mock("@/lib/utils", () => ({ cn: (...classes: any[]) => classes.filter(Boolean).join(" "), })) // Мокаем компоненты для разных типов медиа vi.mock("../../../components/preview/video-preview", () => ({ VideoPreview: ({ file, size, showFileName, dimensions, ignoreRatio }: any) => (
Video Preview
), })) vi.mock("../../../components/preview/audio-preview", () => ({ AudioPreview: ({ file, size, showFileName, dimensions }: any) => (
Audio Preview
), })) vi.mock("../../../components/preview/image-preview", () => ({ ImagePreview: ({ file, size, showFileName, dimensions }: any) => (
Image Preview
), })) describe("MediaPreview", () => { // Создаем моки для разных типов файлов const videoFile: MediaFile = { id: "video1", name: "video.mp4", path: "/path/to/video.mp4", isVideo: true, isAudio: false, isImage: false, } const audioFile: MediaFile = { id: "audio1", name: "audio.mp3", path: "/path/to/audio.mp3", isVideo: false, isAudio: true, isImage: false, } const imageFile: MediaFile = { id: "image1", name: "image.jpg", path: "/path/to/image.jpg", isVideo: false, isAudio: false, isImage: true, } it("should render VideoPreview for video files", () => { render() const videoPreview = screen.getByTestId("video-preview") expect(videoPreview).toBeInTheDocument() expect(videoPreview).toHaveAttribute("data-file", "video.mp4") expect(videoPreview).toHaveAttribute("data-size", "200") // Default size expect(videoPreview).toHaveAttribute("data-show-filename", "false") // Default showFileName expect(videoPreview).toHaveAttribute("data-dimensions", "16,9") // Default dimensions expect(videoPreview).toHaveAttribute("data-ignore-ratio", "false") // Default ignoreRatio }) it("should render AudioPreview for audio files", () => { render() const audioPreview = screen.getByTestId("audio-preview") expect(audioPreview).toBeInTheDocument() expect(audioPreview).toHaveAttribute("data-file", "audio.mp3") }) it("should render ImagePreview for image files", () => { render() const imagePreview = screen.getByTestId("image-preview") expect(imagePreview).toBeInTheDocument() expect(imagePreview).toHaveAttribute("data-file", "image.jpg") }) it("should pass custom props to child components", () => { render() const videoPreview = screen.getByTestId("video-preview") expect(videoPreview).toHaveAttribute("data-size", "150") expect(videoPreview).toHaveAttribute("data-show-filename", "true") expect(videoPreview).toHaveAttribute("data-dimensions", "4,3") expect(videoPreview).toHaveAttribute("data-ignore-ratio", "true") }) })