import * as React from 'react' import { colorTokenCssVar } from '~/src/utils/style' import { render } from '~/src/utils/test' import { StatusBadge } from './StatusBadge' import type { StatusBadgeProps } from './StatusBadge.types' describe('StatusBadge >', () => { const renderStatusBadge = (props?: StatusBadgeProps) => render() it('should render', () => { const { container } = renderStatusBadge() const badge = container.querySelector('div') expect(badge).toBeInTheDocument() }) it('should forward ref', () => { const ref = React.createRef() render() expect(ref.current).toBeInTheDocument() }) it('should receive style', () => { const { container } = renderStatusBadge({ style: { color: 'red' } }) const badge = container.querySelector('div') expect(badge).toHaveStyle('color: red') }) it('should receive class name', () => { const { container } = renderStatusBadge({ className: 'test-class' }) const badge = container.querySelector('div') expect(badge).toHaveClass('test-class') }) it('should apply size class', () => { const { container } = renderStatusBadge({ size: 'm' }) const badge = container.querySelector('div') expect(badge).toHaveClass('size-m') }) describe('iconColor logic', () => { it('should use text-accent-green when online is true', () => { const { container } = renderStatusBadge({ online: true, doNotDisturb: false, }) const badge = container.querySelector('div') const expectedColor = colorTokenCssVar('text-accent-green') expect(badge).toHaveStyle(`--b-status-bg-color: ${expectedColor}`) }) it('should use text-accent-yellow when doNotDisturb is true and online is false', () => { const { container } = renderStatusBadge({ online: false, doNotDisturb: true, }) const badge = container.querySelector('div') const expectedColor = colorTokenCssVar('surface-high') expect(badge).toHaveStyle(`--b-status-bg-color: ${expectedColor}`) }) it('should use fill-neutral-heavy when both online and doNotDisturb are false', () => { const { container } = renderStatusBadge({ online: false, doNotDisturb: false, }) const badge = container.querySelector('div') const expectedColor = colorTokenCssVar('fill-neutral-heavy') expect(badge).toHaveStyle(`--b-status-bg-color: ${expectedColor}`) }) }) describe('backgroundColor logic', () => { it('should use surface-high when doNotDisturb is true', () => { const { container } = renderStatusBadge({ online: false, doNotDisturb: true, }) const badge = container.querySelector('div') const expectedColor = colorTokenCssVar('surface-high') expect(badge).toHaveStyle(`--b-status-bg-color: ${expectedColor}`) }) it('should use iconColor when doNotDisturb is false', () => { const { container } = renderStatusBadge({ online: true, doNotDisturb: false, }) const badge = container.querySelector('div') const expectedColor = colorTokenCssVar('text-accent-green') expect(badge).toHaveStyle(`--b-status-bg-color: ${expectedColor}`) }) }) describe('icon rendering', () => { it('should render icon when doNotDisturb is true', () => { const { container } = renderStatusBadge({ doNotDisturb: true }) const icon = container.querySelector('svg') expect(icon).toBeInTheDocument() }) it('should not render icon when doNotDisturb is false', () => { const { container } = renderStatusBadge({ doNotDisturb: false }) const icon = container.querySelector('svg') expect(icon).not.toBeInTheDocument() }) it('should use xxxs icon size when size is m and doNotDisturb is true', () => { const { container } = renderStatusBadge({ size: 'm', doNotDisturb: true }) const icon = container.querySelector('svg') expect(icon).toBeInTheDocument() }) it('should use xs icon size when size is l and doNotDisturb is true', () => { const { container } = renderStatusBadge({ size: 'l', doNotDisturb: true }) const icon = container.querySelector('svg') expect(icon).toBeInTheDocument() }) }) })