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