gongxiangp2/lib/__tests__/workflow-delivery-exemptions.test.ts

26 lines
1.6 KiB
TypeScript

import { applyDeliveryExemption, deliveryExemptWorkflowKeys } from '../workflow-delivery-exemptions'
import type { DingWorkflowDeliveryAssessment } from '../ding-workflow-delivery'
const assessment: DingWorkflowDeliveryAssessment = { status: 'overtime', standardDuration: 7, actualDuration: 9.11, durationUnit: 'day', startedAt: '2026-10-15T05:36:00Z', finishedAt: '2026-10-24T08:20:00Z', startNodeLabel: '分配', endNodeLabel: '审核' }
test('有效记录按整流程去重,与人员和角色无关,保留原始时长且不修改输入', () => {
const keys = deliveryExemptWorkflowKeys({ overtimeExemptions: [
{ workflowKey: 'one', name: '甲', role: 'planner' }, { workflowKey: 'one', name: '乙', role: 'fullCase' },
{ workflowKey: 'disabled', enabled: false }, { workflowKey: ' ' },
] })
expect(Array.from(keys)).toEqual(['one'])
expect(applyDeliveryExemption(assessment, 'one', keys)).toEqual({ ...assessment, status: 'on_time', overtimeExempted: true })
expect(assessment.status).toBe('overtime')
expect(applyDeliveryExemption(assessment, 'disabled', keys)).toBe(assessment)
})
test('未命中、撤销、待计算和已按时结果不改变,也不补齐缺失时间', () => {
const keys = new Set(['one'])
expect(applyDeliveryExemption(assessment, 'other', keys)).toBe(assessment)
expect(applyDeliveryExemption(assessment, 'one', new Set())).toBe(assessment)
for (const status of ['pending', 'on_time'] as const) {
const original = { ...assessment, status, actualDuration: status === 'pending' ? null : 2 }
expect(applyDeliveryExemption(original, 'one', keys)).toBe(original)
}
})