import { render, screen } from "@testing-library/react"
import { describe, expect, it, vi } from "vitest"
import { Providers } from "../providers"
// Мокаем все провайдеры
vi.mock("@/features/media-studio/services/tauri-mock-provider", () => ({
TauriMockProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/i18n/services/i18n-provider", () => ({
I18nProvider: ({ children }: { children: React.ReactNode }) => {children}
,
}))
vi.mock("next-themes", () => ({
ThemeProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/modals/services/modal-provider", () => ({
ModalProvider: ({ children }: { children: React.ReactNode }) => {children}
,
}))
vi.mock("@/features/app-state/services/app-provider", () => ({
AppProvider: ({ children }: { children: React.ReactNode }) => {children}
,
}))
vi.mock("@/features/browser/services/browser-state-provider", () => ({
BrowserStateProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/project-settings/services/project-settings-provider", () => ({
ProjectSettingsProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/user-settings", () => ({
UserSettingsProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/keyboard-shortcuts", () => ({
ShortcutsProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/resources/services/resources-provider", () => ({
ResourcesProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/timeline/services/timeline-provider", () => ({
TimelineProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
vi.mock("@/features/video-player/services/player-provider", () => ({
PlayerProvider: ({ children }: { children: React.ReactNode }) => {children}
,
}))
vi.mock("@/features/ai-chat/services/chat-provider", () => ({
ChatProvider: ({ children }: { children: React.ReactNode }) => {children}
,
}))
vi.mock("@/features/ai-content-intelligence", () => ({
AIIntelligenceProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}))
describe("Providers", () => {
it("должен рендерить все провайдеры в правильном порядке", () => {
render(
Test Content
,
)
// Проверяем наличие основных провайдеров
expect(screen.getByTestId("tauri-mock-provider")).toBeInTheDocument()
expect(screen.getByTestId("i18n-provider")).toBeInTheDocument()
expect(screen.getByTestId("next-theme-provider")).toBeInTheDocument()
expect(screen.getByTestId("app-provider")).toBeInTheDocument()
expect(screen.getByTestId("browser-state-provider")).toBeInTheDocument()
expect(screen.getByTestId("user-settings-provider")).toBeInTheDocument()
expect(screen.getByTestId("resources-provider")).toBeInTheDocument()
expect(screen.getByTestId("ai-intelligence-provider")).toBeInTheDocument()
// Проверяем что дочерний компонент отрендерился
expect(screen.getByTestId("test-child")).toBeInTheDocument()
expect(screen.getByText("Test Content")).toBeInTheDocument()
})
it("должен правильно вкладывать провайдеры друг в друга", () => {
const { container } = render(
Test
,
)
// Проверяем вложенность некоторых провайдеров
const tauriProvider = container.querySelector('[data-testid="tauri-mock-provider"]')
const themeProvider = container.querySelector('[data-testid="next-theme-provider"]')
const userSettingsProvider = container.querySelector('[data-testid="user-settings-provider"]')
expect(tauriProvider).toBeInTheDocument()
expect(themeProvider).toBeInTheDocument()
expect(userSettingsProvider).toBeInTheDocument()
})
it("должен передавать children через все провайдеры", () => {
const TestComponent = () => Nested Content
render(
,
)
expect(screen.getByTestId("nested-component")).toBeInTheDocument()
expect(screen.getByText("Nested Content")).toBeInTheDocument()
})
})