刘光辉
7 小时以前 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
import { describe, expect, it } from 'vitest';
 
import {
  buildFormulaBindingRequest,
  formulaVersionOptions,
  parameterBindingCandidates,
  resultBindingCandidates,
} from '../../src/domain/formula-mapping';
import type { FormulaBindingCandidate } from '../../src/domain/formula-mapping';
 
const bindings: FormulaBindingCandidate[] = [
  { id: 'decimal', controlRole: 'PRIMARY', status: 'ACTIVE', fieldDataType: 'DECIMAL', readSource: 'NONE', writeTarget: 'ELN_RECORD', batchMode: 'RECORD_PRIVATE' },
  { id: 'text', controlRole: 'PRIMARY', status: 'ACTIVE', fieldDataType: 'TEXT', readSource: 'NONE', writeTarget: 'ELN_RECORD', batchMode: 'RECORD_PRIVATE' },
  { id: 'reference', controlRole: 'REFERENCE', status: 'ACTIVE', fieldDataType: 'DECIMAL', readSource: 'NONE', writeTarget: 'ELN_RECORD', batchMode: 'RECORD_PRIVATE' },
  { id: 'disabled', controlRole: 'PRIMARY', status: 'CANCELLED', fieldDataType: 'DECIMAL', readSource: 'NONE', writeTarget: 'ELN_RECORD', batchMode: 'RECORD_PRIVATE' },
  { id: 'readonly', controlRole: 'PRIMARY', status: 'ACTIVE', fieldDataType: 'DECIMAL', readSource: 'LIMS_TASK', writeTarget: 'ELN_RECORD', batchMode: 'RECORD_PRIVATE' },
];
 
describe('formula mapping rules', () => {
  it('只允许启用公式的当前 PUBLISHED 与任意 PRE_RELEASE 新建映射,历史发布版本只读展示', () => {
    expect(formulaVersionOptions([
      { id: 'current', formulaEnabled: true, isCurrent: true, status: 'PUBLISHED' },
      { id: 'pre', formulaEnabled: true, isCurrent: false, status: 'PRE_RELEASE' },
      { id: 'historic', formulaEnabled: true, isCurrent: false, status: 'PUBLISHED' },
      { id: 'disabled', formulaEnabled: false, isCurrent: true, status: 'PUBLISHED' },
    ])).toEqual([
      { id: 'current', risk: false, selectable: true },
      { id: 'pre', risk: true, selectable: true },
      { id: 'historic', risk: false, selectable: false },
    ]);
  });
 
  it('槽位只接受类型兼容的 ACTIVE PRIMARY,P3 拒绝集合槽位', () => {
    expect(parameterBindingCandidates('DECIMAL', bindings)).toEqual(['decimal', 'readonly']);
    expect(parameterBindingCandidates('TEXT', bindings)).toEqual(['text']);
    expect(parameterBindingCandidates('DECIMAL_LIST', bindings)).toEqual([]);
  });
 
  it('结果仅接受可写的 ACTIVE PRIMARY 且类型兼容的字段', () => {
    expect(resultBindingCandidates('DECIMAL', bindings)).toEqual(['decimal']);
  });
 
  it('请求体仅发送公式版本、绑定 ID 和操作码', () => {
    expect(buildFormulaBindingRequest({
      formulaVersionId: 'formula-version',
      parameterBindings: { amount: 'decimal' },
      resultBindingId: 'result',
      operationCode: 'reserve-1',
    })).toEqual({
      formulaVersionId: 'formula-version',
      parameterBindings: { amount: 'decimal' },
      resultBindingId: 'result',
      operationCode: 'reserve-1',
    });
  });
});