import { describe, it, expect, beforeEach, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import { ThemeProvider } from '@/components/theme-provider'; import { AppShell } from '@/components/layout/AppShell'; import { useAppStore } from '@/stores/app-store'; // Mock react-resizable-panels for jsdom environment vi.mock('@/components/ui/resizable', () => ({ ResizablePanelGroup: ({ children, direction, onLayout }: any) => (
{children}
), ResizablePanel: ({ children, defaultSize, minSize, maxSize }: any) => (
{children}
), ResizableHandle: () =>
, })); describe('AppShell', () => { beforeEach(() => { localStorage.clear(); useAppStore.setState({ sidebarVisible: true, previewVisible: true, zenMode: false }); }); it('renders all shell surfaces when sidebar and preview are visible', () => { render( ); expect(screen.getByText(/markdownconverter/i)).toBeInTheDocument(); expect(screen.getByText(/no files open/i)).toBeInTheDocument(); expect(screen.getByText(/no file selected/i)).toBeInTheDocument(); expect(screen.getByText(/0 words/i)).toBeInTheDocument(); }); it('hides sidebar when sidebarVisible is false', () => { useAppStore.setState({ sidebarVisible: false }); render( ); expect(screen.queryByText(/file tree placeholder/i)).not.toBeInTheDocument(); }); });