157 lines
5.6 KiB
JavaScript
157 lines
5.6 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
});
|