刘光辉
6 小时以前 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import type { TemplateBinding } from '../../src/domain/types';
 
import { describe, expect, it } from 'vitest';
 
import {
  checkboxGroupCodeValid,
  checkboxGroupOptions,
  summarizeCheckboxGroups,
} from '../../src/domain/checkbox-group';
 
function binding(overrides: Partial<TemplateBinding>): TemplateBinding {
  return {
    checkboxGroupCode: 'inspection_result',
    controlAlias: '合格',
    controlConfig: { defaultChecked: false },
    controlRole: 'PRIMARY',
    controlTag: 'eln.field.passed',
    controlType: 'CHECKBOX',
    fieldCode: 'passed',
    fieldId: 'passed-field',
    fieldVersionId: 'passed-version',
    id: 'passed',
    primaryBindingId: null,
    status: 'ACTIVE',
    stepId: 'step-1',
    templateId: 'template',
    version: 1,
    ...overrides,
  };
}
 
describe('checkbox group domain', () => {
  it('validates the persisted group-code contract', () => {
    expect(checkboxGroupCodeValid('inspection_result')).toBe(true);
    expect(checkboxGroupCodeValid('result-1')).toBe(true);
    expect(checkboxGroupCodeValid('')).toBe(false);
    expect(checkboxGroupCodeValid('result code')).toBe(false);
  });
 
  it('summarizes every live configured member and applies the configured selection bounds', () => {
    const groups = summarizeCheckboxGroups([
      binding({ controlConfig: { defaultChecked: true } }),
      binding({ controlAlias: '不合格', controlConfig: { defaultChecked: true }, fieldCode: 'failed', id: 'failed' }),
      binding({ checkboxGroupCode: 'invalid_members', controlAlias: '只读引用', controlRole: 'REFERENCE', id: 'reference' }),
      binding({ checkboxGroupCode: 'invalid_members', controlAlias: '文本', controlType: 'TEXT', id: 'text' }),
      binding({ checkboxGroupCode: 'cancelled', id: 'cancelled', status: 'CANCELLED' }),
    ], [{ groupCode: 'inspection_result', maxSelected: 2, minSelected: 1, version: 0 }]);
 
    expect(groups.find((group) => group.code === 'inspection_result')?.anomalies).not.toContain('默认勾选数不符合数量规则');
    expect(groups.find((group) => group.code === 'invalid_members')?.anomalies).toContain('包含不允许入组的字段');
    expect(groups.some((group) => group.code === 'cancelled')).toBe(false);
  });
 
  it('reports default counts outside arbitrary minimum and maximum bounds', () => {
    const bindings = [
      binding({ controlConfig: { defaultChecked: true } }),
      binding({ controlAlias: '不合格', controlConfig: { defaultChecked: true }, fieldCode: 'failed', id: 'failed' }),
    ];
 
    expect(summarizeCheckboxGroups(bindings, [
      { groupCode: 'inspection_result', maxSelected: 1, minSelected: 0, version: 0 },
    ])[0]?.anomalies).toContain('默认勾选数不符合数量规则');
    expect(summarizeCheckboxGroups(bindings.map((item) => ({ ...item, controlConfig: { defaultChecked: false } })), [
      { groupCode: 'inspection_result', maxSelected: null, minSelected: 1, version: 0 },
    ])[0]?.anomalies).toContain('默认勾选数不符合数量规则');
  });
 
  it('offers only eligible groups from the requested step or repeat scope', () => {
    const bindings = [
      binding({}),
      binding({ controlAlias: '不合格', fieldCode: 'failed', id: 'failed', status: 'PENDING' }),
      binding({ checkboxGroupCode: 'other_step', id: 'other-step', stepId: 'step-2' }),
      binding({ checkboxGroupCode: 'row_result', controlRole: 'REPEAT', id: 'repeat', repeatGroupCode: 'results' }),
    ];
 
    expect(checkboxGroupOptions(bindings, { stepId: 'step-1' })).toEqual([
      { label: 'inspection_result(2 个成员)', value: 'inspection_result' },
    ]);
    expect(checkboxGroupOptions(bindings, { repeatGroupCode: 'results' })).toEqual([
      { label: 'row_result(1 个成员)', value: 'row_result' },
    ]);
  });
});