104 lines
4.6 KiB
JavaScript
104 lines
4.6 KiB
JavaScript
const db = require('../db-sqlite');
|
|
|
|
describe('预支核销状态管理测试', () => {
|
|
let advanceId;
|
|
let verificationId;
|
|
|
|
beforeAll(async () => {
|
|
// 清空测试数据
|
|
await db.query('DELETE FROM verifications WHERE 1=1');
|
|
await db.query('DELETE FROM advances WHERE 1=1');
|
|
});
|
|
|
|
afterAll(async () => {
|
|
// 清理测试数据
|
|
await db.query('DELETE FROM verifications WHERE 1=1');
|
|
await db.query('DELETE FROM advances WHERE 1=1');
|
|
});
|
|
|
|
// 测试1: 创建预支单
|
|
test('创建预支单', async () => {
|
|
const result = await db.query(
|
|
'INSERT INTO advances (user_id, project_id, amount, currency, reason, advance_date, advance_code, status, applicant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[1, 1, 1000, 'CNY', '测试预支', '2026-03-25', 'ADV-TEST-001', 'pending', '隆林']
|
|
);
|
|
advanceId = result.lastID;
|
|
expect(advanceId).toBeDefined();
|
|
});
|
|
|
|
// 测试2: 审批预支单
|
|
test('审批预支单', async () => {
|
|
await db.query('UPDATE advances SET status = ? WHERE id = ?', ['approved', advanceId]);
|
|
const advance = await db.query('SELECT * FROM advances WHERE id = ?', [advanceId]);
|
|
expect(advance.rows[0].status).toBe('approved');
|
|
});
|
|
|
|
// 测试3: 执行预支单
|
|
test('执行预支单', async () => {
|
|
await db.query('UPDATE advances SET status = ? WHERE id = ?', ['executed', advanceId]);
|
|
const advance = await db.query('SELECT * FROM advances WHERE id = ?', [advanceId]);
|
|
expect(advance.rows[0].status).toBe('executed');
|
|
});
|
|
|
|
// 测试4: 创建部分核销单
|
|
test('创建部分核销单', async () => {
|
|
const result = await db.query(
|
|
'INSERT INTO verifications (advance_id, amount, currency, reason, verification_date, verification_code, status, applicant, advance_code, advance_amount, settlement) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[advanceId, 300, 'CNY', '部分核销', '2026-03-25', 'VER-TEST-001', 'pending', '隆林', 'ADV-TEST-001', 1000, 0]
|
|
);
|
|
verificationId = result.lastID;
|
|
expect(verificationId).toBeDefined();
|
|
});
|
|
|
|
// 测试5: 审批核销单
|
|
test('审批核销单', async () => {
|
|
await db.query('UPDATE verifications SET status = ? WHERE id = ?', ['approved', verificationId]);
|
|
const verification = await db.query('SELECT * FROM verifications WHERE id = ?', [verificationId]);
|
|
expect(verification.rows[0].status).toBe('approved');
|
|
});
|
|
|
|
// 测试6: 执行核销单
|
|
test('执行核销单', async () => {
|
|
await db.query('UPDATE verifications SET status = ? WHERE id = ?', ['executed', verificationId]);
|
|
// 更新预支单状态为部分核销
|
|
await db.query('UPDATE advances SET status = ? WHERE id = ?', ['partial_verification', advanceId]);
|
|
// 更新预支单已核销金额
|
|
await db.query('UPDATE advances SET total_reimbursed = ? WHERE id = ?', [300, advanceId]);
|
|
|
|
const verification = await db.query('SELECT * FROM verifications WHERE id = ?', [verificationId]);
|
|
expect(verification.rows[0].status).toBe('executed');
|
|
});
|
|
|
|
// 测试7: 检查预支单状态
|
|
test('检查预支单状态', async () => {
|
|
const advance = await db.query('SELECT * FROM advances WHERE id = ?', [advanceId]);
|
|
expect(advance.rows[0].total_reimbursed).toBe(300);
|
|
expect(advance.rows[0].status).toBe('partial_verification');
|
|
});
|
|
|
|
// 测试8: 创建结算核销单(退款)
|
|
test('创建结算核销单(退款)', async () => {
|
|
await db.query(
|
|
'INSERT INTO verifications (advance_id, amount, currency, reason, verification_date, verification_code, status, applicant, advance_code, advance_amount, settlement, settlement_amount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[advanceId, 600, 'CNY', '结算核销(退款)', '2026-03-25', 'VER-TEST-002', 'executed', '隆林', 'ADV-TEST-001', 1000, 1, 100]
|
|
);
|
|
// 更新预支单状态为已完成
|
|
await db.query('UPDATE advances SET status = ? WHERE id = ?', ['completed', advanceId]);
|
|
// 更新预支单已核销金额
|
|
await db.query('UPDATE advances SET total_reimbursed = ? WHERE id = ?', [900, advanceId]);
|
|
});
|
|
|
|
// 测试9: 检查预支单是否已完结
|
|
test('检查预支单是否已完结', async () => {
|
|
const advance = await db.query('SELECT * FROM advances WHERE id = ?', [advanceId]);
|
|
expect(advance.rows[0].total_reimbursed).toBe(900);
|
|
expect(advance.rows[0].status).toBe('completed');
|
|
});
|
|
|
|
// 测试10: 获取预支核销状态列表
|
|
test('获取预支核销状态列表', async () => {
|
|
const result = await db.query('SELECT * FROM advances');
|
|
expect(Array.isArray(result.rows)).toBe(true);
|
|
expect(result.rows.length).toBeGreaterThan(0);
|
|
});
|
|
}); |