- 새 D03_PlanAnalysis_UI_LidarUpload — 공용 칩(안 고침) + 라이다 없으면 [LAS 올리기](부품 단추 · LAS · LAZ · .prj) · 진행 = 위치 칸 서클 「라이다」 · 고른 원천 = 세션 d03-terrain(등록부 한 줄) - 공용 겹 받기 fetchPlanRaster · fetchPlanZeroOrder 에 terrain 인자(안 넘김 = 옛 그대로 · B05 영향 없음) - 겹 reterrain = 지형 겹 셋만 비우고 다시 · 높이 = 고른 원천 격자(라이다 범위 밖 = 빈칸) - 지도는 지형 칸을 넘겨받기만 · 낡은 시험 둘(475 · 624_2)은 글 대조 줄만 새 꼴로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
3.8 KiB
Python
73 lines
3.8 KiB
Python
"""624-4 화면 — 예정노선 지형 칩 라이다 · LAS 올리기(요구 530 · 531).
|
|
|
|
· 칩 = 예정노선 지형 칸(`UI_LidarUpload`)이 만듦 · 공용 칩 안 그대로 · 지도는 넘겨받기만
|
|
· 라이다 없음 = 「라이다」 숨기고 [LAS 올리기](부품 단추 · 파일 고르기) · 진행 = 위치 칸 서클 하나
|
|
· 고른 원천 = 세션 등록부 `d03-terrain`(draft · project) · 겹 급경사 · 음영 · 0차곡 = `terrain=` · 높이 = 원천 격자
|
|
· 원천 바뀜 = 지형 겹 셋만 비우고 다시
|
|
|
|
./venv/Scripts/python.exe -m pytest resources/tester/test_624_4b_plan_lidar_ui.py -q
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
D03 = ROOT / "D03_PlanAnalysis"
|
|
|
|
|
|
def _read(path: Path) -> str:
|
|
return path.read_text(encoding="utf-8")
|
|
|
|
|
|
def test_chip_made_by_plan_terrain() -> None:
|
|
ui_map = _read(D03 / "D03_PlanAnalysis_UI_Map.ts")
|
|
assert "createTerrainChip" not in ui_map and "terrain: events.terrain," in ui_map
|
|
lidar = _read(D03 / "D03_PlanAnalysis_UI_LidarUpload.ts")
|
|
assert "onChange: (next) => void choose(next)" in lidar
|
|
assert 'chip.setHave(ready ? ["sheet", "lidar"] : ["sheet"])' in lidar
|
|
chip = _read(ROOT / "A00_Common" / "map" / "map_terrain_chip.ts")
|
|
assert "onChange?: (value: TerrainSource) => void;" in chip # 칩 꼴 그대로
|
|
|
|
|
|
def test_upload_uses_parts_and_one_circle() -> None:
|
|
lidar = _read(D03 / "D03_PlanAnalysis_UI_LidarUpload.ts")
|
|
assert 'label: "LAS 올리기"' in lidar and "createButton({" in lidar
|
|
assert 'pickFiles({ accept: ".las,.laz,.prj", multiple: true }' in lidar
|
|
assert 'createElement("button")' not in lidar and 'createElement("input")' not in lidar
|
|
assert "createProgressCircle" not in lidar # 서클 = 위치 칸 하나(604-3)
|
|
assert 'label: "라이다"' in lidar and "work.track(follow())" in lidar
|
|
assert 'lidarItem.style.display = !ready && editable ? "none" : ""' in lidar
|
|
api = _read(D03 / "D03_PlanAnalysis_Api.ts")
|
|
assert "`${API_BASE_URL}${base(projectId)}/lidar`" in api
|
|
assert "Promise<{ terrain: PlanJob; lidar: PlanJob }>" in api
|
|
|
|
|
|
def test_source_session_only() -> None:
|
|
lidar = _read(D03 / "D03_PlanAnalysis_UI_LidarUpload.ts")
|
|
assert 'writeState("d03-terrain", source, projectId)' in lidar
|
|
assert "sessionStorage" not in lidar and "localStorage" not in lidar
|
|
state = _read(ROOT / "A00_Common" / "b_page_state.ts")
|
|
assert '"d03-terrain": { bucket: "draft", scope: "project" },' in state
|
|
page = _read(D03 / "D03_PlanAnalysis_UI_Page.ts")
|
|
assert "d03-terrain" not in page # 저장 꼴(d03-plan) 그대로
|
|
|
|
|
|
def test_layers_and_heights_follow_source() -> None:
|
|
api = _read(ROOT / "A00_Common" / "map" / "map_layer_api.ts")
|
|
assert 'terrain ? `&terrain=${terrain}` : ""' in api
|
|
assert "/layers/raster?kind=${kind}${terrainQuery(terrain)}" in api
|
|
assert "/layers/zero-order?${terrainQuery(terrain).slice(1)}" in api
|
|
layers = _read(D03 / "D03_PlanAnalysis_UI_Layers.ts")
|
|
assert "fetchPlanRaster(projectId, key, terrain())" in layers
|
|
assert 'key === "hillshade" ? terrain() : undefined' in layers # 산사태위험 = 원천 없음
|
|
assert "fetchPlanZeroOrder(projectId, terrain())" in layers
|
|
body = layers.split("async function reterrain(): Promise<void> {")[1].split("\n }\n")[0]
|
|
assert 'for (const key of ["slope", "hillshade", "zeroOrder"] as const)' in body
|
|
assert "areaTurn += 1;" in body and "pending.clear();" in body
|
|
page = _read(D03 / "D03_PlanAnalysis_UI_Page.ts")
|
|
assert "const heights = terrain.surface(surface);" in page
|
|
assert "onChange: () => (void backdrop.reterrain(), refresh())," in page
|
|
assert "await Promise.all([loadSurface(), terrain.load()]);" in page
|
|
assert len(page.splitlines()) < 700 and len(layers.splitlines()) < 683
|