forked from erp-dev/erp
128 lines
5.4 KiB
Python
128 lines
5.4 KiB
Python
"""
|
||
测试 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 正确显示每个节点的状态")
|