forked from erp-dev/erp
feat: batch update for plate order
This commit is contained in:
116
api_v2/tests.py
116
api_v2/tests.py
@@ -2,6 +2,7 @@ from decimal import Decimal
|
||||
import datetime
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
from rest_framework.test import APIClient, APIRequestFactory
|
||||
@@ -957,3 +958,118 @@ class PlateOrderByProcessV2APITest(TestCase):
|
||||
}
|
||||
)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
|
||||
|
||||
class PlateOrderBatchUpdateV2APITest(TestCase):
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
|
||||
# 工厂用户(满足 IsPrintingFactory)
|
||||
self.merchant = basic_models.Merchant.objects.create(
|
||||
name='印染工厂',
|
||||
type=basic_models.MerchantTypeEnum.FACTORY,
|
||||
)
|
||||
self.user = get_user_model().objects.create_user(username='factory_user2', password='pass12345')
|
||||
basic_models.Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
sys_user=self.user,
|
||||
name='工厂员工2',
|
||||
)
|
||||
self.client.force_authenticate(user=self.user)
|
||||
|
||||
# 赋予 change 权限(批量更新必需)
|
||||
perm_change = Permission.objects.get(codename='change_plateorder')
|
||||
self.user.user_permissions.add(perm_change)
|
||||
|
||||
self.customer = basic_models.Customer.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='客户A',
|
||||
created_by=None,
|
||||
)
|
||||
self.designer = basic_models.Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='设计师',
|
||||
)
|
||||
|
||||
self.po1 = printing_models.PlateOrder.objects.create(
|
||||
customer=self.customer,
|
||||
design_code='D1',
|
||||
urgency_level='正常',
|
||||
style_name='S1',
|
||||
)
|
||||
self.po2 = printing_models.PlateOrder.objects.create(
|
||||
customer=self.customer,
|
||||
design_code='D2',
|
||||
urgency_level='正常',
|
||||
style_name='S2',
|
||||
)
|
||||
|
||||
def test_batch_update_success(self):
|
||||
resp = self.client.post(
|
||||
'/api/v2/plate-orders/batch-update/',
|
||||
{
|
||||
'plate_order_ids': [self.po1.id, self.po2.id],
|
||||
'data': {'urgency_level': '加急', 'designer': self.designer.id},
|
||||
},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data['updated_count'], 2)
|
||||
|
||||
self.po1.refresh_from_db()
|
||||
self.po2.refresh_from_db()
|
||||
self.assertEqual(self.po1.urgency_level, '加急')
|
||||
self.assertEqual(self.po2.urgency_level, '加急')
|
||||
self.assertEqual(self.po1.designer_id, self.designer.id)
|
||||
self.assertEqual(self.po2.designer_id, self.designer.id)
|
||||
|
||||
def test_batch_update_fails_when_missing_ids(self):
|
||||
resp = self.client.post(
|
||||
'/api/v2/plate-orders/batch-update/',
|
||||
{
|
||||
'plate_order_ids': [self.po1.id, 999999],
|
||||
'data': {'urgency_level': '加急'},
|
||||
},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertIn('不存在', resp.data.get('detail', ''))
|
||||
|
||||
def test_batch_update_fails_when_unknown_field(self):
|
||||
resp = self.client.post(
|
||||
'/api/v2/plate-orders/batch-update/',
|
||||
{
|
||||
'plate_order_ids': [self.po1.id],
|
||||
'data': {'process': 123},
|
||||
},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertIn('不支持批量更新字段', resp.data.get('detail', ''))
|
||||
|
||||
def test_batch_update_is_invalid_requires_permission(self):
|
||||
# 未授予 can_invalidate_plateorder
|
||||
resp = self.client.post(
|
||||
'/api/v2/plate-orders/batch-update/',
|
||||
{
|
||||
'plate_order_ids': [self.po1.id],
|
||||
'data': {'is_invalid': True},
|
||||
},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(resp.status_code, 403)
|
||||
|
||||
perm_invalidate = Permission.objects.get(codename='can_invalidate_plateorder')
|
||||
self.user.user_permissions.add(perm_invalidate)
|
||||
|
||||
resp2 = self.client.post(
|
||||
'/api/v2/plate-orders/batch-update/',
|
||||
{
|
||||
'plate_order_ids': [self.po1.id],
|
||||
'data': {'is_invalid': True},
|
||||
},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(resp2.status_code, 200)
|
||||
self.po1.refresh_from_db()
|
||||
self.assertTrue(self.po1.is_invalid)
|
||||
|
||||
Reference in New Issue
Block a user