1
0
forked from erp-dev/erp

feat: added some filed to shipment serializers

This commit is contained in:
2026-04-23 17:51:48 +08:00
parent 35a03218d8
commit d4fbb2c7fe
11 changed files with 287 additions and 1 deletions

View File

@@ -1633,6 +1633,7 @@ class ShipmentQueryAPITestCase(TestCase):
process=self.process1,
created_by=self.user1,
external_order_id="QUERY-PO-001",
description="查询订单备注",
)
self.printing_job1 = printing_models.PrintingJob.objects.create(
merchant=self.merchant1,
@@ -1692,6 +1693,8 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertIn("area", item)
self.assertIn("delivery_id", item)
self.assertIsNone(item["delivery_id"])
self.assertEqual(item["fabric"], "查询面料")
self.assertEqual(item["order_description"], "查询订单备注")
self.assertEqual(item["area"], "A1")
self.assertEqual(item["status"], shipment_models.ShipmentStatus.DRAFT)
self.assertEqual(item["status_display"], "草稿(未发布)")
@@ -1837,6 +1840,8 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertIn("contact_phone", result)
self.assertIn("delivery_id", result)
self.assertIsNone(result["delivery_id"])
self.assertEqual(result["fabric"], "查询面料")
self.assertEqual(result["order_description"], "查询订单备注")
self.assertEqual(result["id"], self.shipment1.id)
self.assertIn("area", result)
self.assertEqual(result["area"], "A1")
@@ -1949,6 +1954,25 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertIn("remark", target)
self.assertEqual(target["remark"], "X备注")
def test_list_shipments_without_sales_items_returns_null_fabric(self):
shipment_without_sales_items = shipment_models.Shipment.objects.create(
merchant=self.merchant1,
customer=self.customer1,
shipment_date="2026-01-20",
created_by=self.user1,
remark="no-items",
area="A5",
)
resp = self.client.get("/api/v1/shipment/shipments/")
self.assertEqual(resp.status_code, status.HTTP_200_OK)
item = next(it for it in resp.json()["results"] if it["id"] == shipment_without_sales_items.id)
self.assertIn("fabric", item)
self.assertIsNone(item["fabric"])
self.assertIn("order_description", item)
self.assertIsNone(item["order_description"])
def test_retrieve_other_merchant_shipment_404(self):
resp = self.client.get(f"/api/v1/shipment/shipments/{self.shipment2.id}/")
self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND)
@@ -2697,6 +2721,7 @@ class ShipmentDeliveryAPITestCase(APITestCase):
"vehicle_capacity": "9.6米厢车",
"remark": "先装车",
"internal_remark": "注意对账",
"shipment_order_ids": [self.shipment2.id, self.shipment1.id],
"shipments": [self.shipment1.id, self.shipment2.id],
},
format="json",
@@ -2710,6 +2735,7 @@ class ShipmentDeliveryAPITestCase(APITestCase):
self.assertEqual(data["vehicle_capacity"], "9.6米厢车")
self.assertEqual(data["remark"], "先装车")
self.assertEqual(data["internal_remark"], "注意对账")
self.assertEqual(data["shipment_order_ids"], [self.shipment2.id, self.shipment1.id])
self.assertEqual(data["status"], shipment_models.ShipmentDeliveryStatus.PENDING)
self.assertEqual(data["shipments_count"], 2)
self.assertEqual(data["merchant_id"], self.merchant.id)
@@ -2722,6 +2748,34 @@ class ShipmentDeliveryAPITestCase(APITestCase):
self.assertIsNotNone(self.shipment1.delivery_id)
self.assertEqual(self.shipment1.delivery_id, self.shipment2.delivery_id)
def test_create_delivery_defaults_shipment_order_ids_to_empty_list(self):
resp = self.client.post(
"/api/v1/shipment/deliveries/",
{
"driver_name": "张司机",
"vehicle_trip": "KD-001-A",
"shipments": [self.shipment1.id],
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
self.assertEqual(resp.json()["shipment_order_ids"], [])
def test_create_delivery_rejects_non_array_shipment_order_ids(self):
resp = self.client.post(
"/api/v1/shipment/deliveries/",
{
"driver_name": "张司机",
"vehicle_trip": "KD-001-B",
"shipment_order_ids": {"bad": "value"},
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("shipment_order_ids", resp.json())
def test_create_delivery_rejects_shipment_bound_to_other_delivery(self):
resp = self.client.post(
"/api/v1/shipment/deliveries/",
@@ -2817,6 +2871,11 @@ class ShipmentDeliveryAPITestCase(APITestCase):
for item in data["shipments"]:
self.assertIn("delivery_id", item)
self.assertEqual(item["delivery_id"], delivery.id)
self.assertIn("fabric", item)
self.assertIn("order_description", item)
first_shipment = next(item for item in data["shipments"] if item["id"] == self.shipment1.id)
self.assertIsNone(first_shipment["fabric"])
self.assertIsNone(first_shipment["order_description"])
def test_patch_delivery_updates_fields_and_replaces_shipments(self):
delivery = shipment_models.ShipmentDelivery.objects.create(
@@ -2837,6 +2896,7 @@ class ShipmentDeliveryAPITestCase(APITestCase):
"vehicle_capacity": "13米高栏",
"remark": "改派车辆",
"internal_remark": "已电话确认",
"shipment_order_ids": [self.shipment2.id],
"shipments": [self.shipment2.id],
},
format="json",
@@ -2850,6 +2910,7 @@ class ShipmentDeliveryAPITestCase(APITestCase):
self.assertEqual(data["vehicle_capacity"], "13米高栏")
self.assertEqual(data["remark"], "改派车辆")
self.assertEqual(data["internal_remark"], "已电话确认")
self.assertEqual(data["shipment_order_ids"], [self.shipment2.id])
self.assertEqual(data["operator_id"], self.employee.id)
self.assertEqual(data["shipments_count"], 1)
self.assertEqual(data["shipments"][0]["id"], self.shipment2.id)
@@ -2859,6 +2920,45 @@ class ShipmentDeliveryAPITestCase(APITestCase):
self.assertIsNone(self.shipment1.delivery_id)
self.assertEqual(self.shipment2.delivery_id, delivery.id)
def test_patch_delivery_allows_null_shipment_order_ids(self):
delivery = shipment_models.ShipmentDelivery.objects.create(
merchant=self.merchant,
driver_name="张司机",
vehicle_trip="KD-005-N",
shipment_order_ids=[self.shipment1.id],
created_by=self.user,
)
resp = self.client.patch(
f"/api/v1/shipment/deliveries/{delivery.id}/",
{
"shipment_order_ids": None,
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertIsNone(resp.json()["shipment_order_ids"])
def test_patch_delivery_rejects_non_array_shipment_order_ids(self):
delivery = shipment_models.ShipmentDelivery.objects.create(
merchant=self.merchant,
driver_name="张司机",
vehicle_trip="KD-005-C",
created_by=self.user,
)
resp = self.client.patch(
f"/api/v1/shipment/deliveries/{delivery.id}/",
{
"shipment_order_ids": "not-a-list",
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("shipment_order_ids", resp.json())
def test_modify_delivery_status_sets_timestamps(self):
delivery = shipment_models.ShipmentDelivery.objects.create(
merchant=self.merchant,