import { act } from "@testing-library/react"
import { describe, expect, it, vi } from "vitest"
import { renderWithBase, screen } from "@/test/test-utils"
import { NoFiles } from "../../components/no-files"
describe("NoFiles", () => {
it("должен рендериться для типа media", () => {
renderWithBase()
expect(screen.getByText("Медиафайлы не найдены")).toBeInTheDocument()
expect(screen.getByText("Добавьте видео, аудио или фото файлы для работы с проектом")).toBeInTheDocument()
expect(screen.getByText("/public/media/")).toBeInTheDocument()
})
it("должен рендериться для типа music", () => {
renderWithBase()
expect(screen.getByText("Музыкальные файлы не найдены")).toBeInTheDocument()
expect(screen.getByText("Добавьте музыку и звуковые эффекты для озвучивания проекта")).toBeInTheDocument()
expect(screen.getByText("/public/music/")).toBeInTheDocument()
})
it("должен рендериться для типа effects", () => {
renderWithBase()
expect(screen.getByText("Эффекты не найдены")).toBeInTheDocument()
expect(screen.getByText("Добавьте видеоэффекты для улучшения ваших клипов")).toBeInTheDocument()
expect(screen.getByText("/public/effects/")).toBeInTheDocument()
})
it("должен рендериться для типа filters", () => {
renderWithBase()
expect(screen.getByText("Фильтры не найдены")).toBeInTheDocument()
expect(screen.getByText("Добавьте цветовые фильтры и коррекцию для видео")).toBeInTheDocument()
expect(screen.getByText("/public/filters/")).toBeInTheDocument()
})
it("должен показывать кнопку импорта когда передан onImport", () => {
const mockImport = vi.fn()
renderWithBase()
const importButton = screen.getByText("Импортировать медиафайлы")
expect(importButton).toBeInTheDocument()
})
it("должен вызывать onImport при клике на кнопку", () => {
const mockImport = vi.fn()
renderWithBase()
const importButton = screen.getByText("Импортировать медиафайлы")
act(() => {
act(() => {
importButton.click()
})
})
expect(mockImport).toHaveBeenCalledTimes(1)
})
it("не должен показывать кнопку импорта когда onImport не передан", () => {
renderWithBase()
expect(screen.queryByText("Импортировать медиафайлы")).not.toBeInTheDocument()
})
it("должен показывать поддерживаемые форматы для media", () => {
renderWithBase()
expect(screen.getByText("Поддерживаемые форматы:")).toBeInTheDocument()
expect(screen.getByText("Видео: MP4, MOV, AVI, MKV, WEBM, INSV (360°)")).toBeInTheDocument()
expect(screen.getByText("Аудио: MP3, WAV, AAC, ALAC, OGG, FLAC")).toBeInTheDocument()
})
it("должен показывать правильные форматы для music", () => {
renderWithBase()
expect(screen.getByText("MP3, WAV, AAC, ALAC, OGG, FLAC")).toBeInTheDocument()
})
it("должен применять переданный className", () => {
renderWithBase()
// Проверяем что className применился к основному контейнеру
const container = screen.getByText("Медиафайлы не найдены").closest(".custom-class")
expect(container).toBeInTheDocument()
})
it("должен показывать правильную иконку для каждого типа", () => {
const { rerender } = renderWithBase()
expect(screen.getByTestId("video-icon")).toBeInTheDocument()
act(() => {
rerender()
})
expect(screen.getByTestId("music-icon")).toBeInTheDocument()
act(() => {
rerender()
})
expect(screen.getByTestId("sparkles-icon")).toBeInTheDocument()
})
})