forked from erp-dev/erp
fix: business.object_id maybe null, missing parameters when plate-Order cloned
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user