import { RenderOptions, render } from "@testing-library/react"
import { ReactElement, ReactNode } from "react"
import { ChatProvider } from "@/features/ai-chat/services/chat-provider"
import { AppProvider } from "@/features/app-state/services/app-provider"
import { BrowserStateProvider } from "@/features/browser/services/browser-state-provider"
import { ThemeProvider } from "@/features/media-studio/components/top-bar/theme/theme-context"
import { ModalProvider } from "@/features/modals/services/modal-provider"
import { ProjectSettingsProvider } from "@/features/project-settings"
import { ResourcesProvider } from "@/features/resources"
import { TimelineProvider } from "@/features/timeline/services/timeline-provider"
import { UserSettingsProvider } from "@/features/user-settings"
import { PlayerProvider } from "@/features/video-player/services/player-provider"
import { I18nProvider } from "@/i18n/services/i18n-provider"
// ✅ Базовые провайдеры (минимум для большинства компонентов)
export const BaseProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для медиа компонентов
export const MediaProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для видеоплеера
export const PlayerProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для Timeline
export const TimelineProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для модалов
export const ModalProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для чата
export const ChatProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
const TemplateProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Провайдеры для браузера (субтитры, эффекты и т.д.)
export const BrowserProviders = ({ children }: { children: ReactNode }) => {
return (
{children}
)
}
// ✅ Специализированные функции рендеринга
export const renderWithBase = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: BaseProviders, ...options })
}
export const renderWithMedia = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: MediaProviders, ...options })
}
export const renderWithPlayer = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: PlayerProviders, ...options })
}
export const renderWithTimeline = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: TimelineProviders, ...options })
}
export const renderWithModal = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: ModalProviders, ...options })
}
export const renderWithChat = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: ChatProviders, ...options })
}
export const renderWithTemplates = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: TemplateProviders, ...options })
}
export const renderWithBrowser = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: BrowserProviders, ...options })
}
// 🎯 Умная функция рендеринга (по умолчанию базовые провайдеры)
const customRender = (ui: ReactElement, options?: Omit) => {
return render(ui, { wrapper: BaseProviders, ...options })
}
// Реэкспортируем только то, что нам нужно
export { fireEvent, screen, waitFor, within } from "@testing-library/react"
// Переопределение функции render (теперь с базовыми провайдерами)
export { customRender as render }
// Алиас для совместимости с существующими тестами
export { renderWithTemplates as renderWithProviders }
// Экспорт wrapper для использования в renderHook
export { BaseProviders as wrapper }