1
0
forked from erp-dev/erp

feat: stateflow v2 (params required)

This commit is contained in:
2025-11-15 19:39:15 +08:00
parent 9ad404a365
commit 9c38e2ac09
24 changed files with 3670 additions and 547 deletions

View File

@@ -24,9 +24,9 @@ class StepBackTestCase(TestCase):
self.process = models.Process.objects.create(name='测试流程', description='三个状态的测试流程')
# 创建流程节点
models.ProcessNode.objects.create(process=self.process, state=self.state1, order=1)
models.ProcessNode.objects.create(process=self.process, state=self.state2, order=2)
models.ProcessNode.objects.create(process=self.process, state=self.state3, order=3)
models.ProcessNode.objects.create(process=self.process, state=self.state1, order=0)
models.ProcessNode.objects.create(process=self.process, state=self.state2, order=1)
models.ProcessNode.objects.create(process=self.process, state=self.state3, order=2)
# 创建业务对象
self.business_object = models.BusinessObject.objects.create(
@@ -47,13 +47,13 @@ class StepBackTestCase(TestCase):
def test_step_back_from_first_state(self):
"""测试从第一个状态回退到未开始"""
# 推进第一个状态
success, _ = services.advance_to_next_state(self.business_object, self.user)
# 推进(完成第一个状态
success, _, _ = services.advance_to_next_state(self.business_object, self.user)
self.assertTrue(success)
# 验证当前在第一个状态(进行中,准备完成第二个状态)
# 验证 current_state 是 state1最后完成的状态)
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.id, self.state2.id)
self.assertEqual(current_state.name, self.state1.name)
# 回退一步
success, message = services.step_back_one_state(self.business_object, self.user)
@@ -62,6 +62,8 @@ class StepBackTestCase(TestCase):
# 验证回到未开始状态
self.assertEqual(services.get_overall_status(self.business_object), 'not_started')
current_state = services.get_business_object_current_state(self.business_object)
self.assertIsNone(current_state)
# 验证状态1的记录已被撤销
record = models.StateFlowRecord.objects.filter(
@@ -73,22 +75,22 @@ class StepBackTestCase(TestCase):
def test_step_back_from_middle_state(self):
"""测试从中间状态回退"""
# 推进到第二个状态
# 推进两次(完成 state1 和 state2
services.advance_to_next_state(self.business_object, self.user)
services.advance_to_next_state(self.business_object, self.user)
# 验证当前在第二个状态(进行中,准备完成第三个状态)
# 验证 current_state 是 state2最后完成的状态)
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.id, self.state3.id)
self.assertEqual(current_state.name, self.state2.name)
# 回退一步
success, message = services.step_back_one_state(self.business_object, self.user)
self.assertTrue(success)
self.assertIn('状态2', message)
# 验证回到第一个状态(进行中,准备完成第二个状态)
# 验证 current_state 变为state1
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.id, self.state2.id)
self.assertEqual(current_state.name, self.state1.name)
# 验证状态2的记录已被撤销
record = models.StateFlowRecord.objects.filter(
@@ -99,23 +101,25 @@ class StepBackTestCase(TestCase):
def test_step_back_from_completed(self):
"""测试从已完成状态回退"""
# 推进到完成
# 推进到完成(完成所有三个状态)
services.advance_to_next_state(self.business_object, self.user)
services.advance_to_next_state(self.business_object, self.user)
services.advance_to_next_state(self.business_object, self.user)
# 验证已完成
# 验证已完成current_state 是 state3
self.assertEqual(services.get_overall_status(self.business_object), 'completed')
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.name, self.state3.name)
# 回退一步
success, message = services.step_back_one_state(self.business_object, self.user)
self.assertTrue(success)
self.assertIn('状态3', message)
# 验证回到进行中状态(准备完成第三个状态)
# 验证回到进行中状态current_state 变为state2
self.assertEqual(services.get_overall_status(self.business_object), 'in_progress')
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.id, self.state3.id)
self.assertEqual(current_state.name, self.state2.name)
def test_step_back_multiple_times(self):
"""测试多次回退"""
@@ -124,17 +128,17 @@ class StepBackTestCase(TestCase):
services.advance_to_next_state(self.business_object, self.user)
services.advance_to_next_state(self.business_object, self.user)
# 第一次回退
# 第一次回退(撤销 state3
success, _ = services.step_back_one_state(self.business_object, self.user)
self.assertTrue(success)
current = services.get_business_object_current_state(self.business_object)
self.assertEqual(current.id, self.state3.id)
self.assertEqual(current.name, self.state2.name)
# 第二次回退
# 第二次回退(撤销 state2
success, _ = services.step_back_one_state(self.business_object, self.user)
self.assertTrue(success)
current = services.get_business_object_current_state(self.business_object)
self.assertEqual(current.id, self.state2.id)
self.assertEqual(current.name, self.state1.name)
# 第三次回退
success, _ = services.step_back_one_state(self.business_object, self.user)
@@ -148,20 +152,20 @@ class StepBackTestCase(TestCase):
def test_advance_after_step_back(self):
"""测试回退后再前进"""
# 推进两步
# 推进两步(完成 state1 和 state2
services.advance_to_next_state(self.business_object, self.user)
services.advance_to_next_state(self.business_object, self.user)
# 回退一步
# 回退一步(撤销 state2
services.step_back_one_state(self.business_object, self.user)
# 再前进
success, _ = services.advance_to_next_state(self.business_object, self.user)
# 再前进(重新完成 state2
success, _, _ = services.advance_to_next_state(self.business_object, self.user)
self.assertTrue(success)
# 验证当前在第二个状态
# 验证 current_state 是 state2最后完成的
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.id, self.state3.id)
self.assertEqual(current_state.name, self.state2.name)
def test_step_back_preserves_history(self):
"""测试回退操作保留历史记录"""