/* @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',
);
});