import * as React from 'react';
import { render, screen } from '@testing-library/react';
import { Badge } from '../Badge';
import { ComponentClassNames } from '../../shared';
describe('Badge:', () => {
const badgeText = 'Badge primitive';
it('can render badge variations', async () => {
render(
Info
Error
Warning
Success
Default
);
const info = await screen.findByTestId('info');
const error = await screen.findByTestId('error');
const warning = await screen.findByTestId('warning');
const success = await screen.findByTestId('success');
const defaultAlert = await screen.findByTestId('default');
expect(info.dataset['variation']).toBe('info');
expect(info.classList).toContain(`${ComponentClassNames['Badge']}--info`);
expect(error.dataset['variation']).toBe('error');
expect(error.classList).toContain(`${ComponentClassNames['Badge']}--error`);
expect(warning.dataset['variation']).toBe('warning');
expect(warning.classList).toContain(
`${ComponentClassNames['Badge']}--warning`
);
expect(success.dataset['variation']).toBe('success');
expect(success.classList).toContain(
`${ComponentClassNames['Badge']}--success`
);
expect(defaultAlert.dataset['variation']).toBe(undefined);
});
it('can render badge sizes', async () => {
render(
Small
Large
);
const small = await screen.findByTestId('small');
const large = await screen.findByTestId('large');
expect(small.classList).toContain(`${ComponentClassNames['Badge']}--small`);
expect(large.classList).toContain(`${ComponentClassNames['Badge']}--large`);
});
it('can apply styling via props', async () => {
render(
{badgeText}
);
const badge = await screen.findByText(badgeText);
expect(badge.dataset['variation']).toBe('success');
expect(badge.dataset['size']).toBe('large');
});
it('can apply a custom className', async () => {
render({badgeText});
const badge = await screen.findByText(badgeText);
expect(badge.classList.contains('custom-badge')).toBe(true);
expect(badge.classList.contains(ComponentClassNames.Badge)).toBe(true);
});
it('should forward ref to DOM element', async () => {
const ref = React.createRef();
render({badgeText});
await screen.findByText(badgeText);
expect(ref.current?.nodeName).toBe('SPAN');
expect(ref.current?.innerHTML).toBe(badgeText);
});
it('can render any arbitrary data-* attribute', async () => {
render(
{badgeText}
);
const badge = await screen.findByTestId('dataTest');
expect(badge.dataset['demo']).toBe('true');
});
});