// 使用独立验证库;不写入运营演示库。 const { execFileSync, execFile } = require('node:child_process'); const assert = require('node:assert/strict'); const args = ['exec', 'danyang-match-postgres', 'psql', '-U', 'postgres', '-d', 'public_id_validation', '-v', 'ON_ERROR_STOP=1', '-At', '-c']; const sql = query => execFileSync('docker', [...args, query], { encoding: 'utf8' }).trim(); const parallel = query => new Promise((resolve, reject) => execFile('docker', [...args, query], (error, stdout) => error ? reject(error) : resolve(stdout.trim()))); (async () => { sql("DELETE FROM public_display_id_counters WHERE local_date='2099-01-01'"); const ids = await Promise.all(Array.from({ length: 20 }, () => parallel("SELECT public_next_display_id('RW','2099-01-01')"))); assert.equal(new Set(ids).size, 20); assert(ids.every(id => /^RW20990101\d{3}$/.test(id))); assert.equal(sql("SELECT public_next_display_id('YH','2099-01-01','male')"), 'YH20990101001'); assert.equal(sql("SELECT public_next_display_id('YH','2099-01-01','male')"), 'YH20990101003'); assert.equal(sql("SELECT public_next_display_id('YH','2099-01-01','female')"), 'YH20990101002'); sql("UPDATE public_display_id_counters SET last_sequence=998 WHERE prefix='RW' AND local_date='2099-01-01'"); assert.equal(sql("SELECT public_next_display_id('RW','2099-01-01')"), 'RW20990101999'); assert.throws(() => sql("SELECT public_next_display_id('RW','2099-01-01')")); assert.throws(() => sql("SELECT public_next_display_id('ZZ','2099-01-01')")); assert.throws(() => sql("SELECT public_next_display_id('YH','2099-01-01','unknown')")); sql("BEGIN; SELECT public_next_display_id('HD','2099-01-01'); ROLLBACK;"); assert.equal(sql("SELECT COUNT(*) FROM public_display_id_counters WHERE prefix='HD' AND local_date='2099-01-01'"), '0'); assert.equal(sql("SELECT COUNT(*) FROM public_display_ids WHERE display_id IS NOT NULL AND display_id !~ '^[A-Z]{2}[0-9]{11}$'"), '0'); assert.equal(sql("SELECT COUNT(*) FROM (SELECT display_id FROM public_display_ids WHERE display_id IS NOT NULL GROUP BY display_id HAVING COUNT(*)>1) s"), '0'); assert.equal(sql("SELECT COUNT(*) FROM public_display_id_aliases WHERE entity_type IN ('users','operators') AND new_display_id IS NULL"), '0'); sql("BEGIN; INSERT INTO matchmaker_followups(id,service_id,operator_id,followup_type,content,created_at) SELECT gen_random_uuid(),id,assigned_operator_id,'system','编号事务测试','2099-01-01' FROM matchmaker_services WHERE assigned_operator_id IS NOT NULL LIMIT 1; SELECT 1 / 0; ROLLBACK;"); })().catch(error => { // 最后一项故意使事务失败,连接退出自动回滚;检查实体和计数器均未遗留。 if (String(error.stderr || error.message).includes('division by zero')) { assert.equal(sql("SELECT COUNT(*) FROM matchmaker_followups WHERE content='编号事务测试'"), '0'); assert.equal(sql("SELECT COUNT(*) FROM public_display_id_counters WHERE prefix='GJ' AND local_date='2099-01-01'"), '0'); console.log('PASS: PostgreSQL 历史回填、20 路并发、奇偶、999 边界、非法参数和实体事务回滚。'); } else { console.error(error.message); process.exitCode = 1; } });