1
0
forked from erp-dev/erp

fix: business.object_id maybe null, missing parameters when plate-Order cloned

This commit is contained in:
2025-12-17 11:02:07 +08:00
parent 639efe8421
commit 51fad953c3
24 changed files with 13247 additions and 47 deletions

View File

@@ -1,6 +1,7 @@
"""
PlateOrder API 测试
"""
import json
from django.core.files.uploadedfile import SimpleUploadedFile
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
@@ -136,9 +137,13 @@ class PlateOrderAPITestCase(TestCase):
self.assertEqual(response.data['image_name'], 'sample.png')
self.assertEqual(len(response.data['plate_image']), 1)
self.assertEqual(response.data['plate_image'][0]['file_id'], self.upload_file_primary.id)
self.assertIn('created_by', response.data)
self.assertEqual(response.data['created_by'], self.user.id)
# 验证数据库中创建了记录
self.assertTrue(printing_models.PlateOrder.objects.filter(design_code='DESIGN001').exists())
created = printing_models.PlateOrder.objects.get(design_code='DESIGN001')
self.assertEqual(created.created_by_id, self.user.id)
def test_create_plate_order_without_customer(self):
"""测试创建开版订单时未提供客户"""
@@ -165,6 +170,8 @@ class PlateOrderAPITestCase(TestCase):
response = self.client.post('/api/v1/plate-orders/', data, format='json')
# CharField 不会验证内容,所以应该成功
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertIn('created_by', response.data)
self.assertEqual(response.data['created_by'], self.user.id)
def test_create_plate_order_with_invalid_plate_image_file(self):
data = {
@@ -176,6 +183,45 @@ class PlateOrderAPITestCase(TestCase):
response = self.client.post('/api/v1/plate-orders/', data, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('plate_image', response.data)
def test_create_plate_order_with_plate_image_json_string_in_multipart(self):
"""兼容前端使用 multipart/form-data 时 plate_image 以 JSON 字符串传入"""
data = {
'customer': str(self.customer.id),
'design_code': 'DESIGN_MULTIPART_IMG',
'plate_type': '圆网',
'plate_image': json.dumps([{'file_id': self.upload_file_primary.id, 'name': '主图'}]),
}
response = self.client.post('/api/v1/plate-orders/', data, format='multipart')
self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data)
self.assertIn('plate_image', response.data)
self.assertEqual(len(response.data['plate_image']), 1)
self.assertEqual(response.data['plate_image'][0]['file_id'], self.upload_file_primary.id)
def test_create_plate_order_can_reference_uploaded_file_owned_by_other_user(self):
"""克隆/协作场景:允许引用非本人上传的 UploadedFile只要文件存在且未删除"""
other_user = User.objects.create_user(
username='otheruser',
password='pass123',
email='other@example.com',
)
other_file = api_models.UploadedFile.objects.create(
owner=other_user,
path=SimpleUploadedFile('other.jpg', b'test-image', content_type='image/jpeg'),
original_filename='other.jpg',
file_size=9,
content_type='image/jpeg',
)
data = {
'customer': self.customer.id,
'design_code': 'DESIGN_OTHER_OWNER_IMG',
'plate_type': '圆网',
'plate_image': [{'file_id': other_file.id, 'name': '协作图片'}],
}
response = self.client.post('/api/v1/plate-orders/', data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data)
self.assertEqual(response.data['plate_image'][0]['file_id'], other_file.id)
def test_list_plate_orders(self):
"""测试获取开版订单列表"""
@@ -231,6 +277,7 @@ class PlateOrderAPITestCase(TestCase):
if collection:
self.assertIn('plate_image', collection[0])
self.assertIsInstance(collection[0]['plate_image'], list)
self.assertIn('created_by', collection[0])
def test_retrieve_plate_order(self):
"""测试获取单个开版订单详情"""
@@ -258,6 +305,8 @@ class PlateOrderAPITestCase(TestCase):
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['design_code'], 'DESIGN001')
self.assertIn('created_by', response.data)
self.assertIsNone(response.data['created_by'])
self.assertEqual(response.data['urgency_level'], '紧急')
self.assertEqual(response.data['customer'], self.customer.id)
self.assertIn('customer_name', response.data)