1
0
forked from erp-dev/erp

feat: added put/patch api to main oobject of business module

This commit is contained in:
2025-12-12 14:45:51 +08:00
parent 1a8c446365
commit 9e1f994416
14 changed files with 11611 additions and 0 deletions

View File

@@ -285,6 +285,38 @@ class PurchaseOrderAPITestCase(TestCase):
order = business_models.PurchaseOrder.objects.get(id=order_id)
self.assertEqual(order.status, business_models.PurchaseOrderStatusEnum.PENDING)
def test_update_purchase_order_success(self):
order_id = self._create_purchase_order(self.strict_payload)
payload = {
'supplier': self.supplier.id,
'warehouse': self.warehouse_relaxed.id,
'order_date': '2025-12-01',
'items': [
{
'product_id': self.product.id,
'quantity': 200,
'num_of_rolls': 4,
'price': '12.88',
}
],
'remarks': '更新采购单',
}
response = self.client.put(f'/api/v1/purchase-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['remarks'], '更新采购单')
def test_update_purchase_order_rejects_non_pending(self):
order_id = self._create_purchase_order(self.relaxed_payload)
self.client.post(
f'/api/v1/purchase-orders/{order_id}/review/',
{'action': 'approve'},
format='json',
)
payload = copy.deepcopy(self.relaxed_payload)
response = self.client.put(f'/api/v1/purchase-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('不可修改', response.data['error'])
@override_settings(
CELERY_TASK_ALWAYS_EAGER=True,
@@ -432,6 +464,51 @@ class SalesOrderAPITestCase(TestCase):
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('consume_detail_ids', response.data['error'])
def test_update_sales_order_success(self):
order_id = self._create_sales_order(self.strict_in_payload)
payload = {
'customer': self.customer.id,
'warehouse': self.warehouse_relaxed.id,
'order_date': '2025-12-01',
'items': [
{
'product_id': self.product.id,
'quantity': 100,
'num_of_rolls': 2,
'price': '22.5',
}
],
'remarks': '更新后的销售单',
}
response = self.client.put(f'/api/v1/sales-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['remarks'], '更新后的销售单')
self.assertEqual(response.data['quantity_of_rolls'], [[]])
def test_update_sales_order_rejects_non_pending(self):
order_id = self._create_sales_order(self.strict_in_payload)
self.client.post(
f'/api/v1/sales-orders/{order_id}/review/',
{'action': 'approve'},
format='json',
)
payload = {
'customer': self.customer.id,
'warehouse': self.warehouse_relaxed.id,
'order_date': '2025-12-02',
'items': [
{
'product_id': self.product.id,
'quantity': 10,
'num_of_rolls': 1,
'price': '30',
}
],
}
response = self.client.put(f'/api/v1/sales-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('不可修改', response.data['error'])
def test_create_sales_order_with_printing_job_binding(self):
payload = copy.deepcopy(self.relaxed_payload)
payload['items'][0]['printing_job'] = self.printing_job_for_sales.id
@@ -598,6 +675,38 @@ class PurchaseReturnOrderAPITestCase(TestCase):
order = business_models.PurchaseReturnOrder.objects.get(id=order_id)
self.assertEqual(order.status, business_models.PurchaseReturnStatusEnum.PENDING)
def test_update_purchase_return_order_success(self):
order_id = self._create_purchase_return_order(self.strict_payload)
payload = {
'supplier': self.supplier.id,
'warehouse': self.warehouse_relaxed.id,
'return_date': '2025-12-05',
'items': [
{
'product_id': self.product.id,
'quantity': 50,
'num_of_rolls': 2,
'price': '12.0',
}
],
'remarks': '更新采退',
}
response = self.client.put(f'/api/v1/purchase-return-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['remarks'], '更新采退')
def test_update_purchase_return_order_rejects_non_pending(self):
order_id = self._create_purchase_return_order(self.strict_payload)
self.client.post(
f'/api/v1/purchase-return-orders/{order_id}/review/',
{'action': 'approve'},
format='json',
)
payload = copy.deepcopy(self.strict_payload)
response = self.client.put(f'/api/v1/purchase-return-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('不可修改', response.data['error'])
@override_settings(
CELERY_TASK_ALWAYS_EAGER=True,
@@ -714,6 +823,50 @@ class SalesReturnOrderAPITestCase(TestCase):
order = business_models.SalesReturnOrder.objects.get(id=order_id)
self.assertEqual(order.status, business_models.SalesReturnStatusEnum.PENDING)
def test_update_sales_return_order_success(self):
order_id = self._create_sales_return_order(self.strict_payload)
payload = {
'customer': self.customer.id,
'warehouse': self.warehouse_relaxed.id,
'return_date': '2025-12-02',
'items': [
{
'product_id': self.product.id,
'quantity': 40,
'num_of_rolls': 2,
'price': '18.0',
}
],
'remarks': '更新销退',
}
response = self.client.put(f'/api/v1/sales-return-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['remarks'], '更新销退')
def test_update_sales_return_order_rejects_non_pending(self):
order_id = self._create_sales_return_order(self.strict_payload)
self.client.post(
f'/api/v1/sales-return-orders/{order_id}/review/',
{'action': 'approve'},
format='json',
)
payload = {
'customer': self.customer.id,
'warehouse': self.warehouse_relaxed.id,
'return_date': '2025-12-03',
'items': [
{
'product_id': self.product.id,
'quantity': 20,
'num_of_rolls': 1,
'price': '17',
}
],
}
response = self.client.put(f'/api/v1/sales-return-orders/{order_id}/', payload, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('不可修改', response.data['error'])
@override_settings(
CELERY_TASK_ALWAYS_EAGER=True,