1
0
forked from erp-dev/erp

feat: added type field into warehouse model

This commit is contained in:
2025-11-20 15:44:35 +08:00
parent 6091280fdc
commit 2a838199fa
22 changed files with 1384 additions and 38 deletions

View File

@@ -1,3 +1,166 @@
from django.test import TestCase
from django.core.exceptions import ValidationError
from .models import (
Merchant, MerchantTypeEnum, WareHouse, WarehouseTypeEnum,
WareHouseModeEnum, EmployeeType, Employee, EmployeeStatusEnum
)
# Create your tests here.
class WarehouseTypeTestCase(TestCase):
"""测试仓库类型字段"""
def setUp(self):
"""设置测试数据"""
self.merchant = Merchant.objects.create(
name='测试商户',
type=MerchantTypeEnum.STORE
)
def test_warehouse_default_type(self):
"""测试仓库类型的默认值"""
warehouse = WareHouse.objects.create(
merchant=self.merchant,
name='默认仓库',
)
self.assertEqual(warehouse.type, WarehouseTypeEnum.WHOLE)
def test_warehouse_type_whole(self):
"""测试创建整仓"""
warehouse = WareHouse.objects.create(
merchant=self.merchant,
name='整仓1',
type=WarehouseTypeEnum.WHOLE
)
self.assertEqual(warehouse.type, WarehouseTypeEnum.WHOLE)
self.assertEqual(warehouse.get_type_display(), '整仓')
def test_warehouse_type_scattered(self):
"""测试创建散仓"""
warehouse = WareHouse.objects.create(
merchant=self.merchant,
name='散仓1',
type=WarehouseTypeEnum.SCATTERED
)
self.assertEqual(warehouse.type, WarehouseTypeEnum.SCATTERED)
self.assertEqual(warehouse.get_type_display(), '散仓')
def test_warehouse_type_enum_values(self):
"""测试仓库类型枚举的所有值"""
self.assertEqual(WarehouseTypeEnum.WHOLE.value, 1)
self.assertEqual(WarehouseTypeEnum.WHOLE.label, '整仓')
self.assertEqual(WarehouseTypeEnum.SCATTERED.value, 2)
self.assertEqual(WarehouseTypeEnum.SCATTERED.label, '散仓')
def test_warehouse_with_all_fields(self):
"""测试带有所有字段的仓库"""
warehouse = WareHouse.objects.create(
merchant=self.merchant,
name='完整仓库',
type=WarehouseTypeEnum.SCATTERED,
mode=WareHouseModeEnum.RESTRICT_IN_OUT,
location='测试地址',
area='测试区域',
contact='张三',
mobile='13800138000',
description='测试描述'
)
self.assertEqual(warehouse.type, WarehouseTypeEnum.SCATTERED)
self.assertEqual(warehouse.mode, WareHouseModeEnum.RESTRICT_IN_OUT)
self.assertEqual(warehouse.name, '完整仓库')
class EmployeeTypeTestCase(TestCase):
"""测试员工职位类型"""
def setUp(self):
"""设置测试数据"""
self.merchant = Merchant.objects.create(
name='测试商户',
type=MerchantTypeEnum.STORE
)
def test_create_employee_type(self):
"""测试创建员工职位类型"""
emp_type = EmployeeType.objects.create(
merchant=self.merchant,
title='测试职位',
description='职位描述'
)
self.assertEqual(emp_type.title, '测试职位')
self.assertEqual(emp_type.description, '职位描述')
self.assertEqual(str(emp_type), '测试职位')
def test_employee_type_unique_together(self):
"""测试商户+职位名称的唯一性约束"""
EmployeeType.objects.create(
merchant=self.merchant,
title='打纸'
)
# 同一商户不能创建重复职位
with self.assertRaises(Exception):
EmployeeType.objects.create(
merchant=self.merchant,
title='打纸'
)
def test_employee_with_position(self):
"""测试员工关联职位"""
emp_type = EmployeeType.objects.create(
merchant=self.merchant,
title='滚筒工'
)
employee = Employee.objects.create(
merchant=self.merchant,
name='张三',
position=emp_type,
status=EmployeeStatusEnum.ACTIVE
)
self.assertEqual(employee.position, emp_type)
self.assertEqual(employee.job_type, '滚筒工') # 测试 job_type 属性
def test_employee_without_position(self):
"""测试员工没有职位时 job_type 返回空字符串"""
employee = Employee.objects.create(
merchant=self.merchant,
name='李四',
status=EmployeeStatusEnum.ACTIVE
)
self.assertIsNone(employee.position)
self.assertEqual(employee.job_type, '')
def test_employee_type_reverse_field(self):
"""测试预留字段"""
emp_type = EmployeeType.objects.create(
merchant=self.merchant,
title='仓库管理员',
reverse='预留数据'
)
self.assertEqual(emp_type.reverse, '预留数据')
def test_multiple_employees_same_position(self):
"""测试多个员工可以有相同职位"""
emp_type = EmployeeType.objects.create(
merchant=self.merchant,
title='打纸工'
)
emp1 = Employee.objects.create(
merchant=self.merchant,
name='员工1',
position=emp_type
)
emp2 = Employee.objects.create(
merchant=self.merchant,
name='员工2',
position=emp_type
)
self.assertEqual(emp1.job_type, '打纸工')
self.assertEqual(emp2.job_type, '打纸工')
self.assertEqual(emp_type.employees.count(), 2)