import { render, screen } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { Skeleton } from '../skeleton'; describe('Skeleton', () => { it('renders base skeleton with animate-pulse', () => { const { container } = render(); expect(container.firstChild).toHaveClass('animate-pulse'); }); it('base skeleton has aria-hidden', () => { const { container } = render(); expect(container.firstChild).toHaveAttribute('aria-hidden'); }); it('Skeleton.Row renders row placeholder', () => { const { container } = render(); expect(container.firstChild).toHaveAttribute('aria-hidden'); // Should have multiple skeleton blocks expect(container.querySelectorAll('.animate-pulse').length).toBeGreaterThan(0); }); it('Skeleton.Card renders card placeholder', () => { const { container } = render(); expect(container.firstChild).toHaveAttribute('aria-hidden'); }); it('Skeleton.Table renders header and default 5 rows', () => { const { container } = render(); expect(container.firstChild).toHaveAttribute('aria-hidden'); // header + 5 rows = 6 row-like blocks; just check children exist expect(container.children.length).toBeGreaterThan(0); }); it('Skeleton.Table renders custom row count', () => { const { container } = render(); // container.firstChild has header div + 3 SkeletonRow children const el = container.firstChild as HTMLElement; // header + 3 rows expect(el.children.length).toBe(4); }); it('merges custom className on base', () => { render(); expect(screen.getByTestId('sk')).toHaveClass('h-10'); }); });