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