"""면고르기 산출 조건 칸 넷 — 화면이 서버 선택지를 그대로 쓰고 [저장]에 네 키를 싣는지(2026-09-14 메인 부탁). 서버(ee9368ec)는 `face_dressing_cut_class`·`face_dressing_fill_class`·`face_dressing_fill_area_m2`· `face_dressing_cut_area_m2` 를 받고 선택지는 `earthwork-table` 의 `face_dressing_choices` 로 내려줌. ⚠ 선택지를 화면에 다시 적으면 두 벌이 됨 — TS 에 갈래 이름이 없어야 함. """ from pathlib import Path ROOT = Path(__file__).resolve().parents[2] PAGE = (ROOT / "B08_Quantity" / "B08_Quantity_UI_Page.ts").read_text(encoding="utf-8") SIDE = ROOT / "B08_Quantity" / "B08_Quantity_UI_Side_FaceDressing.ts" KEYS = ( "face_dressing_cut_class", "face_dressing_fill_class", "face_dressing_fill_area_m2", "face_dressing_cut_area_m2", ) def test_저장에_네_키를_싣고_불러온다() -> None: for key in KEYS: assert f"{key}: draft.{key}" in PAGE, f"[저장]에 {key} 없음" assert f"{key}: (stored.{key}" in PAGE, f"불러오기에 {key} 없음" def test_성토면_제안은_회색_근거와_단추로만_넣는다() -> None: """메인 976e5fd9 — `fill_suggested` {value, basis}. 비워 두면 「안 정함」 그대로(스스로 안 고름).""" side = SIDE.read_text(encoding="utf-8") assert "choices.fill_suggested" in side and "suggested.basis" in side button = side.split("createButton(")[1] assert "draft.face_dressing_fill_class = suggested.value" in button # 누른 때만 넣음 assert side.count("= suggested.value") == 2 # 단추 안의 칸·초안 둘뿐 assert "BenchCut" not in side # 층따기 문구(「KDS 토사 0.5 m」)를 빌려 쓰지 않음 def test_선택지는_서버_목록_그대로() -> None: side = SIDE.read_text(encoding="utf-8") assert "appendFaceDressingFields(" in PAGE and "face_dressing_choices" in PAGE assert "choices.cut" in side and "choices.fill" in side for name in ("모래ㆍ사질토", "성토면 · 인력", "성토면 · 기계"): assert name not in side and name not in PAGE, f"갈래 이름 {name} 을 화면에 다시 적음"