import { render, screen } from '@testing-library/react'; import React from 'react'; import { describe, expect, it } from 'vitest'; import { MdDescriptionList, MdDescriptionListItem } from '../MdDescriptionList'; describe('MdDescriptionList', () => { describe('rendering', () => { it('renders a description list (dl) element', () => { const { container } = render( John , ); expect(container.querySelector('dl')).toBeInTheDocument(); }); it('renders children', () => { render( John Doe , ); expect(screen.getByText('Name')).toBeInTheDocument(); expect(screen.getByText('John Doe')).toBeInTheDocument(); }); it('renders multiple items', () => { render( John john@example.com 123-456-7890 , ); expect(screen.getByText('Name')).toBeInTheDocument(); expect(screen.getByText('Email')).toBeInTheDocument(); expect(screen.getByText('Phone')).toBeInTheDocument(); }); }); describe('narrow mode', () => { it('applies narrow class when narrow is true', () => { const { container } = render( John , ); expect(container.querySelector('.md-description-list--narrow')).toBeInTheDocument(); }); it('does not apply narrow class by default', () => { const { container } = render( John , ); expect(container.querySelector('.md-description-list--narrow')).not.toBeInTheDocument(); }); }); describe('props forwarding', () => { it('merges custom className', () => { const { container } = render( John , ); expect(container.querySelector('.md-description-list')).toHaveClass('custom-class'); }); }); }); describe('MdDescriptionListItem', () => { describe('rendering', () => { it('renders dt (term) and dd (description) elements', () => { const { container } = render( Value , ); expect(container.querySelector('dt')).toBeInTheDocument(); expect(container.querySelector('dd')).toBeInTheDocument(); }); it('renders label in dt', () => { render( john123 , ); expect(screen.getByText('Username').tagName).toBe('DT'); }); it('renders children in dd', () => { render( john123 , ); expect(screen.getByText('john123').tagName).toBe('DD'); }); it('renders label as ReactNode', () => { render( Bold}>Value , ); expect(screen.getByTestId('bold-label')).toBeInTheDocument(); }); it('renders children as ReactNode', () => { render( Click here , ); expect(screen.getByTestId('link')).toBeInTheDocument(); }); it('renders array of children', () => { render( {['React', 'TypeScript', 'CSS'].map(tag => { return ( {tag} ); })} , ); expect(screen.getByTestId('tag-React')).toBeInTheDocument(); expect(screen.getByTestId('tag-TypeScript')).toBeInTheDocument(); expect(screen.getByTestId('tag-CSS')).toBeInTheDocument(); }); }); });