import { buildControlConfig, controlConfigFormValues, dropdownOptionsFromText, validateDropdownOptions } from '../controlConfig';
|
|
import { describe, expect, it } from 'vitest';
|
|
describe('ELN field control configuration', () => {
|
it('maps text settings without exposing JSON to the form', () => {
|
expect(
|
buildControlConfig('TEXT', {
|
controlDefaultValue: '标准品',
|
controlPlaceholder: '请输入供试品名称',
|
}),
|
).toEqual({ defaultValue: '标准品', placeholder: '请输入供试品名称' });
|
});
|
|
it('round-trips dropdown options in one business-readable line per option', () => {
|
const parsed = controlConfigFormValues({
|
defaultValue: 'pass',
|
options: [
|
{ display: '合格', value: 'pass' },
|
{ display: '不合格', value: 'fail' },
|
],
|
placeholder: '请选择结果',
|
});
|
|
expect(parsed.values.controlOptionsText).toBe('合格|pass\n不合格|fail');
|
expect(buildControlConfig('SELECT', parsed.values, parsed.extras)).toEqual({
|
defaultValue: 'pass',
|
options: [
|
{ display: '合格', value: 'pass' },
|
{ display: '不合格', value: 'fail' },
|
],
|
placeholder: '请选择结果',
|
});
|
});
|
|
it('preserves extension settings on an existing draft version', () => {
|
const parsed = controlConfigFormValues({ customSetting: 'keep', placeholder: '旧提示' });
|
|
expect(buildControlConfig('TEXT', { ...parsed.values, controlPlaceholder: '新提示' }, parsed.extras)).toEqual({
|
customSetting: 'keep',
|
placeholder: '新提示',
|
});
|
});
|
|
it('omits stale settings that are not owned by the selected data type', () => {
|
expect(buildControlConfig('DATE', {
|
controlDateFormat: 'yyyy-MM-dd',
|
controlDefaultDate: '2026-09-05',
|
controlPlaceholder: '旧的文本提示',
|
})).toEqual({
|
dateFormat: 'yyyy-MM-dd',
|
defaultValue: '2026-09-05',
|
});
|
});
|
|
it('rejects malformed or insufficient dropdown options', async () => {
|
expect(dropdownOptionsFromText('合格|pass\n不合格|fail')).toEqual([
|
{ display: '合格', value: 'pass' },
|
{ display: '不合格', value: 'fail' },
|
]);
|
await expect(validateDropdownOptions('合格|pass')).rejects.toThrow('请至少填写两个下拉选项');
|
await expect(validateDropdownOptions('合格-pass\n不合格-fail')).rejects.toThrow('每个下拉选项');
|
});
|
});
|