"""일위대가 실무자료 화면(PLAN 324-4 · 718-1 · 785-4) — 좌측 판 자리 · 권한 · 불러오기 본 칸 · [끝내기] · 떠남. 옛 확인 창 · 고르기 창 · [로직 추가] 「실무 호표」 · 엑셀 보기 모달 시험은 785-7 에서 지움(판정 화면 = `test_642_6_screen`). """ import os from pathlib import Path HERE = os.path.dirname(os.path.abspath(__file__)) M02 = Path(HERE).parents[1] / "M02_MasterTemplete" def _text(name: str) -> str: return (M02 / name).read_text(encoding="utf-8") def test_좌측_판_자리와_권한(): side = _text("M02_MasterTemplete_UI_Side.ts") assert 'import { buildHopyoSection } from "./M02_MasterTemplete_Hopyo_Side";' in side host = side.split('className: "m02-side__lists ui-sidebar-panel"')[1] # 716-3 차례 — 일위대가 › 구조물 조합 › 구분선 › 일위대가 불러오기 › 도면 양식 order = ("precomboSec,", "summary,", "createDivider(),", "section(hopyo.title, hopyo.body),") assert [host.index(k) for k in order] == sorted(host.index(k) for k in order) assert host.index("section(hopyo.title, hopyo.body),") < host.index("drawing,") assert "canWrite: opt.canWrite," in side # 구조물 조합 층 쓰기 권한(720-4 함수) assert "hopyo.paint();" in side.split("function paint(): void {")[1] hopyo_side = _text("M02_MasterTemplete_Hopyo_Side.ts") # 718-1 · 785-4 — 제목 = 화면 글 키 · [불러오기] = 구조물 조합 층 단추 꼴 → 바로 파일 고르기 → 본 칸 불러오기 보기 assert 'L("M02_HopyoImport")' in hopyo_side and "일위대가 실무자료" not in hopyo_side start = hopyo_side.split("const start = createButton({")[1].split("start.title")[0] assert 'label: "불러오기"' in start and 'start.classList.add("m02-layers__btn");' in start assert "buildHopyoImport({" in hopyo_side and "Hopyo_Wizard" not in hopyo_side assert not (M02 / "M02_MasterTemplete_Hopyo_Wizard.ts").exists() # 가운데 상세 페이지 없음 assert "uploadHopyo(" in hopyo_side and "openHopyoSheet" not in hopyo_side assert ( "buildHopyoLedger({ scope: pageScope(), canWrite: opt.canWrite() })" in hopyo_side ) # [별칭 장부] imp = _text("M02_MasterTemplete_Hopyo_Import.ts") assert 'accept: ".xls,.xlsx"' in hopyo_side and "input.hidden = true;" in hopyo_side choose = hopyo_side.split("async function choose()")[1].split("input.addEventListener")[0] assert "input.click();" in choose # 누름 하나 — 바로 파일 고르기 창 assert "accessFor(layer, null, user).canWrite" in imp # 결과 층 = 쓸 수 있는 층만 assert 'let pick: ManageLayer = "personal";' in hopyo_side # 기본 개인 assert "layers.length > 1" in hopyo_side # 층 고름 = 둘 이상일 때만(일반 = 개인 하나) for gone in ("wantSangeun", "STEPS", "second(", "steps.set", "data-hopyo-sangeun"): assert gone not in imp + hopyo_side, gone # 중간 걸음 · 단가산출 체크 없음 def test_372_2_저장은_개인_층에_삭제는_화면_층_권한(): """718-1 — 만들 층 = 올린 층 · [끝내기] 로 올린 파일 지움 → 빈 본 칸(785-4: 엑셀 보기 [삭제] 걷음) · 743-1 — 떠남(화면 바뀜 · 페이지 닫음) = 쥔 파일 지움.""" imp = _text("M02_MasterTemplete_Hopyo_Import.ts") open_ = imp.split("m.buildHopyoSheet({")[1].split("});")[0] assert "target: scope," in open_ and "canWrite: true," in open_ assert "onDeleted" not in imp and "dropButton" not in _text("M02_MasterTemplete_Hopyo_Sheet.ts") assert "a.onEnded();" in imp and "held = false;" in imp assert 'addEventListener("pagehide", leave)' in imp and " leave,\n" in imp panel = _text("M02_MasterTemplete_Hopyo_Side.ts") assert panel.count("open?.imp?.leave()") == 2 and panel.count("open.imp?.leave()") == 1