26 lines
1.6 KiB
TypeScript
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)
|
|
}
|
|
})
|