备份:修复前完整项目快照 2026-04-19
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
const request = require('supertest');
|
||||
const app = require('../final-backend');
|
||||
|
||||
describe('采购付款分离 - API层测试', () => {
|
||||
describe('采购申请API', () => {
|
||||
let testPurchaseRequestId;
|
||||
|
||||
test('POST /api/purchase-requests - 应该能创建采购申请', async () => {
|
||||
const response = await request(app)
|
||||
.post('/api/purchase-requests')
|
||||
.send({
|
||||
project_id: 1,
|
||||
applicant: '测试申请人',
|
||||
request_date: '2026-03-25',
|
||||
expense_category: 'material',
|
||||
total_amount: 15000,
|
||||
items: [
|
||||
{
|
||||
product_name: '测试商品A',
|
||||
quantity: 10,
|
||||
unit_price: 1000,
|
||||
total_price: 10000
|
||||
},
|
||||
{
|
||||
product_name: '测试商品B',
|
||||
quantity: 5,
|
||||
unit_price: 1000,
|
||||
total_price: 5000
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(response.body.data).toHaveProperty('id');
|
||||
expect(response.body.data).toHaveProperty('request_code');
|
||||
testPurchaseRequestId = response.body.data.id;
|
||||
});
|
||||
|
||||
test('GET /api/purchase-requests - 应该能获取采购申请列表', async () => {
|
||||
const response = await request(app).get('/api/purchase-requests');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(Array.isArray(response.body.data)).toBe(true);
|
||||
});
|
||||
|
||||
test('GET /api/purchase-requests/:id - 应该能获取采购申请详情', async () => {
|
||||
const response = await request(app).get(`/api/purchase-requests/${testPurchaseRequestId}`);
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(response.body.data).toHaveProperty('items');
|
||||
expect(response.body.data.items.length).toBe(2);
|
||||
});
|
||||
|
||||
test('POST /api/purchase-requests/:id/submit - 应该能提交采购申请', async () => {
|
||||
const response = await request(app)
|
||||
.post(`/api/purchase-requests/${testPurchaseRequestId}/submit`);
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
});
|
||||
|
||||
test('POST /api/purchase-requests/:id/approve - 应该能审批通过采购申请', async () => {
|
||||
const response = await request(app)
|
||||
.post(`/api/purchase-requests/${testPurchaseRequestId}/approve`);
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
});
|
||||
|
||||
test('PUT /api/purchase-requests/:id - 应该能更新采购申请', async () => {
|
||||
const response = await request(app)
|
||||
.put(`/api/purchase-requests/${testPurchaseRequestId}`)
|
||||
.send({
|
||||
project_id: 1,
|
||||
applicant: '测试申请人',
|
||||
request_date: '2026-03-25',
|
||||
expense_category: 'material',
|
||||
total_amount: 20000,
|
||||
remark: '更新备注'
|
||||
});
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('库存管理API', () => {
|
||||
test('GET /api/inventory - 应该能获取库存记录', async () => {
|
||||
const response = await request(app).get('/api/inventory');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(Array.isArray(response.body.data)).toBe(true);
|
||||
});
|
||||
|
||||
test('GET /api/inventory/summary - 应该能获取库存汇总', async () => {
|
||||
const response = await request(app).get('/api/inventory/summary');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(Array.isArray(response.body.data)).toBe(true);
|
||||
});
|
||||
|
||||
test('POST /api/inventory/out - 应该能创建出库记录', async () => {
|
||||
const response = await request(app)
|
||||
.post('/api/inventory/out')
|
||||
.send({
|
||||
project_id: 1,
|
||||
product_id: 1,
|
||||
quantity: 10,
|
||||
operator: '测试操作员'
|
||||
});
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('项目成本统计API', () => {
|
||||
test('GET /api/projects/:id/cost-summary - 应该能获取项目成本统计', async () => {
|
||||
const response = await request(app).get('/api/projects/1/cost-summary');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
expect(response.body.data).toHaveProperty('project_name');
|
||||
expect(response.body.data).toHaveProperty('purchase_cost');
|
||||
expect(response.body.data).toHaveProperty('payment_cost');
|
||||
expect(response.body.data).toHaveProperty('total_cost');
|
||||
expect(response.body.data).toHaveProperty('profit');
|
||||
});
|
||||
});
|
||||
|
||||
describe('采购申请删除API', () => {
|
||||
let tempPurchaseRequestId;
|
||||
|
||||
beforeAll(async () => {
|
||||
const response = await request(app)
|
||||
.post('/api/purchase-requests')
|
||||
.send({
|
||||
project_id: 1,
|
||||
applicant: '临时测试',
|
||||
request_date: '2026-03-25',
|
||||
expense_category: 'material',
|
||||
total_amount: 1000
|
||||
});
|
||||
tempPurchaseRequestId = response.body.data.id;
|
||||
});
|
||||
|
||||
test('DELETE /api/purchase-requests/:id - 应该能删除采购申请', async () => {
|
||||
const response = await request(app)
|
||||
.delete(`/api/purchase-requests/${tempPurchaseRequestId}`);
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.success).toBe(true);
|
||||
});
|
||||
|
||||
test('GET /api/purchase-requests/:id - 删除后应该返回404', async () => {
|
||||
const response = await request(app)
|
||||
.get(`/api/purchase-requests/${tempPurchaseRequestId}`);
|
||||
expect(response.status).toBe(404);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user