import type { LexicalEditor } from 'lexical'
import { LexicalComposer } from '@lexical/react/LexicalComposer'
import { render, screen, waitFor } from '@testing-library/react'
import { CaptureEditorPlugin } from './test-utils'
import TreeViewPlugin from './tree-view'
const { mockTreeView } = vi.hoisted(() => ({
mockTreeView: vi.fn(),
}))
vi.mock('@lexical/react/LexicalTreeView', () => ({
TreeView: (props: unknown) => {
mockTreeView(props)
return
},
}))
describe('TreeViewPlugin', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('should render lexical tree view with expected classes and current editor', async () => {
let editor: LexicalEditor | null = null
render(
{
throw error
},
}}
>
{
editor = value
}}
/>
,
)
await waitFor(() => {
expect(editor).not.toBeNull()
})
expect(screen.getByTestId('lexical-tree-view')).toBeInTheDocument()
const firstCallProps = mockTreeView.mock.calls[0][0] as Record
expect(firstCallProps.editor).toBe(editor)
expect(firstCallProps.viewClassName).toBe('tree-view-output')
expect(firstCallProps.treeTypeButtonClassName).toBe('debug-treetype-button')
expect(firstCallProps.timeTravelPanelClassName).toBe('debug-timetravel-panel')
expect(firstCallProps.timeTravelButtonClassName).toBe('debug-timetravel-button')
expect(firstCallProps.timeTravelPanelSliderClassName).toBe('debug-timetravel-panel-slider')
expect(firstCallProps.timeTravelPanelButtonClassName).toBe('debug-timetravel-panel-button')
})
})