import { DatabaseSync } from 'node:sqlite'; import { admissionNoticeCode } from '../../src/security/document-verification.mjs'; const databasePath = process.argv[2]; if (!databasePath) throw new Error('缺少 SQLite 测试数据库路径'); const database = new DatabaseSync(databasePath); const rows = database.prepare( "SELECT id, exam_id, user_id, school_id, payload_json, updated_at FROM admission_records WHERE kind = 'placement' ORDER BY id" ).all(); let row = rows.map(item => ({ ...item, payload: JSON.parse(item.payload_json || '{}') }))[0]; if (!row) { const exam = database.prepare('SELECT id FROM exams ORDER BY id LIMIT 1').get(); const user = database.prepare("SELECT id FROM users WHERE role = 'candidate' ORDER BY id LIMIT 1").get(); const school = database.prepare('SELECT id FROM schools WHERE is_admission_school = 1 ORDER BY id LIMIT 1').get(); if (!exam || !user || !school) throw new Error('测试数据库缺少考试、考生或招生学校'); row = { id: 'smoke_final_placement', exam_id: exam.id, user_id: user.id, school_id: school.id, updated_at: '2026-07-22T00:00:00.000Z', payload: { categoryCode: 'general', categoryName: '普通生', noticeNumber: 'SMOKE-EXAM-000001' } }; database.prepare( "INSERT INTO admission_records (id, kind, exam_id, user_id, school_id, status, payload_json, created_at, updated_at) VALUES (?, 'placement', ?, ?, ?, 'final', ?, ?, ?)" ).run(row.id, row.exam_id, row.user_id, row.school_id, JSON.stringify(row.payload), row.updated_at, row.updated_at); } else { row.payload.noticeNumber ||= 'SMOKE-EXAM-000001'; row.updated_at = '2026-07-22T00:00:00.000Z'; database.prepare( "UPDATE admission_records SET status = 'final', payload_json = ?, updated_at = ? WHERE id = ?" ).run(JSON.stringify(row.payload), row.updated_at, row.id); } database.close(); console.log(admissionNoticeCode( process.env.DOCUMENT_VERIFICATION_SECRET, { id: row.id, userId: row.user_id, schoolId: row.school_id, payload: row.payload, updatedAt: row.updated_at }, { id: row.exam_id } ));