import pytest @pytest.mark.anyio async def test_customer_list_search_filters_active_rows(client): create_resp = await client.post( "/api/customers", json={"name": "目标客户Alpha", "contact_person": "张三"}, ) assert create_resp.status_code == 201 customer_id = create_resp.json()["id"] delete_resp = await client.delete(f"/api/customers/{customer_id}") assert delete_resp.status_code == 200 kept_resp = await client.post( "/api/customers", json={"name": "目标客户Beta", "contact_person": "李四"}, ) assert kept_resp.status_code == 201 resp = await client.get("/api/customers", params={"search": "目标客户"}) assert resp.status_code == 200 rows = resp.json() names = [row["name"] for row in rows] assert "目标客户Beta" in names assert "目标客户Alpha" not in names @pytest.mark.anyio async def test_customer_create_auto_generates_code(client): resp = await client.post( "/api/customers", json={"name": "自动编码客户", "phone": "123456"}, ) assert resp.status_code == 201 body = resp.json() assert body["code"].startswith("C") assert body["name"] == "自动编码客户" @pytest.mark.anyio async def test_customer_update_returns_latest_fields(client): create_resp = await client.post( "/api/customers", json={"name": "旧客户名", "email": "old@example.com"}, ) assert create_resp.status_code == 201 customer_id = create_resp.json()["id"] update_resp = await client.put( f"/api/customers/{customer_id}", json={"code": "C-CUSTOM", "name": "新客户名", "email": "new@example.com"}, ) assert update_resp.status_code == 200 body = update_resp.json() assert body["code"] == "C-CUSTOM" assert body["name"] == "新客户名" assert body["email"] == "new@example.com" @pytest.mark.anyio async def test_customer_delete_soft_deletes_row(client): create_resp = await client.post( "/api/customers", json={"name": "待删除客户"}, ) assert create_resp.status_code == 201 customer_id = create_resp.json()["id"] delete_resp = await client.delete(f"/api/customers/{customer_id}") assert delete_resp.status_code == 200 assert delete_resp.json()["message"] == "客户已删除" list_resp = await client.get("/api/customers", params={"search": "待删除客户"}) assert list_resp.status_code == 200 assert all(row["id"] != customer_id for row in list_resp.json()) @pytest.mark.anyio async def test_supplier_list_search_filters_active_rows(client): create_resp = await client.post( "/api/suppliers", json={"name": "目标供应商Alpha", "contact_person": "王五"}, ) assert create_resp.status_code == 201 supplier_id = create_resp.json()["id"] delete_resp = await client.delete(f"/api/suppliers/{supplier_id}") assert delete_resp.status_code == 200 kept_resp = await client.post( "/api/suppliers", json={"name": "目标供应商Beta", "contact_person": "赵六"}, ) assert kept_resp.status_code == 201 resp = await client.get("/api/suppliers", params={"search": "目标供应商"}) assert resp.status_code == 200 rows = resp.json() names = [row["name"] for row in rows] assert "目标供应商Beta" in names assert "目标供应商Alpha" not in names @pytest.mark.anyio async def test_supplier_create_auto_generates_code(client): resp = await client.post( "/api/suppliers", json={"name": "自动编码供应商", "phone": "123456"}, ) assert resp.status_code == 201 body = resp.json() assert body["code"].startswith("S") assert body["name"] == "自动编码供应商" @pytest.mark.anyio async def test_supplier_update_returns_latest_fields(client): create_resp = await client.post( "/api/suppliers", json={"name": "旧供应商名", "email": "old-s@example.com"}, ) assert create_resp.status_code == 201 supplier_id = create_resp.json()["id"] update_resp = await client.put( f"/api/suppliers/{supplier_id}", json={"code": "S-CUSTOM", "name": "新供应商名", "email": "new-s@example.com"}, ) assert update_resp.status_code == 200 body = update_resp.json() assert body["code"] == "S-CUSTOM" assert body["name"] == "新供应商名" assert body["email"] == "new-s@example.com" @pytest.mark.anyio async def test_supplier_delete_soft_deletes_row(client): create_resp = await client.post( "/api/suppliers", json={"name": "待删除供应商"}, ) assert create_resp.status_code == 201 supplier_id = create_resp.json()["id"] delete_resp = await client.delete(f"/api/suppliers/{supplier_id}") assert delete_resp.status_code == 200 assert delete_resp.json()["message"] == "供应商已删除" list_resp = await client.get("/api/suppliers", params={"search": "待删除供应商"}) assert list_resp.status_code == 200 assert all(row["id"] != supplier_id for row in list_resp.json()) @pytest.mark.anyio async def test_warehouse_list_orders_default_first(client): create_resp = await client.post( "/api/warehouses", json={"code": "W002", "name": "普通仓库"}, ) assert create_resp.status_code == 201 resp = await client.get("/api/warehouses") assert resp.status_code == 200 rows = resp.json() assert rows[0]["is_default"] is True assert rows[0]["name"] == "默认仓库" @pytest.mark.anyio async def test_warehouse_create_auto_generates_code(client): resp = await client.post( "/api/warehouses", json={"name": "自动编码仓库", "manager": "管理员A"}, ) assert resp.status_code == 201 body = resp.json() assert body["code"].startswith("W") assert body["name"] == "自动编码仓库"