1
0
forked from erp-dev/erp

test: before all tests

This commit is contained in:
2025-12-25 21:36:50 +08:00
parent 147b5804d2
commit c0277a8218
18 changed files with 310 additions and 89 deletions

View File

@@ -146,10 +146,10 @@ class PrintingJobAPITestCase(TestCase):
response = self.client.get('/api/v1/printing-jobs/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 2)
self.assertEqual(response.data['count'], 2)
# 新增字段:批量推进记录(稳定输出 key
for item in response.data:
for item in response.data['results']:
self.assertIn('batch_advance_records', item)
self.assertIsInstance(item['batch_advance_records'], list)
self.assertEqual(len(item['batch_advance_records']), 0)
@@ -202,7 +202,7 @@ class PrintingJobAPITestCase(TestCase):
# list: 应包含 batch_advance_records
response = self.client.get('/api/v1/printing-jobs/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
target = next(item for item in response.data if item['id'] == job.id)
target = next(item for item in response.data['results'] if item['id'] == job.id)
self.assertIn('batch_advance_records', target)
self.assertEqual(len(target['batch_advance_records']), 1)
@@ -337,8 +337,8 @@ class PrintingJobAPITestCase(TestCase):
response = self.client.get(f'/api/v1/printing-jobs/?printing_order={self.printing_order.id}')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['printing_order'], self.printing_order.id)
self.assertEqual(response.data['count'], 1)
self.assertEqual(response.data['results'][0]['printing_order'], self.printing_order.id)
def test_filter_by_product(self):
"""测试按产品过滤"""
@@ -369,8 +369,8 @@ class PrintingJobAPITestCase(TestCase):
response = self.client.get(f'/api/v1/printing-jobs/?product={self.product.id}')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['product'], self.product.id)
self.assertEqual(response.data['count'], 1)
self.assertEqual(response.data['results'][0]['product'], self.product.id)
def test_filter_by_quantity_range(self):
"""测试按数量范围过滤"""
@@ -401,8 +401,8 @@ class PrintingJobAPITestCase(TestCase):
response = self.client.get('/api/v1/printing-jobs/?quantity_min=100&quantity_max=200')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['quantity'], 150)
self.assertEqual(response.data['count'], 1)
self.assertEqual(response.data['results'][0]['quantity'], 150)
def test_search_by_product_name(self):
"""测试按产品名称搜索"""
@@ -433,8 +433,8 @@ class PrintingJobAPITestCase(TestCase):
response = self.client.get('/api/v1/printing-jobs/?search=特殊')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertIn('特殊', response.data[0]['product_name'])
self.assertEqual(response.data['count'], 1)
self.assertIn('特殊', response.data['results'][0]['product_name'])
def test_ordering(self):
"""测试排序"""
@@ -458,13 +458,13 @@ class PrintingJobAPITestCase(TestCase):
# 按数量升序
response = self.client.get('/api/v1/printing-jobs/?ordering=quantity')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data[0]['quantity'], 100)
self.assertEqual(response.data[1]['quantity'], 200)
self.assertEqual(response.data['results'][0]['quantity'], 100)
self.assertEqual(response.data['results'][1]['quantity'], 200)
# 按数量降序
response = self.client.get('/api/v1/printing-jobs/?ordering=-quantity')
self.assertEqual(response.data[0]['quantity'], 200)
self.assertEqual(response.data[1]['quantity'], 100)
self.assertEqual(response.data['results'][0]['quantity'], 200)
self.assertEqual(response.data['results'][1]['quantity'], 100)
def test_validate_quantity_positive(self):
"""测试数量必须大于0"""
@@ -570,8 +570,8 @@ class PrintingJobAPITestCase(TestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK)
# 验证列表中的状态字段
self.assertIn('status', response.data[0])
self.assertIn('is_completed', response.data[0])
self.assertIn('status', response.data['results'][0])
self.assertIn('is_completed', response.data['results'][0])
def test_job_completion_status(self):
"""测试任务完成状态判断"""

View File

@@ -5,7 +5,6 @@ from rest_framework import viewsets, filters, status
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import BasePermission
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.permissions import DjangoModelPermissions
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser
from django.db.models import CharField, Prefetch
@@ -15,6 +14,8 @@ from django.utils.decorators import method_decorator
from django_filters.rest_framework import DjangoFilterBackend
from django_filters import rest_framework as django_filters
from django_filters import IsoDateTimeFilter
from flower.viewsets import LimitedModelViewSet
from printing import models
from basic_info.models import MerchantTypeEnum
@@ -83,7 +84,7 @@ class PrintingOrderFilterSet(django_filters.FilterSet):
@method_decorator(cache_page(20), name='list')
class PrintingOrderViewSet(viewsets.ModelViewSet):
class PrintingOrderViewSet(LimitedModelViewSet):
"""
印染订单 ViewSet
@@ -113,7 +114,6 @@ class PrintingOrderViewSet(viewsets.ModelViewSet):
"""
queryset = models.PrintingOrder.objects.all()
permission_classes = [DjangoModelPermissions]
pagination_class = LimitOffsetPagination
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filterset_class = PrintingOrderFilterSet
search_fields = ['customer__name', 'fabric', 'area', 'craft', 'description']
@@ -253,7 +253,7 @@ class PrintingJobFilterSet(django_filters.FilterSet):
fields = ['printing_order', 'product']
class PrintingJobViewSet(viewsets.ModelViewSet):
class PrintingJobViewSet(LimitedModelViewSet):
"""
印染款式明细 ViewSet
@@ -288,7 +288,6 @@ class PrintingJobViewSet(viewsets.ModelViewSet):
"""
queryset = models.PrintingJob.objects.all()
permission_classes = [DjangoModelPermissions, IsPrintingFactory]
pagination_class = LimitOffsetPagination
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filterset_class = PrintingJobFilterSet
search_fields = ['product__name', 'unit', 'size', 'description']
@@ -558,7 +557,7 @@ class PlateOrderFilterSet(django_filters.FilterSet):
@method_decorator(cache_page(20), name='list')
class PlateOrderViewSet(viewsets.ModelViewSet):
class PlateOrderViewSet(LimitedModelViewSet):
"""
开版订单 ViewSet
@@ -607,7 +606,6 @@ class PlateOrderViewSet(viewsets.ModelViewSet):
queryset = models.PlateOrder.objects.all()
permission_classes = [DjangoModelPermissions]
parser_classes = [MultiPartParser, FormParser, JSONParser] # 支持文件上传
pagination_class = LimitOffsetPagination
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filterset_class = PlateOrderFilterSet
# design_code_normalized: 当 design_code 为空时用 id 兜底,便于搜索数字编号