Files
KArtSell.Aegis/docs/Design/kbx-foundation-v36/tests/unit/kbx-operations.contract.spec.ts
T

28 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import type { KbxWorkItem } from '@kbx/contracts'
function nextActions(item: KbxWorkItem) {
return new Set((item.actions ?? []).map(x => x.kind))
}
describe('KBX operations contract', () => {
it('domain exception can navigate without offering unsafe manual resolution', () => {
const item: KbxWorkItem = {
id: '1', sourceModule: 'WMS', sourceType: 'picking-task', sourceId: 'uuid-p100', referenceNo: 'P-100', sourceScreenId: 'WMS-PICK-001', code: 'PICKING_SHORTAGE',
title: '피킹 수량 부족', severity: 'warning', status: 'open', occurredAt: new Date().toISOString(), ageMinutes: 3, version: 1,
actions: [{ id: 'navigate', label: '원 업무 보기', kind: 'navigate' }],
}
expect(nextActions(item).has('navigate')).toBe(true)
expect(nextActions(item).has('resolve')).toBe(false)
})
it('retry is explicit rather than inferred from the error text', () => {
const item: KbxWorkItem = {
id: '2', sourceModule: 'OMS', sourceType: 'shipment', sourceId: 'uuid-s1', referenceNo: 'S-1', sourceScreenId: 'OMS-ORD-001', code: 'LABEL_FAILED',
title: '송장 발급 실패', severity: 'warning', status: 'claimed', occurredAt: new Date().toISOString(), ageMinutes: 1, version: 2,
actions: [{ id: 'retry', label: '재처리', kind: 'retry' }],
}
expect(nextActions(item)).toEqual(new Set(['retry']))
})
})