import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { describe, expect, it, vi } from 'vitest' import { SkeletonContainer, SkeletonPoint, SkeletonRectangle, SkeletonRow, } from './index' describe('Skeleton Components', () => { describe('Individual Components', () => { it('should forward attributes and render children in SkeletonContainer', () => { render( Content , ) const element = screen.getByTestId('container') expect(element).toHaveClass('flex', 'flex-col', 'custom-container') expect(screen.getByText('Content')).toBeInTheDocument() }) it('should forward attributes and render children in SkeletonRow', () => { render( Row Content , ) const element = screen.getByTestId('row') expect(element).toHaveClass('flex', 'items-center', 'custom-row') expect(screen.getByText('Row Content')).toBeInTheDocument() }) it('should apply base skeleton styles to SkeletonRectangle', () => { render() const element = screen.getByTestId('rect') expect(element).toHaveClass('h-2', 'bg-text-quaternary', 'opacity-20', 'w-10') }) it('should render the separator character correctly in SkeletonPoint', () => { render() const element = screen.getByTestId('point') expect(element).toHaveTextContent('·') expect(element).toHaveClass('text-text-quaternary') }) }) describe('Composition & Layout', () => { it('should render a full skeleton structure accurately', () => { const { container } = render( , ) const wrapper = container.firstChild as HTMLElement expect(wrapper).toHaveClass('main-wrapper') expect(container.querySelector('.rect-1')).toBeInTheDocument() expect(container.querySelector('.rect-2')).toBeInTheDocument() const row = container.querySelector('.flex.items-center') expect(row).toContainElement(container.querySelector('.rect-1') as HTMLElement) expect(row).toHaveTextContent('·') }) }) it('should handle rest props like event listeners', async () => { const onClick = vi.fn() const user = userEvent.setup() render() const element = screen.getByTestId('clickable') await user.click(element) expect(onClick).toHaveBeenCalledTimes(1) }) })