forked from erp-dev/erp
feat: new api for plate order (get_plate_order_by_state_status)
This commit is contained in:
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user