import { render, screen } from "@testing-library/react"
import { beforeEach, describe, expect, it, vi } from "vitest"
import { UniversalList } from "../../components/universal-list"
// Мокаем зависимости
vi.mock("react-i18next", () => ({
useTranslation: () => ({
t: (key: string) => key,
i18n: { language: "ru" },
}),
}))
vi.mock("@/features/browser/services/browser-state-provider", () => ({
useBrowserState: () => ({
currentTabSettings: {
searchQuery: "",
showFavoritesOnly: false,
viewMode: "grid",
sortBy: "name",
filterType: "all",
groupBy: null,
sortOrder: "asc",
previewSizeIndex: 1,
},
}),
}))
vi.mock("@/features/media/utils/preview-sizes", () => ({
PREVIEW_SIZES: [
{ key: "small", width: 160, height: 90 },
{ key: "medium", width: 240, height: 135 },
{ key: "large", width: 320, height: 180 },
],
}))
vi.mock("../../utils", () => ({
filterItems: (items: any[]) => items,
sortItems: (items: any[]) => items,
groupItems: (_items: any[]) => [],
}))
vi.mock("../../components/content-group", () => ({
ContentGroup: () =>
Content Group
,
}))
vi.mock("../../components/no-files", () => ({
NoFiles: ({ contentType }: any) => No files for {contentType}
,
}))
describe("UniversalList", () => {
const mockAdapter = {
useData: () => ({ items: [], loading: false, error: null }),
getSearchableText: (item: any) => [item.name],
getSortValue: (item: any) => item.name,
matchesFilter: () => true,
isFavorite: () => false,
getGroupValue: () => "default",
favoriteType: "media",
importHandlers: undefined,
PreviewComponent: () => null,
}
beforeEach(() => {
vi.clearAllMocks()
})
describe("Состояния рендеринга", () => {
it("должен показывать индикатор загрузки", () => {
const loadingAdapter = {
...mockAdapter,
useData: () => ({ items: [], loading: true, error: null }),
}
render()
expect(screen.getByText("common.loading")).toBeInTheDocument()
})
it("должен показывать ошибку", () => {
const errorAdapter = {
...mockAdapter,
useData: () => ({
items: [],
loading: false,
error: new Error("Test error"),
}),
}
render()
expect(screen.getByText(/common.error/)).toBeInTheDocument()
expect(screen.getByText(/Test error/)).toBeInTheDocument()
})
it("должен показывать NoFiles когда список пуст", () => {
render()
expect(screen.getByTestId("no-files")).toBeInTheDocument()
})
})
})