import { render, screen } from '@testing-library/react'
import { describe, it, expect } from 'vitest'
import { axe } from 'vitest-axe'
import { Badge } from './badge'
describe('Badge', () => {
it('renders as a span by default', () => {
render(New)
const el = screen.getByText('New')
expect(el.tagName).toBe('SPAN')
expect(el).toHaveAttribute('data-slot', 'badge')
})
it('renders as a different element via render prop', () => {
render(}>Link badge)
const el = screen.getByRole('link', { name: 'Link badge' })
expect(el.tagName).toBe('A')
expect(el).toHaveAttribute('href', '/x')
})
it('forwards className alongside variant classes', () => {
render(Hi)
const el = screen.getByText('Hi')
expect(el.className).toContain('my-badge')
expect(el.className).toContain('bg-primary')
})
it('applies size and variant classes', () => {
render(
Err
,
)
const el = screen.getByText('Err')
expect(el.className).toContain('bg-error-muted')
expect(el.className).toContain('h-7')
})
it('exposes state to render callback', () => {
render(
}
>
Done
,
)
const el = screen.getByText('Done')
expect(el).toHaveAttribute('data-test-variant', 'success')
expect(el).toHaveAttribute('data-test-size', 'sm')
})
it('has no accessibility violations', async () => {
const { container } = render(Accessible)
expect(await axe(container)).toHaveNoViolations()
})
})