"""61-2 · 95-3 B08 구조물도 모달 — 집계표 행에서 열림 · 읽기만 · 집계표와 같은 조합 목록 · 안내 글 키.""" import re from pathlib import Path DRAWING = Path("B08_Quantity/B08_Quantity_UI_Drawing.ts").read_text(encoding="utf-8") SUMMARY = Path("B08_Quantity/B08_Quantity_UI_Summary.ts").read_text(encoding="utf-8") PAGE = Path("B08_Quantity/B08_Quantity_UI_Page.ts").read_text(encoding="utf-8") LOCALE = Path("ui_template/ui_template_locale_b4.ts").read_text(encoding="utf-8") LOCALE_B2 = Path("ui_template/ui_template_locale_b2.ts").read_text(encoding="utf-8") def test_sheet_tab_gone_modal_wired(): # 구조물도 탭 없음 · 집계표 행 누름이 모달을 늦게 불러 엶 assert '"sheet"' not in PAGE and "renderStructureSheets" not in PAGE assert "B08_Quantity_Tab_StructureSheet" not in PAGE + LOCALE + LOCALE_B2 assert "onRowClick" in SUMMARY and 'import("./B08_Quantity_UI_Drawing")' in SUMMARY assert "combosAt(things, station)" in SUMMARY def test_modal_own_class_and_cleanup(): css = Path("B08_Quantity/B08_Quantity_UI_Drawing.css").read_text(encoding="utf-8") assert "min(1320px, 96vw)" in css and "--modal-max: 94vh" in css assert "beforeClose" in DRAWING and "cards.destroy()" in DRAWING assert 'dialogClass: "b08-sheets"' in DRAWING def test_read_only(): # 쓰는 길이 없음 — 저장 · 고침 · PUT/POST 없음 · 카드는 고칠 수 없음 for word in ("saveTemplate", "write:", "method:", "sheetEdit", "onImport", "onClear"): assert word not in DRAWING, word assert "editable: () => false" in DRAWING def test_copy_first_then_master(): # 같은 항목의 프로젝트 복사본이 있으면 복사본 · 없으면 M02 원본 층 assert "sameItem(own, row)" in DRAWING and "structureFolder(" in DRAWING assert "readTemplate(layer, part, column, null)" in DRAWING def test_locale_keys_exist(): for key in set(re.findall(r'L\("([A-Za-z0-9_]+)"\)', DRAWING)): assert f"{key}:" in LOCALE or key.startswith(("B08_Quantity_Summary_", "Common_")), key