1
0
forked from erp-dev/erp
Files
erpnew/printing/test_plate_order.py

228 lines
8.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
PlateOrder 模型测试
"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.utils import timezone
from decimal import Decimal
from printing import models as printing_models
from basic_info import models as basic_models
from stateflow import models as stateflow_models
User = get_user_model()
class PlateOrderModelTestCase(TestCase):
"""测试 PlateOrder 模型"""
def setUp(self):
"""设置测试数据"""
self.user = User.objects.create_user(username='testuser', password='testpass')
# 创建商户
self.merchant = basic_models.Merchant.objects.create(
name='测试印花厂',
type=basic_models.MerchantTypeEnum.FACTORY
)
# 创建客户
self.customer = basic_models.Customer.objects.create(
merchant=self.merchant,
name='测试客户',
mobile='13900139000',
area='测试地区'
)
# 创建员工
self.salesperson = basic_models.Employee.objects.create(
sys_user=self.user,
merchant=self.merchant,
name='销售员',
mobile='13800138000',
job_type=basic_models.EmployeeTypeEnum.PRINTER,
status=basic_models.EmployeeStatusEnum.ACTIVE
)
self.merchandiser = basic_models.Employee.objects.create(
merchant=self.merchant,
name='跟单员',
mobile='13800138001',
job_type=basic_models.EmployeeTypeEnum.ROLLING,
status=basic_models.EmployeeStatusEnum.ACTIVE
)
def test_create_plate_order_basic(self):
"""测试创建基本的开版订单"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES001',
customer=self.customer,
plate_type='首版',
urgency_level='正常',
style_name='测试款式',
fabric='纯棉',
width='150cm',
)
self.assertIsNotNone(plate_order.id)
self.assertEqual(plate_order.design_code, 'DES001')
self.assertEqual(plate_order.customer, self.customer)
self.assertEqual(plate_order.style_name, '测试款式')
def test_plate_order_with_employees(self):
"""测试带销售员和跟单员的开版订单"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES002',
customer=self.customer,
salesperson=self.salesperson,
merchandiser=self.merchandiser,
urgency_level='加急',
)
self.assertEqual(plate_order.salesperson, self.salesperson)
self.assertEqual(plate_order.merchandiser, self.merchandiser)
self.assertEqual(plate_order.urgency_level, '加急')
def test_plate_order_with_ratings(self):
"""测试带质量评级的开版订单"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES003',
customer=self.customer,
drawing_rating='A',
color_matching_rating='B',
sample_rating='A',
difficulty_rating='',
is_mark_frame=True,
)
self.assertEqual(plate_order.drawing_rating, 'A')
self.assertEqual(plate_order.color_matching_rating, 'B')
self.assertEqual(plate_order.sample_rating, 'A')
self.assertEqual(plate_order.difficulty_rating, '')
self.assertTrue(plate_order.is_mark_frame)
def test_plate_order_with_dates(self):
"""测试带时间信息的开版订单"""
now = timezone.now()
completion_date = now + timezone.timedelta(days=7)
required_date = (now + timezone.timedelta(days=10)).date()
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES004',
customer=self.customer,
plate_date=now,
completion_date=completion_date,
required_completion_date=required_date,
)
self.assertIsNotNone(plate_order.plate_date)
self.assertIsNotNone(plate_order.completion_date)
self.assertIsNotNone(plate_order.required_completion_date)
def test_plate_order_with_sample_info(self):
"""测试带样品信息的开版订单"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES005',
customer=self.customer,
sample_meter='米样1',
required_sample_meters=Decimal('100.50'),
)
self.assertEqual(plate_order.sample_meter, '米样1')
self.assertEqual(plate_order.required_sample_meters, Decimal('100.50'))
def test_plate_order_status_without_business_object(self):
"""测试没有 business_object 时的状态"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES006',
customer=self.customer,
)
self.assertEqual(plate_order.status, '未开始')
self.assertFalse(plate_order.is_completed)
self.assertFalse(plate_order.has_started) # 因为没有 business_object
self.assertEqual(plate_order.progress_percentage, 0.0)
def test_plate_order_with_business_object(self):
"""测试带 business_object 的开版订单"""
# 创建流程
state1 = stateflow_models.State.objects.create(name='画图')
state2 = stateflow_models.State.objects.create(name='调色')
state3 = stateflow_models.State.objects.create(name='套样')
process = stateflow_models.Process.objects.create(name='开版流程')
process.replace_nodes([state1, state2, state3])
# 创建 BusinessObject
business_object = stateflow_models.BusinessObject.objects.create(
name='PlateOrder-Test',
process=process,
)
# 创建开版订单
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES007',
customer=self.customer,
business_object=business_object,
)
self.assertIsNotNone(plate_order.business_object)
self.assertEqual(plate_order.progress_percentage, 0.0)
# 推进一个状态
from stateflow.services import advance_to_next_state
advance_to_next_state(business_object, self.user)
# 刷新并检查状态
plate_order.refresh_from_db()
self.assertEqual(plate_order.status, state1.name) # current_state 是最后完成的状态state1
self.assertFalse(plate_order.is_completed)
self.assertTrue(plate_order.has_started)
self.assertGreater(plate_order.progress_percentage, 0)
def test_plate_order_str(self):
"""测试字符串表示"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES008',
customer=self.customer,
)
self.assertEqual(str(plate_order), f'PlateOrder-{plate_order.id}')
def test_plate_order_with_approval_and_order_status(self):
"""测试带审批和订单状态的开版订单"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES009',
customer=self.customer,
approval_result='通过',
is_ordered=True,
customer_feedback='颜色需要调整',
)
self.assertEqual(plate_order.approval_result, '通过')
self.assertTrue(plate_order.is_ordered)
self.assertEqual(plate_order.customer_feedback, '颜色需要调整')
def test_plate_order_with_invalid_flag(self):
"""测试作废标记"""
plate_order = printing_models.PlateOrder.objects.create(
design_code='DES010',
customer=self.customer,
is_invalid=True,
)
self.assertTrue(plate_order.is_invalid)
def test_plate_order_nullable_fields(self):
"""测试可空字段"""
plate_order = printing_models.PlateOrder.objects.create(
customer=self.customer,
)
# 验证所有可空字段都可以为空
self.assertIsNone(plate_order.design_code)
self.assertIsNone(plate_order.plate_type)
self.assertIsNone(plate_order.plate_date)
self.assertIsNone(plate_order.salesperson)
self.assertIsNone(plate_order.merchandiser)
self.assertIsNone(plate_order.business_object)