// src/providers/AppProviders.test.tsx
import React from 'react';
import { render, screen } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { AppProviders } from './AppProviders';
// Mock all the providers to avoid their side effects and isolate AppProviders logic.
// We render a simple div with a data-testid for each to verify nesting.
vi.mock('./ModalProvider', () => ({
ModalProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}));
vi.mock('./AuthProvider', () => ({
AuthProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}));
vi.mock('./FlyersProvider', () => ({
FlyersProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}));
vi.mock('./MasterItemsProvider', () => ({
MasterItemsProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}));
vi.mock('./UserDataProvider', () => ({
UserDataProvider: ({ children }: { children: React.ReactNode }) => (
{children}
),
}));
describe('AppProviders', () => {
it('renders children correctly', () => {
render(
Test Child
,
);
expect(screen.getByTestId('test-child')).toBeInTheDocument();
expect(screen.getByText('Test Child')).toBeInTheDocument();
});
it('renders providers in the correct nesting order', () => {
render(
Test Child
,
);
const modalProvider = screen.getByTestId('modal-provider');
const authProvider = screen.getByTestId('auth-provider');
const flyersProvider = screen.getByTestId('flyers-provider');
const masterItemsProvider = screen.getByTestId('master-items-provider');
const userDataProvider = screen.getByTestId('user-data-provider');
const child = screen.getByTestId('test-child');
// Verify nesting structure: Modal -> Auth -> Flyers -> MasterItems -> UserData -> Child
expect(modalProvider).toContainElement(authProvider);
expect(authProvider).toContainElement(flyersProvider);
expect(flyersProvider).toContainElement(masterItemsProvider);
expect(masterItemsProvider).toContainElement(userDataProvider);
expect(userDataProvider).toContainElement(child);
});
});