28 lines
1.4 KiB
TypeScript
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']))
|
|
})
|
|
})
|