Files
Aislo/resources/tester/test_384_2_page_data.py
T
eomsangdonandClaude Opus 5.5 c77e44ab07 refactor(B05·B06 한 페이지): 노선 id 한 칸 — 출처 다섯을 페이지 자료 줄 하나로 (386-2b)
- design_page_route 새로(칸 · 끄는 모듈 없음) · 채움 = design_page_data pageSectionContext(횡단 context · 세션 캐시) 하나
- 읽는 곳 = 종단 보기 [저장] 몫 · 횡단 보기 · 종단도 render · 평면 횡단 판(노선 번호 훑기 지움) · 3D · 측점 그림
- 페이지 떠남에 칸 비움 · 저장 정본 바뀜엔 그대로
- design_profile 700줄 앞 쪼갬(design_profile_context — 만들 때 넘기는 것 · 미리보기 대기)
- 시험 test_384_2b · 평면 횡단 판 시험 = 페이지 노선 값만

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TteK8mfYZetk5P3bEZkyVZ
2026-10-17 19:08:37 +09:00

99 lines
3.4 KiB
Python

"""PLAN 386-2 sub7 — B05 · B06 한 페이지 자료 줄(`design_page_data.ts`).
못박는 것
- 저장분(구조물 · 관 · 정의 판 확인) = 페이지에서 한 번 — 묶음 · 두 보기 구조물 칸 · 초안 측점이 같은 줄.
- 보기 전환 · 다시 보임 = 요청 0(구조물 칸 load 가 직접 안 받음).
- 저장 정본이 바뀌면(`invalidateSectionDetail` → `forgetDraftStations`) · 페이지를 떠나면 비움 → 한 번 다시.
- 돌려줄 때마다 사본 · 실패는 기억 안 함 · 「계산 중」 점 = 묶음 차례가 떠 있는 동안.
짝: `helper_384_2_page_data.cjs`(진짜 TS · 서버 흉내).
"""
from __future__ import annotations
import json
import subprocess
from pathlib import Path
import pytest
HERE = Path(__file__).resolve().parent
ROOT = HERE.parents[1]
def _read(rel: str) -> str:
return (ROOT / rel).read_text(encoding="utf-8")
@pytest.fixture(scope="module")
def r() -> dict:
proc = subprocess.run( # noqa: S603 — 고정 실행 파일
["node", str(HERE / "helper_384_2_page_data.cjs")],
capture_output=True,
text=True,
encoding="utf-8",
timeout=60,
)
assert proc.returncode == 0, proc.stderr
return json.loads(proc.stdout)
def test_저장분_한_번(r):
assert r["open"] == {"structures": 1, "pipes": 1, "version": 1}
assert r["other"] == 2 # 다른 프로젝트는 따로
def test_돌려줄_때마다_사본(r):
assert r["copy"] == {"same": False, "after": 1}
def test_비우면_한_번_다시(r):
assert r["afterForget"]["structures"] == 3 # p1 · p2 · 비운 뒤 p1 한 번
def test_실패는_기억_안_함(r):
assert r["failed"] == "error"
assert r["retry"] == 3 # 처음 · 실패 · 다시
def test_계산_중_점(r):
assert r["midBusy"] is True
assert r["busy"][0] is False and r["busy"][-1] is False # 듣기 시작 = 지금 상태 · 끝나면 끔
assert len(r["busy"]) <= 6 # 뗀 뒤 차례는 안 알림
@pytest.mark.parametrize(
"rel",
[
"A00_Common/design/design_pipeline_page.ts",
"B05_Profile/B05_Profile_UI_Page_Structures.ts",
"B06_Section/B06_Section_UI_Page_Structures_Panel.ts",
"B06_Section/B06_Section_Section_Drafts.ts",
],
)
def test_보기_전환_길은_자료_줄만(rel):
src = _read(rel)
assert "dropStaleStructureTypes(" not in src
assert "fetchDetailPipePoints(" not in src
assert "pageStructures(" in src
# B05 구조물 칸은 [저장] 직전 판번호 · 저장 뒤 목록만 직접 받음
if "Page_Structures.ts" not in rel:
assert "fetchStructures(" not in src
def test_비우는_자리():
drafts = _read("B06_Section/B06_Section_Section_Drafts.ts")
page = _read("A00_Common/design/design_page.ts")
store = _read("B06_Section/B06_Section_Section_Store.ts")
assert "forgetPageData(projectId)" in drafts # 저장 정본 바뀜(invalidate → forgetDraftStations)
assert "forgetDraftStations(projectId)" in store
assert "forgetPageData(projectId, true)" in page # 페이지를 떠남(노선 id 칸도 · 386-2b)
assert "onPageBusy(projectId" in page
def test_계산_중_점은_묶음_차례():
pipe = _read("A00_Common/design/design_pipeline_page.ts")
dock = _read("A00_Common/design/design_dock.ts")
assert pipe.count("trackPageBusy(projectId") == 2 # 열 때 start · 조작 feed
assert "setBusy" in dock and "Design_Busy" in dock