From 2878b7c0de28f28af05d9f16df771d2f6ba58da1 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 8 Oct 2026 13:12:10 +0900 Subject: [PATCH] =?UTF-8?q?test(M02):=20=EC=A7=91=EA=B3=84=ED=91=9C=20?= =?UTF-8?q?=EC=8B=9C=ED=97=98=20=EB=84=B7=20=EB=82=A1=EC=9D=80=20=EA=B2=AC?= =?UTF-8?q?=EB=B3=B8=20=C2=B7=20=EA=B8=B0=EB=8C=80=EA=B0=92=20=EB=A7=9E?= =?UTF-8?q?=EC=B6=A4(87-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자동 맞춤 견본 = 옵션 그룹 · 컨테이너 복사 건(복사본 …__그룹) 빼고 본체만 — 지정 항목 모드 몫이라 자동 맞춤에서 두 번 셈(46-3 · 54-6) - 관 유출 흙막이 열 id 「rv|돌쌓기(찰)|1.5」(기본 높이 54-36) · 세월교 열 「fb|1000|2」(련수 기본 2 · 65-1) - 템플릿 층 채운 표 알림 = 배관 한 개 컨테이너 셋 → 미지정 4건 Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ --- resources/tester/test_m02_table_fill.py | 15 +++++++++------ resources/tester/test_m02_template_layers.py | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/resources/tester/test_m02_table_fill.py b/resources/tester/test_m02_table_fill.py index e2ec9e675..1f69052ec 100644 --- a/resources/tester/test_m02_table_fill.py +++ b/resources/tester/test_m02_table_fill.py @@ -72,7 +72,9 @@ def project(tmp_path: Path) -> Path: def _auto(project: Path, document: dict[str, Any], lengths: dict[float, float]) -> dict[str, Any]: """바인딩 자동 맞춤(`fill_document` 기본) — 프로젝트 `fill_table` 은 지정 항목 모드(PLAN 21-3)라 펼침 · 묶음 · 손 값 규칙은 이 길로 봄.""" - return fill.fill_document(document, fill.collect_items(project, lengths)) + # 옵션 그룹 · 컨테이너마다 더 서는 건(복사본 `…__그룹`)은 지정 항목 모드 몫 — 자동 맞춤은 본체만 셈 + items = [i for i in fill.collect_items(project, lengths) if "__" not in i["복사본"]] + return fill.fill_document(document, items) def _filled(project: Path, document: dict[str, Any] | None = None) -> dict[str, Any]: @@ -94,10 +96,11 @@ def test_펼침_열은_설계에_쓰인_값만_차례대로(project: Path) -> No ] assert not any(i.startswith("rw|") for i in ids) # 옹벽 없음 → 열 없음 assert "rv" not in ids and "ps" in ids # 펼침 마스터 칸은 빠지고 고정 열은 남음 - # 관 유입·유출 기슭막이는 레지스트리 기본값(찰 · 메 · 높이 없음)으로 열이 섬 · id 는 설계 값 - assert "rv|돌쌓기(찰)|-" in ids and "rv|돌쌓기(메)|-" in ids - assert _col(doc, "rv|돌쌓기(찰)|-")["머리"] == ["돌기슭막이", "찰쌓기", "높이 미입력"] - assert _col(doc, "fb|1000|-")["머리"] == ["세월교", "Φ1000×련수 미입력", None] + # 관 유출 기슭막이는 레지스트리 기본값(찰 · 흙막이 기본 높이 1.5 — 54-36)으로 열이 섬 · id 는 설계 값 + assert [i for i in ids if i.startswith("rv|")] == ["rv|돌쌓기(찰)|1.5"] + assert _col(doc, "rv|돌쌓기(찰)|1.5")["머리"] == ["돌기슭막이", "찰쌓기", "H=1.5"] + # 세월교 기본값(65-1) — 련수 칸 기본 2 + assert _col(doc, "fb|1000|2")["머리"] == ["세월교", "Φ1000×2련", None] assert not any(i.startswith("pg_in|") for i in ids) # 날개벽·집수정 형식 없음 → 관보호공 없음 @@ -151,7 +154,7 @@ def test_측점_줄_같은_측점은_한_줄_관은_나눔(project: Path) -> Non assert first["sta"] == second["sta"] == "NO.4+5.05" assert first["pp_len|파형강관|1000"] == 14.0 and "pp_len|흄관|1000" not in first assert second["pp_len|흄관|1000"] == 14.0 # 한 측점 횡단 관 연장은 하나 — 두 관이 같이 씀 - assert first["rv|돌쌓기(찰)|-"] == second["rv|돌쌓기(찰)|-"] == 10 + assert first["rv|돌쌓기(찰)|1.5"] == second["rv|돌쌓기(찰)|1.5"] == 10 assert rows["s300.00"]["값"]["ps"] == 1 assert [row["값"].get("no") for row in doc["줄"][1:]] == [str(i) for i in range(1, 8)] assert "식" not in rows["s200.00~230.00"] # 줄눈 간격이 달라도 열 식이 없으면 줄 식 없음 diff --git a/resources/tester/test_m02_template_layers.py b/resources/tester/test_m02_template_layers.py index 4724c5ab2..2dbfe7a8f 100644 --- a/resources/tester/test_m02_template_layers.py +++ b/resources/tester/test_m02_template_layers.py @@ -242,8 +242,9 @@ def test_채운_표는_작업본을_채워_돌려주고_저장_안_함( before = layers.version_of(root / "templates/table/구조물집계표.json") got = world["client"].get(f"/api/m02/projects/{P1}/tables/구조물집계표/filled").json() # 프로젝트 채움 = 지정 항목 모드(PLAN 21-3) — 집계 항목 미지정 관은 표에 안 들어감 + # 배관 한 개 = 관 · 보호공(유입) · 보호공(유출) 컨테이너 셋(54-1) → 미지정 4건 assert not any(r["id"] == "s40.00" for r in got["문서"]["줄"]) - assert "집계 항목 미지정 1건 — 표에 안 들어감" in got["문서"]["알림"] + assert "집계 항목 미지정 4건 — 표에 안 들어감" in got["문서"]["알림"] assert got["결과"] == {"계산": {}} and got["판"] == before assert layers.version_of(root / "templates/table/구조물집계표.json") == before