"""772-1 ☰ 서랍 진행 단계 · 바로가기 칸 — 진행 판을 세우는 공용 자리 한 곳에서 맡김 · 안 맡긴 쪽은 기본 목록.""" from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def _text(rel: str) -> str: return (ROOT / rel).read_text(encoding="utf-8") def test_진행_판을_세우면_서랍에_맡김(): overlay = _text("ui_template/ui_template_overlay.ts") body = overlay.split("export function createWorkflowOverlays")[1] assert ( "setDrawerSteps(options.progressContent)" in body.split("if (options.progressContent)")[1] ) # 워크플로 판 · B03 은 진행 판(overlay)에만 맡김 — 따로 부르면 두 번 assert "setDrawerSteps" not in _text("ui_template/ui_template_workflow_layout.ts") assert "setDrawerSteps" not in _text("B03_FileInput/B03_FileInput_UI_Page.ts") assert "createWorkflowOverlays" in _text("B03_FileInput/B03_FileInput_UI_Page.ts") def test_안_맡긴_쪽은_기본_목록(): shell = _text("A00_Common/app_shell.ts") set_open = shell.split("const setOpen")[1].split("};")[0] assert "if (open && !drawerSteps) void fillDefaultSteps();" in set_open assert "steps.replaceChildren(drawerSteps.node)" in set_open fill = shell.split("const fillDefaultSteps")[1].split("};")[0] assert ( "defaultSettingsBar()" in fill and "if (!bar || drawerSteps || !steps.isConnected) return;" in fill ) nav = _text("A00_Common/m_settings_nav.ts") default = nav.split("export async function defaultSettingsBar")[1].split("\n}")[0] assert "fetchSessionUser" in default and 'settingsBar(user, "", null)' in default # M01 · M02 와 같은 한 벌(pageLinks · createStepBar · 🏠) bar = nav.split("function settingsBar")[1] assert "pageLinks(user, companyId)" in bar and "homeButton: true" in bar