import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { TreeView, TreeNode } from './tree-view';
import React from 'react';
const testData: TreeNode[] = [
{
id: '1',
label: 'Root 1',
children: [
{ id: '1.1', label: 'Child 1.1' },
{ id: '1.2', label: 'Child 1.2' },
],
},
{
id: '2',
label: 'Root 2',
},
];
describe('TreeView', () => {
it('renders root nodes correctly', () => {
render();
expect(screen.getByText('Root 1')).toBeInTheDocument();
expect(screen.getByText('Root 2')).toBeInTheDocument();
});
it('does not show children by default', () => {
render();
expect(screen.queryByText('Child 1.1')).not.toBeInTheDocument();
});
it('expands nodes on click', () => {
render();
const root1 = screen.getByText('Root 1');
fireEvent.click(root1);
expect(screen.getByText('Child 1.1')).toBeInTheDocument();
expect(screen.getByText('Child 1.2')).toBeInTheDocument();
});
it('calls onNodeClick when a node is clicked', () => {
const onNodeClick = vi.fn();
render();
fireEvent.click(screen.getByText('Root 2'));
expect(onNodeClick).toHaveBeenCalledWith(testData[1]);
});
it('renders expanded nodes if defaultExpanded is provided', () => {
render();
expect(screen.getByText('Child 1.1')).toBeInTheDocument();
});
});