forked from erp-dev/erp
167 lines
5.5 KiB
Python
167 lines
5.5 KiB
Python
from django.test import TestCase
|
|
from django.core.exceptions import ValidationError
|
|
from .models import (
|
|
Merchant, MerchantTypeEnum, WareHouse, WarehouseTypeEnum,
|
|
WareHouseModeEnum, EmployeeType, Employee, EmployeeStatusEnum
|
|
)
|
|
|
|
|
|
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)
|