刘光辉
5 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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('每个下拉选项');
  });
});