veza/apps/web/src/components/ui/virtualized-list.test.tsx
senke 9c58ff7818 refactor(web): split VirtualizedList into virtualized-list module
- virtualized-list/types.ts: VirtualizedListProps
- virtualized-list/useInfiniteScroll.ts: useInfiniteScroll hook
- virtualized-list/useScrollPosition.ts: useScrollPosition hook
- virtualized-list/VirtualizedList.tsx: main component
- Re-export from virtualized-list.tsx via ./virtualized-list/index
- Test mock extended with getTotalSize, measureElement, key on virtual items
- 4 tests pass

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 13:55:06 +01:00

86 lines
2.2 KiB
TypeScript

import { render, screen } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { VirtualizedList } from './virtualized-list';
// Mock @tanstack/react-virtual
vi.mock('@tanstack/react-virtual', () => ({
useVirtualizer: () => ({
getVirtualItems: () => [
{ index: 0, key: 0, start: 0, end: 50, size: 50 },
{ index: 1, key: 1, start: 50, end: 100, size: 50 },
],
getTotalSize: () => 150,
measureElement: () => {},
}),
}));
describe('VirtualizedList Component', () => {
const mockItems = [
{ id: '1', name: 'Item 1' },
{ id: '2', name: 'Item 2' },
{ id: '3', name: 'Item 3' },
];
it('renders virtualized list', () => {
render(
<VirtualizedList
items={mockItems}
itemHeight={50}
containerHeight={200}
renderItem={(item) => <div>{item.name}</div>}
/>,
);
expect(screen.getByText('Item 1')).toBeInTheDocument();
expect(screen.getByText('Item 2')).toBeInTheDocument();
});
it('applies custom className', () => {
const { container } = render(
<VirtualizedList
items={mockItems}
itemHeight={50}
containerHeight={200}
renderItem={(item) => <div>{item.name}</div>}
className="custom-class"
/>,
);
expect(container.firstChild).toHaveClass('custom-class');
});
it('calls onScroll when scrolling', () => {
const mockOnScroll = vi.fn();
render(
<VirtualizedList
items={mockItems}
itemHeight={50}
containerHeight={200}
renderItem={(item) => <div>{item.name}</div>}
onScroll={mockOnScroll}
/>,
);
// Scroll event would trigger onScroll
// This is a basic test - actual scroll testing would require more setup
expect(mockOnScroll).toBeDefined();
});
it('calls onItemsRendered when items are rendered', () => {
const mockOnItemsRendered = vi.fn();
render(
<VirtualizedList
items={mockItems}
itemHeight={50}
containerHeight={200}
renderItem={(item) => <div>{item.name}</div>}
onItemsRendered={mockOnItemsRendered}
/>,
);
// onItemsRendered would be called during rendering
expect(mockOnItemsRendered).toBeDefined();
});
});