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