import test from 'node:test' import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' test('同柜不可拆组HTTP验收锁定公开接口与防绕过矩阵', async () => { const source = await readFile(new URL('./coload-groups.mjs', import.meta.url), 'utf8') for (const fragment of [ '/api/platform/v1/first-leg/coload-groups', '/api/platform/v1/first-leg/coload-groups/by-inbound-code/', '/group-assignments', '/inbound-assignments', '/plans/by-booking/', '创建同键同载荷精确重放', '创建同键异载荷返回并发冲突', '不同目的仓港仍可创建同柜不可拆组', '跨国内仓或跨渠道创建整组被拒绝且不落组', '业务摘要只返回状态、成员数和完整入仓码', '/recommend', '第二柜智能推荐请求成功', '智能推荐不会只取同柜组部分成员或部分箱数', '智能推荐全不取后整组仍ACTIVE', '组成员不能单独调整箱数', '组成员不能单独删除', '整组原子移除', '容量竞争时智能推荐不因整组容量失败', '容量竞争时同柜组只能整组全取或全不取', '推荐候选包含当前目标同柜组且成员身份精确', 'ACTIVE同柜组整组取消成功', '同柜组PDA原子批次记录短拣异常', '同柜组任一成员短拣时完成被拒绝', '短拣完成拒绝后任务、父子树和组锁零漂移', '同柜组足量完成命令可靠受理', '足量完成整组已消费、全部入库完成且不生成余量子单', '未成组普通单自动预装不回归', '未成组普通单仍按既有规则生成唯一余量子单', '拆分余量子单仍可与同仓同渠道订单创建同柜组', '拆分身份不影响当前WAIT_SPLIT片段完整纳组', '拆分余量建组不改写既有父子数量事实', '为Admin页面保留ACTIVE未分配跨目的仓组', '页面验收保留组仍为ACTIVE且未锁定', ]) assert.match(source, new RegExp(fragment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))) assert.doesNotMatch(source, /跨仓库渠道或目的仓港创建整组被拒绝/) assert.doesNotMatch(source, /已有父子拆分订单创建同柜组被拒绝/) assert.doesNotMatch(source, /push-preload/) assert.match(source, /import \{ channelGroup \} from '\.\/smart-loading-channel-group\.mjs'/) assert.equal((source.match(/channelGroupCode:\s*channelGroup\(/g) || []).length, 6) })