80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
import pytest
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_delivered_sales_order_cannot_be_updated_or_deleted(client):
|
|
payload = {
|
|
"customer_id": 1,
|
|
"delivery_date": None,
|
|
"remark": "test",
|
|
"items": [
|
|
{
|
|
"product_id": None,
|
|
"product_sku": "MOLD-001",
|
|
"product_name": "模具001",
|
|
"product_category": "模具",
|
|
"product_unit": "套",
|
|
"quantity": 1,
|
|
"unit_price": 1000.0,
|
|
"remark": None,
|
|
}
|
|
],
|
|
}
|
|
|
|
create_resp = await client.post("/api/sales-orders", json=payload)
|
|
assert create_resp.status_code == 201
|
|
order = create_resp.json()
|
|
order_id = order["id"]
|
|
|
|
status_resp = await client.patch(f"/api/sales-orders/{order_id}/status", json={"status": "delivered"})
|
|
assert status_resp.status_code == 200
|
|
|
|
update_resp = await client.put(f"/api/sales-orders/{order_id}", json=payload)
|
|
assert update_resp.status_code == 400 # 已交付订单禁止修改(服务层守卫)
|
|
|
|
delete_resp = await client.delete(f"/api/sales-orders/{order_id}")
|
|
assert delete_resp.status_code == 400
|
|
|
|
# delivered → paid 是允许的(业务上先交货再收款),但 delivered → manufacturing 不允许
|
|
patch_resp = await client.patch(f"/api/sales-orders/{order_id}/status", json={"status": "manufacturing"})
|
|
assert patch_resp.status_code == 400
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_non_delivered_sales_order_can_be_updated(client):
|
|
payload = {
|
|
"customer_id": 1,
|
|
"delivery_date": None,
|
|
"remark": "test",
|
|
"items": [
|
|
{
|
|
"product_id": None,
|
|
"product_sku": "MOLD-002",
|
|
"product_name": "模具002",
|
|
"product_category": "模具",
|
|
"product_unit": "套",
|
|
"quantity": 1,
|
|
"unit_price": 2000.0,
|
|
"remark": None,
|
|
}
|
|
],
|
|
}
|
|
|
|
create_resp = await client.post("/api/sales-orders", json=payload)
|
|
assert create_resp.status_code == 201
|
|
order_id = create_resp.json()["id"]
|
|
|
|
payload2 = {
|
|
**payload,
|
|
"remark": "changed",
|
|
"items": [
|
|
{
|
|
**payload["items"][0],
|
|
"quantity": 2,
|
|
}
|
|
],
|
|
}
|
|
update_resp = await client.put(f"/api/sales-orders/{order_id}", json=payload2)
|
|
assert update_resp.status_code == 200
|
|
assert float(update_resp.json()["total_amount"]) == 4000.0
|