Files
Aislo/resources/tester/test_290_1_project_purge.py
T
eomsangdonandClaude Opus 5.5 2ba46341ee feat(공용): 프로젝트마다 따로 동작 공용 — 탭 프로젝트 · 떠남 비움 · 떠남 물음 한 벌 (PLAN 572-1 · 요구 400~403)
- b_project_switch: currentProjectId(탭 세션 먼저 · 새 탭 = 마지막 값) · setCurrentProject · forgetProject · leaveProject(그 프로젝트 세션 칸 · 준비 표식 · 3D 보관함 몫) · reloadIfOtherProject(다른 프로젝트 화면 = 새로 엶) · guardProjectLeave · askProjectLeave([취소 · 폐기 · 저장] 한 번) · linkRouter(라우터가 이어 줌) · 화면 모듈은 부를 때만 들임
- b_asset_cache purgeProject · b_page_state 등록표 D02 · E 일곱 칸(옛 키 한 번 옮김) · router isProjectRoute
- 가드 helper: design_leave = 공용 가드 위 껍질(B05 고침 지문에 D · E 칸 안 섞임) · group_workflow { dirty, save, discard } · b_workflow_nav · b_page_scaffold · overlay · design_store · design_page 직접 읽기 → currentProjectId
- 시험 test_401_project_isolation 새로(탭 둘 흉내 · 떠남 · 보관함 · 가드 · 직접 읽기 한 곳) · 290_1 시드에 D02 · E 옛 키
- 낡은 시험 고침: 298_3 · 346_4 · 384_s · 520_3 헬퍼 = 공용 가드 · 탭 프로젝트 흉내 더함 · 298_3 탭 닫기 듣개 자리 b_project_switch 로 · 302_1 라우터 판별 글 isProjectRoute 꼴로 · 343_3 헬퍼 가짜 IndexedDB 내보냄

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 18:06:14 +09:00

72 lines
2.7 KiB
Python

"""290-1 다른 프로젝트 열면 그 밖 프로젝트 캐시 지움(요구 183-1).
- 들어갈 때(공용 `goToWorkflowStage`) 다른 프로젝트 세션 칸(초안 · 결과 · 옛 키 · 페이지 칸) · 3D 보관함 지움
- 다른 프로젝트에 저장 안 한 고침이 있으면 확인창(지우고 열기 / 남기기) · 남기기 = 그 초안만 둠
- 같은 프로젝트로 다시 들어오면 아무것도 안 지움 · 지금 프로젝트 · 계정 취향(pref) 그대로
`helper_290_1_project_purge.cjs` 가 진짜 TS 를 가짜 저장소 위에서 돌림.
"""
import json
import os
import subprocess
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[2]
HERE = os.path.dirname(os.path.abspath(__file__))
A, B, C = "aaaa1111", "bbbb2222", "cccc3333"
MINE = [f"aislo:draft:structures:{B}", f"aislo:result:section-detail:{B}:7"]
UNRELATED = ["aislo.otp-pending", "aislo:entered-project"]
@pytest.fixture(scope="module")
def out():
proc = subprocess.run(
["node", os.path.join(HERE, "helper_290_1_project_purge.cjs")],
capture_output=True,
text=True,
encoding="utf-8",
timeout=60,
)
assert proc.returncode == 0, proc.stderr
return json.loads(proc.stdout)
def test_지우고_열기_다른_프로젝트_모두_지움(out):
assert out["drop"]["keys"] == sorted(MINE + UNRELATED)
assert out["drop"]["purged"] == [B] # 3D 보관함도
assert out["drop"]["asked"] == [
[f"「이름-{A}」에 저장 안 한 고침이 있음 — 지우고 열기 / 남기기", "지우고 열기", "남기기"]
]
def test_남기기_그_프로젝트_초안만_둠(out):
kept = [
f"aislo:draft:crossw:{A}:12",
f"aislo:draft:structures:{A}",
f"b06:culvertopt:{A}:12",
f"d02_points_{A}", # D02 옛 키도 초안(401)
]
assert out["keep"]["keys"] == sorted(MINE + UNRELATED + kept)
assert out["keep"]["asked"] == 1
def test_같은_프로젝트_다시_들어오면_안_지움(out):
assert out["same"]["asked"] == 0 and out["same"]["purged"] == 0
assert len(out["same"]["keys"]) == 13
def test_빈_초안은_고침_아님_취향은_둠(out):
assert out["plan"] == [A] # C 의 빈 초안({})은 묻지 않음
assert out["pref"] == "{}"
def test_공용_이동_한_곳에서_부름():
nav = (ROOT / "A00_Common/b_workflow_nav.ts").read_text(encoding="utf-8")
assert "return enterProject(" in nav and "./b_project_switch" in nav
ui = (ROOT / "ui_template/ui_template_modal.ts").read_text(
encoding="utf-8"
) # 확인창 = 부품(552-3)
assert 'cancelLabel = "취소"' in ui and "okLabel: confirmLabel, cancelLabel" in ui