import { render, screen } from "@testing-library/react" import { beforeEach, describe, expect, it, vi } from "vitest" import { CameraPreview } from "../../components/camera-preview" // Мокируем useTranslation vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: (key: string) => key, }), })) describe("CameraPreview", () => { // Создаем ref для видео элемента const videoRef = { current: document.createElement("video") } beforeEach(() => { vi.clearAllMocks() }) it("renders loading state when device is not ready", () => { render() // Проверяем, что отображается сообщение о загрузке expect(screen.getByText("dialogs.cameraCapture.initializingCamera")).toBeInTheDocument() // Проверяем, что видео элемент имеет класс opacity-0 const videoElement = screen.getByTestId("video-element") expect(videoElement).toHaveClass("opacity-0") }) it("renders video element when device is ready", () => { render() // Проверяем, что видео элемент имеет класс opacity-100 const videoElement = screen.getByTestId("video-element") expect(videoElement).toHaveClass("opacity-100") // Проверяем, что сообщение о загрузке не отображается expect(screen.queryByText("dialogs.cameraCapture.initializingCamera")).not.toBeInTheDocument() }) it("shows countdown when showCountdown is true and countdown > 0", () => { render() // Проверяем, что отображается обратный отсчет expect(screen.getByText("3")).toBeInTheDocument() }) it("does not show countdown when showCountdown is false", () => { render() // Проверяем, что обратный отсчет не отображается expect(screen.queryByText("3")).not.toBeInTheDocument() }) it("does not show countdown when countdown is 0", () => { render() // Проверяем, что обратный отсчет не отображается expect(screen.queryByText("0")).not.toBeInTheDocument() }) it("sets correct video attributes", () => { render() // Проверяем атрибуты видео элемента const videoElement = screen.getByTestId("video-element") expect(videoElement).toHaveAttribute("autoplay") expect(videoElement).toHaveAttribute("playsinline") // В React атрибут muted преобразуется в свойство, а не в атрибут expect(videoElement).toHaveProperty("muted", true) // Проверяем стили видео элемента expect(videoElement).toHaveStyle({ display: "block", width: "100%", height: "100%", objectFit: "contain", }) }) })