1
0
forked from erp-dev/erp

feat: new api for plate order (get_plate_order_by_state_status)

This commit is contained in:
2025-12-25 17:18:44 +08:00
parent 2c5174a1ec
commit ff1ea2482d
21 changed files with 936 additions and 58 deletions

View File

@@ -40,6 +40,23 @@ class StateFlowServicesTestCase(TestCase):
content_type=ct,
object_id=self.process.id
)
self.business_object_pending = models.BusinessObject.objects.create(
name='待开始订单',
process=self.process,
description='尚未推进的订单',
content_type=ct,
object_id=self.process.id
)
self.other_process = models.Process.objects.create(name='其他流程', description='另一个流程用于过滤测试')
models.ProcessNode.objects.create(process=self.other_process, state=self.state1, order=0)
self.other_business_object = models.BusinessObject.objects.create(
name='其他流程订单',
process=self.other_process,
description='不同流程的订单',
content_type=ct,
object_id=self.other_process.id
)
def test_initial_state(self):
"""测试初始状态 - current_state 是下一个待执行节点(第一个节点)"""
@@ -318,3 +335,52 @@ class StateFlowServicesTestCase(TestCase):
self.assertIn('state_name', node)
self.assertIn('order', node)
self.assertIsInstance(node['state'], models.State)
def test_query_business_objects_by_state_status_filters_by_completion(self):
"""验证按节点状态过滤业务对象的服务函数"""
# 初始状态:两个业务对象都未开始 state1
qs = services.query_business_objects_by_state_status(
state_ids=[self.state1.id],
status='not_started',
process_id=self.process.id,
)
ids = set(qs.values_list('id', flat=True))
self.assertIn(self.business_object.id, ids)
self.assertIn(self.business_object_pending.id, ids)
self.assertNotIn(self.other_business_object.id, ids)
# 推进第一个业务对象,变为已完成 state1
services.advance_to_next_state(self.business_object, self.user)
qs = services.query_business_objects_by_state_status(
state_ids=[self.state1.id],
status='not_started',
process_id=self.process.id,
)
ids = set(qs.values_list('id', flat=True))
self.assertNotIn(self.business_object.id, ids)
self.assertIn(self.business_object_pending.id, ids)
qs_completed = services.query_business_objects_by_state_status(
state_ids=[self.state1.id],
status='completed',
)
completed_ids = set(qs_completed.values_list('id', flat=True))
self.assertIn(self.business_object.id, completed_ids)
self.assertNotIn(self.business_object_pending.id, completed_ids)
def test_query_business_objects_by_state_status_cancelled(self):
"""撤销记录应该匹配 cancelled 状态"""
services.advance_to_next_state(self.business_object_pending, self.user)
services.reset_business_object_progress(self.business_object_pending)
qs = services.query_business_objects_by_state_status(
state_ids=[self.state1.id],
status='cancelled',
)
ids = set(qs.values_list('id', flat=True))
self.assertIn(self.business_object_pending.id, ids)
def test_query_business_objects_by_state_status_invalid_status(self):
"""非法状态值应抛出异常"""
with self.assertRaises(ValueError):
services.query_business_objects_by_state_status(status='unknown')