1
0
forked from erp-dev/erp

patch: patch testing (api & services)

This commit is contained in:
2025-11-17 10:10:32 +08:00
parent 9c38e2ac09
commit 02a1b77e19
10 changed files with 337 additions and 102 deletions

View File

@@ -73,9 +73,10 @@ class BusinessObjectAPITestCase(TestCase):
self.assertTrue(response.data['success'])
self.assertIn('重置', response.data['message'])
# 验证进度已重置
# 验证进度已重置current_state 返回第一个待执行的节点)
self.business_object.refresh_from_db()
self.assertIsNone(services.get_business_object_current_state(self.business_object))
current_state = services.get_business_object_current_state(self.business_object)
self.assertEqual(current_state.name, self.state1.name)
self.assertEqual(self.business_object.state_logs.filter(is_cancelled=False).count(), 0)
def test_reset_api_not_started(self):
@@ -120,8 +121,8 @@ class BusinessObjectAPITestCase(TestCase):
self.assertEqual(response.data[0]['completed_by'], 'testuser')
self.assertFalse(response.data[0]['is_cancelled'])
# 其他状态仍是待执行
self.assertEqual(response.data[1]['status'], 'not_started')
# 第二个状态是进行中(下一个待执行的)
self.assertEqual(response.data[1]['status'], 'in_progress')
self.assertEqual(response.data[2]['status'], 'not_started')
def test_timeline_api_with_step_back(self):
@@ -469,3 +470,59 @@ class BusinessObjectAPITestCase(TestCase):
self.assertIsNotNone(item['completed_at'])
self.assertIsNotNone(item['completed_by'])
self.assertFalse(item['is_cancelled'])
def test_advance_when_already_completed(self):
"""测试流程已完成时尝试推进(预期错误)"""
# 完成所有状态
self.client.post(
f'/api/v1/stateflow/business-objects/{self.business_object.id}/advance/',
{'parameters': {'temperature': '25.5'}},
format='json'
)
self.client.post(f'/api/v1/stateflow/business-objects/{self.business_object.id}/advance/')
self.client.post(f'/api/v1/stateflow/business-objects/{self.business_object.id}/advance/')
# 验证已完成
self.assertEqual(services.get_overall_status(self.business_object), 'completed')
# 尝试再次推进(应该失败)
response = self.client.post(
f'/api/v1/stateflow/business-objects/{self.business_object.id}/advance/'
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertFalse(response.data['success'])
self.assertIn('流程已完成', response.data['message'])
self.assertIn('无法继续推进', response.data['message'])
def test_step_back_when_not_started(self):
"""测试未开始时尝试回退(预期错误)"""
# 验证未开始
self.assertEqual(services.get_overall_status(self.business_object), 'not_started')
# 尝试回退(应该失败)
response = self.client.post(
f'/api/v1/stateflow/business-objects/{self.business_object.id}/step_back/'
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertFalse(response.data['success'])
self.assertIn('没有任何状态流转记录', response.data['message'])
def test_advance_process_without_nodes(self):
"""测试流程没有节点时尝试推进(预期错误)"""
# 创建一个没有节点的流程
empty_process = models.Process.objects.create(name='空流程')
empty_business_object = models.BusinessObject.objects.create(
name='空业务对象',
process=empty_process
)
# 尝试推进(应该失败)
response = self.client.post(
f'/api/v1/stateflow/business-objects/{empty_business_object.id}/advance/'
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertFalse(response.data['success'])
self.assertIn('流程没有任何节点', response.data['message'])