- `design_pipe_ids.ts` — 장부(세션 pipe-ids) · pipe-s{차례} · 자리 → id(찾는 거리 안 가장 가까운 것) · followMovedPipe 가 id 를 새 자리로(고름 id 그대로 · 순환 import 없게 design_selection 에서 옮김) · 설계 페이지가 프로젝트를 정함(usePipeIds) · 자리 이름 만들기 열 곳 · 되읽기 둘 걷음 · 측점 계획 주인 = 세션 id(withPipeIds)
- `design_pick_match.ts` — pickLights(① id ② 같은 자리 ③ 고른 부분) · paintPicked(카드 통째 형상 · 부분 · 관 계열 · 포장층은 제 손잡이) · tagShape — 관 세트 벽 · 집수정 · 관 · 세월교 측벽 · 몸체 · BOX 끝 · C군 벽 · 물넘이 콘크리트에 신원표 · 형상 판정면은 통째 형상 · 콘크리트만
- 3D — 부재 맞춤 = pickLights(옛 0.01 걷음) · C군 벽 솔리드 = 구조물 id(덮는 측점 어디서 골라도 한 번 스윕한 벽이 켜짐)
- 322-0 이 깬 것 고침 — 노면공 흐름 도움 파일(165 · 231-1) 정의 판 확인 흉내 · design_view_profile 700줄(322-0 이 704)
- 시험: test_323_5_pick(세션 id · 옮김 · 강조 규칙 · 칠하기) · 옛 시험 도움 파일 흉내 · 기대 글 고침
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ji4nuyLVHcxrXWHTdb5nRD
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
"""PLAN 323-5 고름 한 칸 — 관 세션 id(옮겨도 그대로 · 저장 안 함) · 고름 강조 한 규칙(`pickLights`).
|
|
|
|
- 관 id = 자리마다 차례(`pipe-s1` …) · 같은 자리(PIPE_MATCH_M 안)면 같은 id · 프로젝트 없으면 옛 자리 이름.
|
|
- 관을 옮기면 id 가 새 자리로 · 그 관을 고른 고름은 자리만 새로(부재키 그대로) · 다른 고름은 그대로.
|
|
- 강조 = id 둘 다 있으면 id · 아니면 같은 자리 · 고른 부분이 있으면 그 부분만 — 카드 형상 · 3D 같은 함수.
|
|
- 카드 통째 형상 칠하기는 부분(조정창 부재) · 관 계열 · 포장층을 안 건드림(307).
|
|
TS 쪽 = `helper_323_5_pick.cjs`(Node).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
HERE = Path(__file__).parent
|
|
ROOT = HERE.parent.parent
|
|
|
|
pytestmark = pytest.mark.skipif(
|
|
not (ROOT / "config" / "node_modules").is_dir(), reason="프론트엔드 의존성 미설치"
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def out() -> dict:
|
|
run = subprocess.run(
|
|
["node", str(HERE / "helper_323_5_pick.cjs")],
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
timeout=120,
|
|
check=True,
|
|
)
|
|
return json.loads(run.stdout)
|
|
|
|
|
|
def test_session_ids(out: dict) -> None:
|
|
assert out["ids"] == ["pipe-s1", "pipe-s1", "pipe-s2", 85.05]
|
|
assert out["legacy"] == ["pipe-85.00", 85, None]
|
|
|
|
|
|
def test_move_keeps_id_and_pick(out: dict) -> None:
|
|
picked, at90, moved_to = out["moved"]
|
|
assert picked == {"chainageM": 90, "structureId": "pipe-s1", "partKey": "inlet"}
|
|
assert (at90, moved_to) == ("pipe-s1", 90)
|
|
other, same = out["other"]
|
|
assert other["structureId"] == "w1" and other["chainageM"] == 300 and same is True
|
|
|
|
|
|
def test_one_highlight_rule(out: dict) -> None:
|
|
assert out["lights"] == {
|
|
"idOverPlace": True,
|
|
"idDiffers": False,
|
|
"placeNear": True,
|
|
"placeFar": False,
|
|
"partOnly": False,
|
|
"partSame": True,
|
|
"partNoTag": False,
|
|
"wholePick": True,
|
|
"none": False,
|
|
}
|
|
|
|
|
|
def test_card_paint_whole_shapes_only(out: dict) -> None:
|
|
assert out["paint"] == [[True, False, False, False], [False, False, False, False]]
|