# -*- coding: utf-8 -*- """54-12 필수 칸(뒷길이 등)이 빈 옛 구조물 — 다른 칸 · 기준 측점 바꿈은 실시간 반영 · [추가]는 그대로 막음. Node 헬퍼가 `_Structures_Panel_Commit.commit` 을 돌림(`helper_54_12_live_required.cjs`). 빈 칸 표시 · 안내 한 줄은 ORCA 로 따로 봄. """ import json import os import subprocess import pytest HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.abspath(os.path.join(HERE, "..", "..")) @pytest.fixture(scope="module") def out(): proc = subprocess.run( ["node", os.path.join(HERE, "helper_54_12_live_required.cjs")], capture_output=True, text=True, encoding="utf-8", timeout=60, ) assert proc.returncode == 0, proc.stderr return json.loads(proc.stdout) def test_실시간_반영은_빈_필수_칸이_있어도_나간다(out): live = out["live"] assert live["changes"] == 1 assert live["height"] == 3.2 assert live["chainage"] == 100 assert live["hasBack"] is False # 빈 칸은 0 으로 채우지 않음 assert live["focused"] == [] # 포커스를 빈 칸으로 뺏지 않음 def test_추가_수정_버튼은_종전대로_막는다(out): button = out["button"] assert button["changes"] == 0 assert button["height"] == 1.5 assert button["focused"] == ["back_length_m"] def test_빈_필수_칸_표시는_패널_세_곳에서_부른다(): with open( os.path.join(ROOT, "B05_Profile", "B05_Profile_UI_Structures_Panel_Options.ts"), encoding="utf-8", ) as handle: options = handle.read() assert "필수 칸 비어 있음 — [저장] 전 채움" in options assert options.count("markRequired(optionInputs, optionRow)") == 2 # change · input with open( os.path.join(ROOT, "B05_Profile", "B05_Profile_UI_Structures_Panel.ts"), encoding="utf-8" ) as handle: assert "markRequired(optionInputs, optionRow)" in handle.read() # 그룹 상자 다시 세운 뒤