Files
yunhaifinance/backend/tests/test-purchase-api.spec.js
T

157 lines
5.6 KiB
JavaScript
Raw Normal View History

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);
});
});
});