1
0
forked from erp-dev/erp

feat: product quick api and param create api

This commit is contained in:
2025-11-19 09:03:15 +08:00
parent 2efd11c019
commit 7f822b0064
20 changed files with 2284 additions and 42 deletions

View File

@@ -0,0 +1,127 @@
"""
测试 PlateOrder timeline 接口的正确性
"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from rest_framework.test import APIClient
from printing import models as printing_models
from stateflow import models as stateflow_models
from stateflow import services as stateflow_services
from basic_info import models as basic_info_models
User = get_user_model()
class PlateOrderTimelineTestCase(TestCase):
"""测试 PlateOrder timeline 接口"""
def setUp(self):
"""设置测试数据"""
self.user = User.objects.create_user(username='testuser', password='testpass123')
self.merchant = basic_info_models.Merchant.objects.create(
name='测试商户',
type=basic_info_models.MerchantTypeEnum.FACTORY
)
self.customer = basic_info_models.Customer.objects.create(
name='测试客户',
merchant=self.merchant
)
# 创建流程
self.process = stateflow_models.Process.objects.create(
name='开版流程测试',
description='用于测试的开版流程'
)
# 创建3个状态
self.state1 = stateflow_models.State.objects.create(name='设计', description='设计阶段')
self.state2 = stateflow_models.State.objects.create(name='制版', description='制版阶段')
self.state3 = stateflow_models.State.objects.create(name='验收', description='验收阶段')
# 创建流程节点
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state1, order=1)
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state2, order=2)
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state3, order=3)
self.client = APIClient()
self.client.force_authenticate(user=self.user)
def test_timeline_api_response(self):
"""测试 timeline API 返回的数据结构"""
# 创建 PlateOrder
plate_order = printing_models.PlateOrder.objects.create(
design_code='TEST001',
customer=self.customer,
style_name='测试款式',
process=self.process.id
)
bo = plate_order.business_object
print(f"\n=== 测试 Timeline API ===")
# 初始状态
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/timeline/')
self.assertEqual(response.status_code, 200)
print(f"\n初始 timeline:")
for item in response.data['results']:
print(f" - {item['state_name']}: status={item['status']}, order={item['order']}")
# 验证初始状态:都是 not_started
self.assertEqual(len(response.data['results']), 3)
self.assertEqual(response.data['results'][0]['status'], 'not_started')
self.assertEqual(response.data['results'][1]['status'], 'not_started')
self.assertEqual(response.data['results'][2]['status'], 'not_started')
# 第一次推进
stateflow_services.advance_to_next_state(bo, self.user)
plate_order.refresh_from_db()
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/timeline/')
self.assertEqual(response.status_code, 200)
print(f"\n第一次推进后 timeline:")
for item in response.data['results']:
print(f" - {item['state_name']}: status={item['status']}, order={item['order']}")
# 验证:第一个节点已完成,后两个未开始
self.assertEqual(response.data['results'][0]['status'], 'completed')
self.assertEqual(response.data['results'][1]['status'], 'not_started')
self.assertEqual(response.data['results'][2]['status'], 'not_started')
# 第二次推进
stateflow_services.advance_to_next_state(bo, self.user)
plate_order.refresh_from_db()
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/timeline/')
self.assertEqual(response.status_code, 200)
print(f"\n第二次推进后 timeline:")
for item in response.data['results']:
print(f" - {item['state_name']}: status={item['status']}, order={item['order']}")
# 验证:前两个节点已完成,最后一个未开始
self.assertEqual(response.data['results'][0]['status'], 'completed')
self.assertEqual(response.data['results'][1]['status'], 'completed')
self.assertEqual(response.data['results'][2]['status'], 'not_started')
# 第三次推进
stateflow_services.advance_to_next_state(bo, self.user)
plate_order.refresh_from_db()
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/timeline/')
self.assertEqual(response.status_code, 200)
print(f"\n第三次推进后 timeline:")
for item in response.data['results']:
print(f" - {item['state_name']}: status={item['status']}, order={item['order']}")
# 验证:所有节点都已完成
self.assertEqual(response.data['results'][0]['status'], 'completed')
self.assertEqual(response.data['results'][1]['status'], 'completed')
self.assertEqual(response.data['results'][2]['status'], 'completed')
print(f"\n结论timeline API 正确显示每个节点的状态")