import { fireEvent, render, screen } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { MDXEditorField } from '../../src/components/MDXEditorField'; describe('MDXEditorField', () => { it('renders label and change handler in editable mode', () => { const onChange = vi.fn(); render( , ); expect(screen.getByText('Content')).toHaveClass('ui-label'); fireEvent.change(screen.getByLabelText('Markdown Editor'), { target: { value: '# Hello' }, }); expect(onChange).toHaveBeenCalledWith('# Hello'); expect(screen.getByLabelText('Markdown Editor')).toHaveAttribute( 'data-class-name', 'light-theme extra-editor', ); }); it('renders preview and disabled classes when disabled', () => { render( , ); const label = screen.getByText('Content'); expect(label).toHaveClass('ui-label-disabled'); expect(screen.getByTestId('md-preview')).toHaveTextContent('Disabled content'); expect(screen.getByTestId('md-preview')).toHaveAttribute('data-class-name', 'dark-theme'); expect(screen.queryByLabelText('Markdown Editor')).not.toBeInTheDocument(); expect(document.querySelector('.post-mdx-editor--disabled')).toBeTruthy(); }); it('renders read-only preview without label when label is omitted', () => { render( , ); expect(screen.queryByText('Content')).not.toBeInTheDocument(); expect(screen.getByTestId('md-preview')).toHaveTextContent('Read only content'); }); it('supports wrapper style/class overrides and error rendering', () => { render( , ); const wrapper = document.querySelector('.editor-wrapper'); expect(wrapper).toHaveClass('post-mdx-editor--enabled'); expect(wrapper).toHaveStyle({ borderWidth: '2px' }); expect(screen.getByText('Content is required')).toHaveClass('ui-error'); }); });