"""item 도메인 e2e — 상품 CRUD. 회사 스코프(타사 격리)는 test_company_scope.py. 로그인은 auth_headers.""" import uuid async def test_item_crud_flow(client, auth_headers): """검증: 상품 생성→목록→단건→부분수정→soft삭제 전체 흐름. 기대결과: 각 단계 success, 부분수정은 준 필드만 변경(나머지 유지), soft삭제 후 목록 total=0.""" h = await auth_headers("itemuser") r = await client.post("/v1/item/create", json={"name": "상품A", "price": 1000, "code": "C1"}, headers=h) assert r.status_code == 200 body = r.json() assert body["result"]["success"] is True item_id = body["item"]["item_id"] assert body["item"]["name"] == "상품A" r = await client.get("/v1/item/list", headers=h) body = r.json() assert body["total"] == 1 and len(body["items"]) == 1 r = await client.get(f"/v1/item/{item_id}", headers=h) assert r.json()["item"]["item_id"] == item_id # 부분 수정: 준 필드(price)만 바뀌고 안 준 필드(name)는 유지돼야 한다 r = await client.patch(f"/v1/item/update/{item_id}", json={"price": 2000}, headers=h) assert r.json()["item"]["price"] == 2000 assert r.json()["item"]["name"] == "상품A" # soft delete → 행은 남지만 목록엔 안 잡힌다 assert (await client.delete(f"/v1/item/delete/{item_id}", headers=h)).json()["result"]["success"] is True assert (await client.get("/v1/item/list", headers=h)).json()["total"] == 0 async def test_item_not_found(client, auth_headers): """검증: 존재하지 않는 상품 단건 조회. 기대결과: success=False, code=1300(ITEM_NOT_FOUND).""" h = await auth_headers("itemuser") r = await client.get(f"/v1/item/{uuid.uuid4()}", headers=h) body = r.json() assert body["result"]["success"] is False assert body["result"]["code"] == 1300