备份:修复前完整项目快照 2026-04-19

This commit is contained in:
root
2026-04-19 19:15:01 +08:00
parent 5266d7732b
commit d00f41a120
449 changed files with 89577 additions and 23251 deletions
@@ -0,0 +1,97 @@
const request = require('supertest');
const app = require('../final-backend');
describe('质保金数据正确性测试 - TDD Red/Green', () => {
describe('项目详情API - 质保金数据', () => {
test('GET /api/projects/:id - 应该返回正确的质保金比例(从合同表读取)', async () => {
const response = await request(app).get('/api/projects/1');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data).toHaveProperty('warranty_percent');
// 质保比例应该从 project_contracts 表的 warranty_deposit_percentage 字段读取
// 而不是硬编码为 5
const warrantyPercent = parseFloat(response.body.data.warranty_percent);
expect(warrantyPercent).toBeGreaterThan(0);
expect(warrantyPercent).toBeLessThanOrEqual(100);
});
test('GET /api/projects/:id - 质保金金额应该根据合同金额和比例正确计算', async () => {
const response = await request(app).get('/api/projects/1');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
const contractAmount = parseFloat(response.body.data.contract_amount || '0');
const warrantyPercent = parseFloat(response.body.data.warranty_percent || '0');
const warrantyAmount = parseFloat(response.body.data.warranty_amount || '0');
// 质保金金额 = 合同金额 * 质保比例 / 100
const expectedWarrantyAmount = Math.round(contractAmount * warrantyPercent / 100);
// 允许1元的四舍五入误差
expect(Math.abs(warrantyAmount - expectedWarrantyAmount)).toBeLessThanOrEqual(1);
});
test('GET /api/projects/:id - 质保期限应该从合同表读取', async () => {
const response = await request(app).get('/api/projects/1');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(response.body.data).toHaveProperty('warranty_months');
// 质保期限应该是数字且大于0
const warrantyMonths = parseInt(response.body.data.warranty_months);
expect(warrantyMonths).toBeGreaterThan(0);
});
});
describe('项目质保金列表API', () => {
test('GET /api/projects/:id/warranty-deposits - 应该返回质保金记录', async () => {
const response = await request(app).get('/api/projects/1/warranty-deposits');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
expect(Array.isArray(response.body.data)).toBe(true);
});
});
describe('质保金数据字段正确性测试', () => {
test('质保金数据应该包含所有必要字段', async () => {
const response = await request(app).get('/api/projects/1');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
const data = response.body.data;
// 检查所有质保金相关字段
expect(data).toHaveProperty('has_warranty');
expect(data).toHaveProperty('warranty_amount');
expect(data).toHaveProperty('warranty_percent');
expect(data).toHaveProperty('warranty_months');
expect(data).toHaveProperty('warranty_start_date');
expect(data).toHaveProperty('warranty_end_date');
expect(data).toHaveProperty('warranty_status');
});
test('质保比例和质保期限应该是不同的值', async () => {
const response = await request(app).get('/api/projects/1');
expect(response.status).toBe(200);
expect(response.body.success).toBe(true);
const warrantyPercent = parseFloat(response.body.data.warranty_percent);
const warrantyMonths = parseInt(response.body.data.warranty_months);
// 质保比例(百分比)和质保期限(月数)应该是不同的概念
// 比例通常是 0-100 之间的数,期限通常是 12、24 等月数
// 它们不应该相等(除非是极端情况,但测试中应该区分)
expect(typeof warrantyPercent).toBe('number');
expect(typeof warrantyMonths).toBe('number');
expect(warrantyPercent).not.toBeNaN();
expect(warrantyMonths).not.toBeNaN();
});
});
});