/* @vitest-environment jsdom */ import { fireEvent, render, screen } from '@testing-library/react'; import { expect, test, vi } from 'vitest'; import { PlatformToggleRow } from './index'; test('renders a controlled checkbox row and forwards the next value', () => { const onChange = vi.fn(); render( , ); fireEvent.click(screen.getByRole('checkbox', { name: '自由输入' })); expect(onChange).toHaveBeenCalledWith(true); expect(screen.getByText('自由输入').closest('label')?.className).toContain( 'bg-white/74', ); }); test('renders read-only and clickable status variants with custom labels', () => { const onClick = vi.fn(); const { rerender } = render( , ); expect(screen.queryByRole('checkbox')).toBeNull(); expect(screen.getByText('已开启')).toBeTruthy(); expect(screen.getByText('文本模式').closest('div')?.className).toContain( 'bg-white/78', ); rerender( , ); fireEvent.click(screen.getByRole('button', { name: '文本模式 未开启' })); expect(onClick).toHaveBeenCalledTimes(1); }); test('keeps disabled state and visual slots', () => { render( } className="custom-row" labelClassName="custom-label" />, ); expect(screen.getByRole('checkbox', { name: '玩家可见' })).toHaveProperty( 'disabled', true, ); expect(screen.getByTestId('toggle-icon')).toBeTruthy(); expect(screen.getByText('玩家可见').closest('label')?.className).toContain( 'custom-row', ); expect(screen.getByText('玩家可见').parentElement?.className).toContain( 'custom-label', ); });