// @vitest-environment jsdom import { describe, expect, it, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom/vitest'; import { ViewToggle } from '../ViewToggle'; describe('ViewToggle', () => { it('renders nothing when only one view is available (adaptive)', () => { const { container } = render( {}} />, ); expect(container.firstChild).toBeNull(); }); it('renders nothing when the renderer offers no views', () => { const { container } = render( {}} />, ); expect(container.firstChild).toBeNull(); }); it('renders both labels when preview and raw are available', () => { render( {}} />, ); expect(screen.getByRole('tab', { name: 'Preview' })).toBeInTheDocument(); expect(screen.getByRole('tab', { name: 'Raw' })).toBeInTheDocument(); }); it('marks the active view as aria-selected', () => { render( {}} />, ); expect(screen.getByRole('tab', { name: 'Raw' })).toHaveAttribute( 'aria-selected', 'true', ); expect(screen.getByRole('tab', { name: 'Preview' })).toHaveAttribute( 'aria-selected', 'false', ); }); it('fires onChange with the clicked view', () => { const onChange = vi.fn(); render( , ); fireEvent.click(screen.getByRole('tab', { name: 'Raw' })); expect(onChange).toHaveBeenCalledExactlyOnceWith('raw'); }); it('stops click propagation so toggle clicks do not collapse the parent Section', () => { // The toggle lives inside the Section header, which is itself a //