# -*- coding: utf-8 -*- """433-4 — 곡선 R 바꿔 MC 측점이 움직임(curve:47.35 → curve:49.10). 상세 갈아끼움이 옛 MC 횡단을 이어 받음. 못박는 것 - MC 설계(사용자 칸) 남음 · 측점 id 그대로 · added · removed 빔. - moves 에 MC 짝(누가거리 열쇠 칸이 따라감). - CURVE_NEAR_M 밖으로 간 MC = 못 이음(새 측점 · 옛 열쇠 removed). Node 헬퍼 `helper_433_swap.cjs` 가 진짜 모듈(`B06_Section_Station_Swap.ts`)을 부름. """ import json import subprocess import sys from pathlib import Path import pytest HERE = Path(__file__).resolve().parent ROOT = HERE.parents[1] if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from config.config_system import STANDARD_CROSS_SECTION # noqa: E402 from config.config_system_design import EARTHWORK_CONVERSION_FACTORS # noqa: E402 @pytest.fixture(scope="module") def out(tmp_path_factory): work = tmp_path_factory.mktemp("b433") standard = work / "standard.json" conversion = work / "conversion.json" standard.write_text(json.dumps(STANDARD_CROSS_SECTION), encoding="utf-8") conversion.write_text(json.dumps(EARTHWORK_CONVERSION_FACTORS), encoding="utf-8") proc = subprocess.run( ["node", str(HERE / "helper_433_swap.cjs"), str(standard), str(conversion)], cwd=ROOT, capture_output=True, text=True, encoding="utf-8", timeout=120, ) assert proc.returncode == 0, proc.stderr return json.loads(proc.stdout) def test_MC_설계가_새_곡선_열쇠로_남음(out): mc = out["mc"] assert mc["memo"] == "MY-EDIT@47.35" assert mc["stationId"] == "station_000000047350" assert mc["added"] == [] assert mc["removed"] == [] def test_moves_에_MC_짝(out): assert ["47.35", "49.10"] in out["mc"]["moves"] def test_멀리_간_MC_는_못_이음(out): far = out["mc"]["far"] assert far["added"] == ["curve:62.00"] assert far["removed"] == ["curve:47.35"]