130 lines
5.0 KiB
Python
130 lines
5.0 KiB
Python
"""物流管理扩展测试。
|
|
|
|
测试用例:
|
|
- TASK-001c: 物流任务列表查询
|
|
- TASK-001d: 物流任务详情
|
|
- TASK-001e: 更新运单号
|
|
- TASK-001f: 取消物流任务
|
|
- LOG-001: 手动添加物流轨迹
|
|
- LOG-002: 查询物流轨迹
|
|
- TASK-013b: 批量提交运单号
|
|
- TASK-013c: 查询运单列表
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.logistics
|
|
@pytest.mark.p1
|
|
class TestLogisticsTaskCRUD:
|
|
"""物流任务 CRUD 扩展。"""
|
|
|
|
def test_task_list(self, client, admin_headers, make_task):
|
|
"""TASK-001c: 物流任务列表查询。"""
|
|
make_task()
|
|
resp = client.get("/api/logistics/tasks", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
assert "list" in resp.json()["data"]
|
|
|
|
def test_task_detail(self, client, admin_headers, make_task):
|
|
"""TASK-001d: 物流任务详情。"""
|
|
task = make_task()
|
|
resp = client.get(f"/api/logistics/tasks/{task.id}", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
|
|
def test_update_tracking_number(self, client, admin_headers, make_task):
|
|
"""TASK-001e: 更新运单号。"""
|
|
task = make_task()
|
|
resp = client.put(f"/api/logistics/tasks/{task.id}/tracking", headers=admin_headers, json={
|
|
"tracking_number": "SF1234567890",
|
|
"express_company": "顺丰",
|
|
})
|
|
assert resp.status_code in (200, 422)
|
|
|
|
def test_cancel_logistics_task(self, client, admin_headers, make_task):
|
|
"""TASK-001f: 取消物流任务。"""
|
|
task = make_task(status="pending")
|
|
resp = client.post(f"/api/logistics/tasks/{task.id}/cancel", headers=admin_headers, json={
|
|
"cancel_reason": "客户取消",
|
|
})
|
|
assert resp.status_code in (200, 400)
|
|
|
|
def test_create_task_invalid_order(self, client, admin_headers):
|
|
"""无效订单创建任务应失败。"""
|
|
resp = client.post("/api/logistics/tasks", headers=admin_headers, json={
|
|
"order_id": 99999,
|
|
"driver_id": 5,
|
|
"pickup_address": "工厂",
|
|
"delivery_address": "仓库",
|
|
})
|
|
assert resp.status_code in (400, 404, 422)
|
|
|
|
def test_driver_task_detail(self, client, driver_headers, make_task):
|
|
"""司机查看任务详情。"""
|
|
task = make_task(driver_id=5)
|
|
resp = client.get(f"/api/driver/tasks/{task.id}", headers=driver_headers)
|
|
assert resp.status_code == 200
|
|
|
|
def test_driver_accept_task(self, client, driver_headers, make_task):
|
|
"""司机接单。"""
|
|
task = make_task(status="pending", driver_id=5)
|
|
resp = client.post(f"/api/driver/tasks/{task.id}/accept", headers=driver_headers, json={})
|
|
assert resp.status_code in (200, 422)
|
|
|
|
def test_driver_pickup_task(self, client, driver_headers, make_task):
|
|
"""司机提货。"""
|
|
task = make_task(status="accepted", driver_id=5)
|
|
resp = client.post(f"/api/driver/tasks/{task.id}/pickup", headers=driver_headers, json={})
|
|
assert resp.status_code in (200, 400, 422)
|
|
|
|
def test_driver_deliver_task(self, client, driver_headers, make_task):
|
|
"""司机送达。"""
|
|
task = make_task(status="picked_up", driver_id=5)
|
|
resp = client.post(f"/api/driver/tasks/{task.id}/deliver", headers=driver_headers, json={})
|
|
assert resp.status_code in (200, 422)
|
|
|
|
|
|
@pytest.mark.logistics
|
|
@pytest.mark.p1
|
|
class TestLogisticsTrace:
|
|
"""物流轨迹测试。"""
|
|
|
|
def test_create_logistics_trace(self, client, admin_headers, make_order):
|
|
"""LOG-001: 手动添加物流轨迹。"""
|
|
order = make_order(order_status="approved")
|
|
resp = client.post(f"/api/logistics/{order.id}/trace", headers=admin_headers, json={
|
|
"description": "货物已发出",
|
|
"source": "manual",
|
|
})
|
|
assert resp.status_code in (200, 404, 422)
|
|
|
|
def test_query_logistics_trace(self, client, admin_headers, make_order):
|
|
"""LOG-002: 查询物流轨迹。"""
|
|
order = make_order(order_status="approved")
|
|
resp = client.get(f"/api/logistics/{order.id}/trace", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
|
|
|
|
@pytest.mark.logistics
|
|
@pytest.mark.p1
|
|
class TestWaybill:
|
|
"""运单管理测试。"""
|
|
|
|
def test_submit_waybills(self, client, driver_headers, make_task):
|
|
"""TASK-013b: 批量提交运单号。"""
|
|
task = make_task(status="accepted", driver_id=5)
|
|
resp = client.post(f"/api/driver/tasks/{task.id}/waybills", headers=driver_headers, json={
|
|
"waybills": [
|
|
{"tracking_number": "SF001", "express_company": "顺丰"},
|
|
{"tracking_number": "YT002", "express_company": "圆通"},
|
|
]
|
|
})
|
|
assert resp.status_code in (200, 422)
|
|
|
|
def test_list_waybills(self, client, driver_headers, make_task):
|
|
"""TASK-013c: 查询运单列表。"""
|
|
task = make_task(status="accepted", driver_id=5)
|
|
resp = client.get(f"/api/driver/tasks/{task.id}/waybills", headers=driver_headers)
|
|
assert resp.status_code == 200
|