1
0
forked from erp-dev/erp

feat: shipment change && version modelize

This commit is contained in:
2026-07-09 23:03:22 +08:00
parent 36e4bb6de6
commit 48e4782e1e
23 changed files with 947 additions and 36 deletions

View File

@@ -2430,6 +2430,79 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertEqual(data["results"][0]["id"], self.shipment1.id)
self.assertEqual(data["results"][0]["delivery_id"], delivery.id)
def test_list_shipments_supports_shipment_stage_filter_and_fields(self):
self.shipment1.address = ""
self.shipment1.save(update_fields=["address", "updated_at"])
deliverable = shipment_models.Shipment.objects.create(
merchant=self.merchant1,
customer=self.customer1,
shipment_date="2026-01-20",
created_by=self.user1,
address="绍兴市测试路 8 号",
)
scheduled_delivery = shipment_models.ShipmentDelivery.objects.create(
merchant=self.merchant1,
driver_name="排车司机",
vehicle_trip="STAGE-SCHEDULED",
status=shipment_models.ShipmentDeliveryStatus.PENDING,
created_by=self.user1,
)
scheduled = shipment_models.Shipment.objects.create(
merchant=self.merchant1,
customer=self.customer1,
shipment_date="2026-01-21",
created_by=self.user1,
address="已排车地址",
delivery=scheduled_delivery,
)
delivered_delivery = shipment_models.ShipmentDelivery.objects.create(
merchant=self.merchant1,
driver_name="送达司机",
vehicle_trip="STAGE-DELIVERED",
status=shipment_models.ShipmentDeliveryStatus.DELIVERED,
created_by=self.user1,
)
delivered = shipment_models.Shipment.objects.create(
merchant=self.merchant1,
customer=self.customer1,
shipment_date="2026-01-22",
created_by=self.user1,
address="已送达地址",
delivery=delivered_delivery,
)
cancelled = shipment_models.Shipment.objects.create(
merchant=self.merchant1,
customer=self.customer1,
shipment_date="2026-01-23",
created_by=self.user1,
address="取消地址",
status=shipment_models.ShipmentStatus.CANCELLED,
)
cases = [
("missing_address", self.shipment1.id, "待补地址"),
("deliverable", deliverable.id, "可送货"),
("scheduled", scheduled.id, "已排车"),
("delivered", delivered.id, "已送达"),
("cancelled", cancelled.id, "已取消"),
]
for stage, expected_id, expected_display in cases:
with self.subTest(stage=stage):
resp = self.client.get(f"/api/v1/shipment/shipments/?shipment_stage={stage}&limit=1")
self.assertEqual(resp.status_code, status.HTTP_200_OK)
data = resp.json()
self.assertEqual(data["count"], 1)
self.assertEqual(data["results"][0]["id"], expected_id)
self.assertEqual(data["results"][0]["shipment_stage"], stage)
self.assertEqual(data["results"][0]["shipment_stage_display"], expected_display)
def test_list_shipments_rejects_invalid_shipment_stage(self):
resp = self.client.get("/api/v1/shipment/shipments/?shipment_stage=unknown")
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("shipment_stage", resp.json())
def test_retrieve_shipment_success(self):
resp = self.client.get(f"/api/v1/shipment/shipments/{self.shipment1.id}/")
self.assertEqual(resp.status_code, status.HTTP_200_OK)