- test DB 세션마다 자동 create/drop (팀원은 Postgres만 있으면 pytest 한 방) - auth_headers 시드 픽스처(무인증 /auth/create 제거 대응) + other_company_id - 커버: 회사 스코프(견적·상품·협력사·대시보드·세팅), 견적 마감 재견적 O/X + 알림, 견적 생성·목표가, 알림함 읽기, 회사유저 OWNER 게이팅, 기존 파일 검증/기대결과 주석 정비 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
72 lines
2.9 KiB
Python
72 lines
2.9 KiB
Python
"""협력사·견적세팅·견적을 '만들고 → 목록/단건으로 다시 조회'하는 기본 동작 확인.
|
|
|
|
만든 뒤 다시 읽어와, 서버가 자동으로 채우는 값(생성시각 등)이 제대로 들어갔는지까지 본다. 로그인은 auth_headers.
|
|
"""
|
|
import uuid
|
|
|
|
from common.enums import QuotationStatus, QuotationType
|
|
|
|
|
|
async def test_supplier_crud(client, auth_headers):
|
|
"""검증: 협력사 생성 후 목록·단건 조회.
|
|
기대결과: 생성 success=True, 목록 total=1, 단건 supplier_id 일치, created_at 적재."""
|
|
h = await auth_headers("supuser")
|
|
r = await client.post("/v1/supplier/create", json={"name": "공급사A", "code": "S1"}, headers=h)
|
|
body = r.json()
|
|
assert body["result"]["success"] is True
|
|
sup = body["supplier"]
|
|
assert sup["name"] == "공급사A"
|
|
assert sup["created_at"] # 재조회로 서버 기본값 적재 확인
|
|
sid = sup["supplier_id"]
|
|
|
|
r = await client.get("/v1/supplier/list", headers=h)
|
|
assert r.json()["total"] == 1
|
|
|
|
r = await client.get(f"/v1/supplier/{sid}", headers=h)
|
|
assert r.json()["supplier"]["supplier_id"] == sid
|
|
|
|
|
|
async def test_quotation_setting_crud(client, auth_headers):
|
|
"""검증: 견적 세팅 생성(마진율 0.15) 후 목록 조회.
|
|
기대결과: success=True, target_margin_rate=0.15, card_count 기본 3, 목록 total≥1."""
|
|
h = await auth_headers("qsuser")
|
|
r = await client.post("/v1/quotation-setting/create", json={"target_margin_rate": 0.15}, headers=h)
|
|
body = r.json()
|
|
assert body["result"]["success"] is True
|
|
st = body["setting"]
|
|
assert st["target_margin_rate"] == 0.15
|
|
assert st["card_count"] == 3 # 기본값
|
|
assert st["created_at"]
|
|
|
|
r = await client.get("/v1/quotation-setting/list", headers=h)
|
|
assert r.json()["total"] >= 1
|
|
|
|
|
|
async def test_quotation_create(client, auth_headers):
|
|
"""검증: 견적 생성(number 는 서버 생성) 후 qt_id 로 재조회.
|
|
기대결과: 생성 success=True, 재조회 시 name 일치·created_at 적재, 목록 total≥1."""
|
|
h = await auth_headers("qtuser")
|
|
body = {
|
|
"qt_setting_id": str(uuid.uuid4()),
|
|
"version_id": str(uuid.uuid4()),
|
|
"name": "견적A",
|
|
"type": QuotationType.REQUOTE.value,
|
|
"status": QuotationStatus.IN_PROGRESS.value,
|
|
"start_time": "2026-06-16T00:00:00",
|
|
"end_time": "2026-06-17T00:00:00",
|
|
}
|
|
r = await client.post("/v1/quotation/create", json=body, headers=h)
|
|
res = r.json()
|
|
# 생성 응답엔 quotation 본문이 없고 qt_id/session_count 만 온다 → qt_id 로 재조회
|
|
assert res["result"]["success"] is True
|
|
qt_id = res["qt_id"]
|
|
assert qt_id
|
|
|
|
r = await client.get(f"/v1/quotation/{qt_id}", headers=h)
|
|
q = r.json()["quotation"]
|
|
assert q["name"] == "견적A"
|
|
assert q["created_at"]
|
|
|
|
r = await client.get("/v1/quotation/list", headers=h)
|
|
assert r.json()["total"] >= 1
|