import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import { readInitialization, table, seedRows, roleAuthorities } from './sql-baseline-contract-helpers.mjs' const unified = readInitialization() const firstleg = readFileSync(new URL('../firstleg/src/main/resources/db/phase2-inbound-schema.sql', import.meta.url), 'utf8') const iam = readFileSync(new URL('../iam/src/main/resources/db/inbound-hold-permission.sql', import.meta.url), 'utf8') test('统一初始化与模块扣货快照和不可变历史结构一致', () => { const order = table(unified, 'baiyue_firstleg', 'fl_inbound_order') const history = table(unified, 'baiyue_firstleg', 'fl_inbound_hold_record') for (const source of [order + history, firstleg]) { assert.match(source, /current_hold_reason VARCHAR\(1000\)[^\n]*COMMENT '当前扣货理由快照'/i) assert.match(source, /hold_action VARCHAR\(16\)[^\n]*NOT NULL/i) assert.match(source, /reason VARCHAR\(1000\)[^\n]*NOT NULL/i) assert.match(source, /evidence_file_id BIGINT UNSIGNED (?:DEFAULT )?NULL/i) assert.match(source, /KEY idx_hold_inbound_time \(tenant_id,\s*inbound_id,\s*operated_at\)/i) } assert.doesNotMatch(unified, /MODIFY COLUMN current_hold_reason/) }) test('扣货权限保持独立且仅默认授予平台管理员', () => { assert.match(iam, /\(5102032, 0, 'PLATFORM', 'BUTTON', 5102030, 'platform:firstleg:inbound:hold'/) const permission = seedRows(unified, 'iam_permission').find(r => r.permission_code === 'platform:firstleg:inbound:hold') assert.equal(permission.id, '5102032') assert.equal(permission.parent_id, '5102030') assert.equal(permission.permission_type, 'BUTTON') assert.deepEqual(seedRows(unified, 'iam_role_permission').filter(r => r.permission_id === permission.id).map(r => r.role_id), ['4000001']) assert.ok(roleAuthorities(unified, 'PLATFORM_ADMIN').has(permission.permission_code)) for (const role of ['ORDER_OPERATOR', 'WAREHOUSE_OPERATOR', 'WAREHOUSE_TALLY']) { assert.ok(!roleAuthorities(unified, role).has(permission.permission_code), role) } })