/* @vitest-environment jsdom */ import { fireEvent, render, screen } from '@testing-library/react'; import { expect, test, vi } from 'vitest'; import { PlatformToggleRow } from './PlatformToggleRow'; test('renders checkbox toggle row and reports checked value', () => { const onChange = vi.fn(); render( , ); const checkbox = screen.getByRole('checkbox', { name: '自由输入' }); fireEvent.click(checkbox); expect(onChange).toHaveBeenCalledWith(true); expect(screen.getByText('自由输入').closest('label')?.className).toContain( 'bg-white/74', ); }); test('renders disabled checkbox row', () => { render(); const checkbox = screen.getByRole('checkbox', { name: '玩家可见' }); expect(checkbox).toHaveProperty('disabled', true); expect(screen.getByText('玩家可见').closest('label')?.className).toContain( 'opacity-60', ); }); test('renders status row without checkbox', () => { render( , ); expect(screen.queryByRole('checkbox')).toBeNull(); expect(screen.getByText('开启').className).toContain( 'bg-[var(--platform-neutral-bg)]', ); expect(screen.getByText('文本模式').closest('div')?.className).toContain( 'bg-white/78', ); }); test('renders clickable status row as button', () => { const onClick = vi.fn(); render( , ); fireEvent.click(screen.getByRole('button', { name: /文本模式/u })); expect(onClick).toHaveBeenCalledTimes(1); expect(screen.getByText('关闭')).toBeTruthy(); }); test('keeps icon and local classes', () => { render( } className="custom-row" labelClassName="custom-label" />, ); expect(screen.getByTestId('toggle-icon')).toBeTruthy(); expect(screen.getByText('文本模式').closest('label')?.className).toContain( 'custom-row', ); expect(screen.getByText('文本模式').parentElement?.className).toContain( 'custom-label', ); });