Files
2026-07-13 19:57:46 +08:00

89 lines
2.4 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const {
validateTaskEnvelope,
} = require('../erp_task_contract');
test('normalizes a ready team-single task to erp-task-v1', () => {
const result = validateTaskEnvelope({
status: 'ready',
operation: 'create_order',
route: 'team_single',
task: {
operation: 'create_order',
route: 'team_single',
fields: { productName: '遇见老挝' },
originalText: '团队-单个下单',
},
});
assert.equal(result.valid, true);
assert.equal(result.task.schemaVersion, 'erp-task-v1');
});
test('rejects create tasks without a route', () => {
const result = validateTaskEnvelope({
status: 'ready',
operation: 'create_order',
task: { operation: 'create_order', fields: {} },
});
assert.equal(result.valid, false);
assert.equal(result.status, 'invalid_task');
assert.match(result.violations.join('\n'), /route/i);
});
test('rejects update tasks without an identifier', () => {
const result = validateTaskEnvelope({
status: 'ready',
operation: 'update_order',
task: { operation: 'update_order', updatePlan: { status: 'ready', actions: [] } },
});
assert.equal(result.valid, false);
assert.match(result.violations.join('\n'), /identifier/i);
});
test('rejects unsupported export types', () => {
const result = validateTaskEnvelope({
status: 'ready',
operation: 'export_confirmation',
task: {
operation: 'export_confirmation',
identifier: 'LW-270520A-A',
exportTypes: ['unknown-artifact'],
},
});
assert.equal(result.valid, false);
assert.match(result.violations.join('\n'), /exportTypes/i);
});
test('normalizes legacy confirmation export aliases', () => {
const result = validateTaskEnvelope({
status: 'ready',
operation: 'export_confirmation',
task: {
operation: 'export_confirmation',
identifier: 'D14079',
exportTypes: ['confirmation'],
},
});
assert.equal(result.valid, true);
assert.deepEqual(result.task.exportTypes, ['xingyou-confirm']);
});
test('accepts a non-ready adapter result without making it executable', () => {
const result = validateTaskEnvelope({
status: 'needs_clarification',
route: 'team_single',
task: null,
});
assert.equal(result.valid, false);
assert.equal(result.executable, false);
assert.equal(result.status, 'needs_clarification');
});