Files
Aislo/resources/tester/test_summary_clear_and_tree_dialog.py
T
eomsangdonandClaude Opus 5.5 15e08b28cb feat(B05·B06·M02): 46-3·46-4 옵션 그룹 보조 컨테이너 — 구조물 하나 · 조합 여럿
- 구조물 기록 · 관 지점 기록에 group_items {그룹 id: summary_item} 칸(검사 parse_group_items)
- 폼: 종류의 그룹마다 상자(제목 = 그룹 이름) · 그 그룹 옵션 칸을 옮겨 담음 · 「집계 항목」 [고르기][해제] · 빈 그룹도 상자
- 정의가 사라진 그룹 연결 = 값 보존 · 경고 한 줄
- 복사본 = 그룹 연결마다 {구조물 id}__{그룹 id} 폴더(관 pipe@측점__그룹)
- 집계표 채움 = 정의된 그룹마다 한 건 더(그 그룹이 고른 열) · 미지정 그룹은 「미지정」 알림에 셈
- B06 관 초안 · B05 시설 보관소 · 병합도 그룹 칸을 이음
- 시험 test_structure_group_items.py · 코드 글자를 보던 시험 셋은 바뀐 자리로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MPcuokNm1ZR2kqgGGDfaJA
2026-10-05 13:39:12 +09:00

54 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
"""고르기 모달 [해제] 가 [저장] 에서 사라지던 흠 · 항목 더하기 창 빈 칸 안내 흠(계획서 26장 끝).
① 구조물 저장은 **세션 초안**을 보낸다 — 횡단 보기에서 한 지정 · 해제는 그 보기의 초안(`writePendingStructures`)
에만 있고 종단 보기 몫 `ownStructures` 는 모른다. 옛 코드는 `ownStructures` 를 보내 횡단 보기에서 한
모달 [적용] · [해제] 가 [저장] 에서 사라졌다.
② 항목 더하기 창(`askText`)은 빈 칸에 **그 칸 빨간 테두리 + 한 줄**(`setError`) — 토스트는 창 뒤에 가려 안 보였다.
"""
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def _text(relative: str) -> str:
return (ROOT / relative).read_text(encoding="utf-8")
def test_구조물_저장은_세션_초안을_보냄():
page = _text("B05_Profile/B05_Profile_UI_Page_Structures.ts")
body = page.split("async function saveStructuresIfDirty()")[1].split("\n }\n")[0]
assert "persistStructures(readPending() ?? ownStructures)" in body
assert "persistStructures(ownStructures)" not in body # 옛 코드 — 횡단 보기 고침이 사라짐
# 횡단 보기는 같은 초안에 쓴다(보내는 것과 쓰는 것이 한 곳)
cross = _text("B06_Section/B06_Section_UI_Page_Structures_Panel.ts")
assert "writePendingStructures(deps.projectId, structures)" in cross
def test_항목_더하기_빈_칸은_칸_안내로_알림():
dialogs = _text("M02_MasterTemplete/M02_MasterTemplete_TreePanel_Dialogs.ts")
submit = dialogs.split("const submit = (): void => {")[1].split("ok.addEventListener")[0]
assert "field.setError(" in submit and 'L("M02_FieldNeeded")' in submit
assert "showToast" not in dialogs # 창 뒤에 가려 안 보이던 토스트 안 씀
locale = _text("ui_template/ui_template_locale_m2.ts")
assert re.search(r'M02_FieldNeeded: \["\{label\}', locale)
# 항목 추가(PLAN 31-2) = 종류 · 이름 비우면 칸 안내 · 단위 칸은 없음(31 정함)
new_item = dialogs.split("export function askNewItem(")[1].split("export function askFolder")[0]
assert 'L("M02_FieldNeeded").replace("{label}", label)' in new_item
assert "need(kind, " in new_item and "need(name, " in new_item
panel = _text("M02_MasterTemplete/M02_MasterTemplete_TreePanel.ts")
assert (
"askNewItem({" in panel.split("async function addItem")[1].split("async function rename")[0]
)
def test_관_시설_보관소는_응답을_정본으로_집계_항목이_없으면_미지정():
"""횡단 보기에서 [해제]한 관 초안이 응답으로 돌아올 때 옛 지정이 되살아나면 안 됨."""
store = _text("B05_Profile/B05_Profile_UI_Drainage_Facility.ts")
body = store.split("replaceFromResponse(")[1].split("},\n /** 한 지점의 시설을 바꾼다")[0]
# 응답 칸만(본체 · 옵션 그룹 · PLAN 46-3) — 없으면 미지정
assert "...linkFields(point)," in body
assert "before.find" not in body # 화면이 쥔 값을 이어받던 옛 규칙