import { render, screen } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { Text } from './Text'; describe('Text', () => { it('renders default body variant as a
with body classes', () => {
render(
', () => {
render(npm install pickle-ui );
const el = screen.getByText('npm install pickle-ui');
expect(el.tagName.toLowerCase()).toBe('code');
expect(el).toHaveClass('font-mono');
});
it('overrides the element via the as prop while keeping data-slot and variant classes', () => {
render(
Page title
,
);
const el = screen.getByText('Page title');
expect(el.tagName.toLowerCase()).toBe('h1');
expect(el).toHaveAttribute('data-slot', 'text');
expect(el).toHaveClass('text-2xl');
expect(el).toHaveClass('font-semibold');
});
it('merges className without replacing variant classes', () => {
render(Merged classes );
const el = screen.getByText('Merged classes');
expect(el).toHaveClass('text-sm');
expect(el).toHaveClass('custom-class');
});
it('tone="muted" adds text-muted-foreground and is orthogonal to variant', () => {
render(
Muted body
,
);
const muted = screen.getByText('Muted body');
expect(muted).toHaveClass('text-muted-foreground');
render(
Muted heading
,
);
const mutedHeading = screen.getByText('Muted heading');
expect(mutedHeading).toHaveClass('text-muted-foreground');
expect(mutedHeading).toHaveClass('text-xl');
expect(mutedHeading.tagName.toLowerCase()).toBe('h3');
});
});