备份:修复前完整项目快照 2026-04-19
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user