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();
});
});
});