forked from erp-dev/erp
feat: added print_count api, added merchant setting model, added manual mode setting for purchase order
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""
|
||||
PlateOrder API 测试
|
||||
"""
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase
|
||||
from rest_framework.test import APIClient
|
||||
from rest_framework import status
|
||||
@@ -9,6 +10,7 @@ from django.contrib.auth.models import Permission
|
||||
from basic_info import models as basic_models
|
||||
from printing import models as printing_models
|
||||
from stateflow import models as stateflow_models
|
||||
from api_v1 import models as api_models
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@@ -95,6 +97,18 @@ class PlateOrderAPITestCase(TestCase):
|
||||
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state1, order=0)
|
||||
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state2, order=1)
|
||||
stateflow_models.ProcessNode.objects.create(process=self.process, state=self.state3, order=2)
|
||||
self.upload_file_primary = self._create_uploaded_file('plate-main.jpg')
|
||||
self.upload_file_secondary = self._create_uploaded_file('plate-secondary.jpg')
|
||||
|
||||
def _create_uploaded_file(self, filename):
|
||||
file = SimpleUploadedFile(filename, b'test-image-content', content_type='image/jpeg')
|
||||
return api_models.UploadedFile.objects.create(
|
||||
owner=self.user,
|
||||
path=file,
|
||||
original_filename=filename,
|
||||
file_size=file.size,
|
||||
content_type='image/jpeg',
|
||||
)
|
||||
|
||||
def test_create_plate_order(self):
|
||||
"""测试创建开版订单"""
|
||||
@@ -109,6 +123,9 @@ class PlateOrderAPITestCase(TestCase):
|
||||
'salesperson': self.salesperson.id,
|
||||
'merchandiser': self.merchandiser.id,
|
||||
'image_name': 'sample.png',
|
||||
'plate_image': [
|
||||
{'file_id': self.upload_file_primary.id, 'name': '主图'}
|
||||
],
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/plate-orders/', data, format='json')
|
||||
@@ -116,6 +133,8 @@ class PlateOrderAPITestCase(TestCase):
|
||||
self.assertEqual(response.data['design_code'], 'DESIGN001')
|
||||
self.assertEqual(response.data['style_name'], '测试款式')
|
||||
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.assertTrue(printing_models.PlateOrder.objects.filter(design_code='DESIGN001').exists())
|
||||
@@ -145,11 +164,22 @@ class PlateOrderAPITestCase(TestCase):
|
||||
response = self.client.post('/api/v1/plate-orders/', data, format='json')
|
||||
# CharField 不会验证内容,所以应该成功
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
|
||||
def test_create_plate_order_with_invalid_plate_image_file(self):
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'design_code': 'DESIGN_IMG',
|
||||
'plate_type': '圆网',
|
||||
'plate_image': [{'file_id': 999}],
|
||||
}
|
||||
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_list_plate_orders(self):
|
||||
"""测试获取开版订单列表"""
|
||||
# 创建测试数据
|
||||
printing_models.PlateOrder.objects.create(
|
||||
order_one = printing_models.PlateOrder.objects.create(
|
||||
customer=self.customer,
|
||||
design_code='DESIGN001',
|
||||
plate_type='圆网',
|
||||
@@ -158,7 +188,17 @@ class PlateOrderAPITestCase(TestCase):
|
||||
salesperson=self.salesperson,
|
||||
image_name='first.png',
|
||||
)
|
||||
printing_models.PlateOrder.objects.create(
|
||||
order_one.plate_image = [
|
||||
{
|
||||
'file_id': self.upload_file_primary.id,
|
||||
'name': 'A 面',
|
||||
'url': self.upload_file_primary.file_url,
|
||||
'path': self.upload_file_primary.path.name,
|
||||
}
|
||||
]
|
||||
order_one.save(update_fields=['plate_image'])
|
||||
|
||||
order_two = printing_models.PlateOrder.objects.create(
|
||||
customer=self.customer,
|
||||
design_code='DESIGN002',
|
||||
plate_type='平网',
|
||||
@@ -167,6 +207,15 @@ class PlateOrderAPITestCase(TestCase):
|
||||
merchandiser=self.merchandiser,
|
||||
image_name='second.png',
|
||||
)
|
||||
order_two.plate_image = [
|
||||
{
|
||||
'file_id': self.upload_file_secondary.id,
|
||||
'name': 'B 面',
|
||||
'url': self.upload_file_secondary.file_url,
|
||||
'path': self.upload_file_secondary.path.name,
|
||||
}
|
||||
]
|
||||
order_two.save(update_fields=['plate_image'])
|
||||
|
||||
response = self.client.get('/api/v1/plate-orders/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
@@ -174,11 +223,13 @@ class PlateOrderAPITestCase(TestCase):
|
||||
if isinstance(response.data, dict):
|
||||
self.assertEqual(response.data['count'], 2)
|
||||
collection = response.data.get('results') or response.data.get('data') or []
|
||||
if collection:
|
||||
self.assertIn('image_name', collection[0])
|
||||
else:
|
||||
self.assertEqual(len(response.data), 2)
|
||||
self.assertIn('image_name', response.data[0])
|
||||
collection = response.data
|
||||
self.assertEqual(len(collection), 2)
|
||||
|
||||
if collection:
|
||||
self.assertIn('plate_image', collection[0])
|
||||
self.assertIsInstance(collection[0]['plate_image'], list)
|
||||
|
||||
def test_retrieve_plate_order(self):
|
||||
"""测试获取单个开版订单详情"""
|
||||
@@ -193,6 +244,15 @@ class PlateOrderAPITestCase(TestCase):
|
||||
merchandiser=self.merchandiser,
|
||||
image_name='detail.png',
|
||||
)
|
||||
plate_order.plate_image = [
|
||||
{
|
||||
'file_id': self.upload_file_primary.id,
|
||||
'name': '详情图',
|
||||
'url': self.upload_file_primary.file_url,
|
||||
'path': self.upload_file_primary.path.name,
|
||||
}
|
||||
]
|
||||
plate_order.save(update_fields=['plate_image'])
|
||||
|
||||
response = self.client.get(f'/api/v1/plate-orders/{plate_order.id}/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
@@ -202,6 +262,8 @@ class PlateOrderAPITestCase(TestCase):
|
||||
self.assertIn('customer_name', response.data)
|
||||
self.assertIn('salesperson_name', response.data)
|
||||
self.assertEqual(response.data['image_name'], 'detail.png')
|
||||
self.assertIsInstance(response.data['plate_image'], list)
|
||||
self.assertEqual(response.data['plate_image'][0]['file_id'], self.upload_file_primary.id)
|
||||
|
||||
def test_design_code_fallback_in_detail(self):
|
||||
"""design_code 为空时返回主键ID"""
|
||||
|
||||
Reference in New Issue
Block a user