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'); });