import * as React from 'react'
import { colorTokenCssVar } from '~/src/utils/style'
import { render } from '~/src/utils/test'
import { Status } from './Status'
import type { StatusProps } from './Status.types'
describe('Status >', () => {
const renderStatus = (props: StatusProps) => render()
it('should render', () => {
const { container } = renderStatus({ type: 'online' })
const status = container.querySelector('div')
expect(status).toBeInTheDocument()
})
it('should forward ref', () => {
const ref = React.createRef()
render(
)
expect(ref.current).toBeInTheDocument()
})
it('should apply size class', () => {
const { container } = renderStatus({ type: 'online', size: 'm' })
const status = container.querySelector('div')
expect(status).toHaveClass('size-m')
})
describe('icon rendering', () => {
it('should render icon for online-crescent type', () => {
const { container } = renderStatus({ type: 'online-crescent' })
const icon = container.querySelector('svg')
expect(icon).toBeInTheDocument()
})
it('should render icon for offline-crescent type', () => {
const { container } = renderStatus({ type: 'offline-crescent' })
const icon = container.querySelector('svg')
expect(icon).toBeInTheDocument()
})
it('should render icon for lock type', () => {
const { container } = renderStatus({ type: 'lock' })
const icon = container.querySelector('svg')
expect(icon).toBeInTheDocument()
})
it('should not render icon for online type', () => {
const { container } = renderStatus({ type: 'online' })
const icon = container.querySelector('svg')
expect(icon).not.toBeInTheDocument()
})
it('should not render icon for offline type', () => {
const { container } = renderStatus({ type: 'offline' })
const icon = container.querySelector('svg')
expect(icon).not.toBeInTheDocument()
})
})
describe('backgroundColor logic', () => {
it('should use surface-high when type has icon', () => {
const { container } = renderStatus({ type: 'online-crescent' })
const status = container.querySelector('div')
const expectedColor = colorTokenCssVar('surface-high')
expect(status).toHaveStyle(`--b-status-bg-color: ${expectedColor}`)
})
it('should use statusColor when type does not have icon', () => {
const { container } = renderStatus({ type: 'online' })
const status = container.querySelector('div')
const expectedColor = colorTokenCssVar('text-accent-green')
expect(status).toHaveStyle(`--b-status-bg-color: ${expectedColor}`)
})
})
})