// 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); }); });