forked from erp-dev/erp
fix: added permission for plate_order and printing_order api
This commit is contained in:
@@ -264,3 +264,165 @@ class SalesItemByPrintingOrderAPITestCase(TestCase):
|
||||
response = self.client.get(url)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
|
||||
class ShipmentCreateAPITestCase(TestCase):
|
||||
"""测试创建出货单 API"""
|
||||
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
|
||||
# 创建商户
|
||||
self.merchant = basic_models.Merchant.objects.create(
|
||||
name='测试印花厂',
|
||||
type=basic_models.MerchantTypeEnum.FACTORY
|
||||
)
|
||||
|
||||
# 创建用户
|
||||
self.user = User.objects.create_user(
|
||||
username='testuser',
|
||||
password='testpass123',
|
||||
email='test@example.com'
|
||||
)
|
||||
|
||||
# 创建员工并关联商户
|
||||
self.employee = basic_models.Employee.objects.create(
|
||||
sys_user=self.user,
|
||||
merchant=self.merchant,
|
||||
name='测试员工',
|
||||
mobile='13800138000',
|
||||
status=basic_models.EmployeeStatusEnum.ACTIVE
|
||||
)
|
||||
|
||||
# 创建客户
|
||||
self.customer = basic_models.Customer.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='测试客户',
|
||||
mobile='13900139000',
|
||||
area='测试地区'
|
||||
)
|
||||
|
||||
# 创建销售品(未关联出货单)
|
||||
self.sales_item1 = shipment_models.SalesItem.objects.create(
|
||||
name='销售品1',
|
||||
quantity=Decimal('50.00'),
|
||||
unit=shipment_models.UnitChoices.METER,
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
self.sales_item2 = shipment_models.SalesItem.objects.create(
|
||||
name='销售品2',
|
||||
quantity=Decimal('30.00'),
|
||||
unit=shipment_models.UnitChoices.METER,
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
# 创建已关联出货单的销售品
|
||||
self.existing_shipment = shipment_models.Shipment.objects.create(
|
||||
customer=self.customer,
|
||||
shipment_date='2026-01-13',
|
||||
created_by=self.user,
|
||||
)
|
||||
self.sales_item_shipped = shipment_models.SalesItem.objects.create(
|
||||
name='销售品3(已出货)',
|
||||
quantity=Decimal('100.00'),
|
||||
unit=shipment_models.UnitChoices.METER,
|
||||
shipment=self.existing_shipment,
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
# 认证用户
|
||||
self.client.force_authenticate(user=self.user)
|
||||
|
||||
def test_create_shipment_success(self):
|
||||
"""测试成功创建出货单"""
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'shipment_date': '2026-01-14',
|
||||
'remark': '测试备注',
|
||||
'sales_items': [self.sales_item1.id, self.sales_item2.id]
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
result = response.json()
|
||||
|
||||
# 验证返回数据
|
||||
self.assertIn('id', result)
|
||||
self.assertEqual(result['customer'], self.customer.id)
|
||||
self.assertEqual(result['customer_name'], self.customer.name)
|
||||
self.assertEqual(result['shipment_date'], '2026-01-14')
|
||||
self.assertEqual(result['remark'], '测试备注')
|
||||
self.assertEqual(result['items_count'], 2)
|
||||
self.assertEqual(result['created_by_id'], self.user.id)
|
||||
|
||||
# 验证销售品已关联到出货单
|
||||
self.sales_item1.refresh_from_db()
|
||||
self.sales_item2.refresh_from_db()
|
||||
self.assertEqual(self.sales_item1.shipment_id, result['id'])
|
||||
self.assertEqual(self.sales_item2.shipment_id, result['id'])
|
||||
|
||||
def test_create_shipment_without_sales_items(self):
|
||||
"""测试创建出货单但不关联销售品"""
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'shipment_date': '2026-01-14',
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
result = response.json()
|
||||
self.assertEqual(result['items_count'], 0)
|
||||
|
||||
def test_create_shipment_customer_not_found(self):
|
||||
"""测试客户不存在"""
|
||||
data = {
|
||||
'customer': 99999,
|
||||
'shipment_date': '2026-01-14',
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('不存在', response.json()['detail'])
|
||||
|
||||
def test_create_shipment_sales_item_not_found(self):
|
||||
"""测试销售品不存在"""
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'shipment_date': '2026-01-14',
|
||||
'sales_items': [99999]
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('不存在', response.json()['detail'])
|
||||
|
||||
def test_create_shipment_sales_item_already_shipped(self):
|
||||
"""测试销售品已关联到其他出货单"""
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'shipment_date': '2026-01-14',
|
||||
'sales_items': [self.sales_item_shipped.id]
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('已关联', response.json()['detail'])
|
||||
|
||||
def test_create_shipment_unauthenticated(self):
|
||||
"""测试未认证用户"""
|
||||
self.client.logout()
|
||||
|
||||
data = {
|
||||
'customer': self.customer.id,
|
||||
'shipment_date': '2026-01-14',
|
||||
}
|
||||
|
||||
response = self.client.post('/api/v1/shipment/shipments/', data, format='json')
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
Reference in New Issue
Block a user