Files
Aislo/resources/tester/test_835_1_import_preview.py
T
eomsangdonandClaude Opus 5.5 4ae8d742f2 fix(835-1): M02 불러오기 화면 여섯 — 보기 자동 저장 취소 · 비목 줄 금액 칸 · 상세 초록 칠 걷음 · 저장 단추 → 고르면 모달 · 모달 1400
- 자동 저장 취소(요구 852-1) — 가져온 식 열기 = 미리 보기 `…/sangeun/from-hopyo/preview`(층 · 재료 고름 안 씀 ·
  같은 내용 SK 있으면 그것을 읽음) · [저장] = `from-hopyo` 몸 `문서`(고친 문서째 · 안쪽 산근 참조 · 내 기계 그때) ·
  옛 길: 단가산출표 목록 [내 단가산출로] · [수정] 모달 단산 줄 누름이 서버 make 로 SK 를 바로 만들었음
  (`FromHopyo.make` 를 `_prep` · `draft` · `make(doc)` 로 · `Imported.new_doc` · `keep` · `draft` · `MatPick.merge`)
- 산출근거 표 비목 줄(노무비 : … = 금액) = 합계 · 그 비목 칸에 금액(엑셀 단가산출 시트와 같음 · 852-2 · `line_stack_out`)
- 단가산출 상세 시트 블록 안 줄 이어짐 초록 안 칠함 — 출처 행 = 인력 · 기계 노무비 행(852-3 · 다른 칠 · 머리 행 그대로)
- 단가산출 목록 [내 단가산출로] 걷음 → 줄 고르면 개인 층 가져온 식 모달(852-4)
- 일위대가표 목록 [내 일위대가로] 걷음 → 줄 고르면 [수정] 모달(852-5 · 모달 머리 [내 일위대가로] 그대로)
- 부품 상자 모달 큰 중간 창 `1400px`(1400 × 880) — 불러오기 [수정] · 가져온 식 모달(852-6)
- 시험: 새 test_835_1(미리 보기 쓰기 0 · [저장] = 옛 길과 같은 SK) · 낡은 시험 고침 —
  test_627(저장 단추 걷음 · MatPick 가짜 없어 import.meta 로 죽던 것) · test_779_5(이어짐 초록 안 칠함) ·
  test_793_3b · test_809_1(수정 모달 단산 줄 = 가져온 식 모달)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-15 11:54:05 +09:00

80 lines
3.9 KiB
Python

# ruff: noqa: F811 — 임시 층 fixture(world)를 test_m02_labor_ref 에서 받아 씀
"""835-1 불러오기 보기 = 쓰기 없음(요구 852) — 임시 storage · M01 그대로.
① 가져온 식 미리 보기(`FromHopyo.draft`) = 층 파일 0 바뀜 · [저장](`make` 몸 문서) = 그때 SK ·
옛 길(`make` 문서 없음)과 같은 내용(같은 SK 다시 씀 = 금액 · 이음 그대로) · 다시 보기 = 같은것 키
② 화면 — 보기 길은 미리 보기만 부름(만들기는 [저장]) · 목록 줄 저장 단추 없음 · 고르면 모달 ·
모달 큰 중간 창(1400) · 산출근거 표 비목 줄 금액 칸
실무 엑셀 없으면 ① skip.
"""
from __future__ import annotations
import re
from pathlib import Path
import helper_m02_hopyo_golden as golden
import pytest
from M02_MasterTemplete import M02_Hopyo_Excel as hx
from M02_MasterTemplete import M02_Hopyo_Store as hs
from M02_MasterTemplete import M02_MasterTemplete_Store as store
from M02_MasterTemplete import M02_Sangeun_FromHopyo as fh
from resources.tester.test_m02_labor_ref import world # noqa: F401 — 같은 임시 층
ROOT = Path(__file__).resolve().parents[2]
M02 = ROOT / "M02_MasterTemplete"
def _files(folder: Path) -> dict[str, int]:
return {str(p.relative_to(folder)): p.stat().st_mtime_ns for p in folder.rglob("*") if p.is_file()} # fmt: skip
def test_preview_writes_nothing_save_makes_same(world) -> None:
src = golden.FILES.get("봉화")
if src is None or not src.exists():
pytest.skip("실무 엑셀 없음 봉화")
folder, data = world["personal"], src.read_bytes()
with store.at(folder):
parsed = hx.read_book(src.name, data)
row = hs.save(folder, src.name, parsed, {"이름": "sub1임시"}, None, hs.fingerprint(data))
fh.keep(folder, row["키"], src.name, data)
with store.at(folder):
before = _files(folder)
seen = fh.draft(folder, row["키"], 3) # 단산3 깬잡석채집 — 기계 줄
assert _files(folder) == before # 보기 = 디스크 쓰기 0
assert seen["같은것"] is None and seen["문서"]["가져온"]["로직"]["호표"]
assert seen["검산"]["같음"] is True
made = fh.make(folder, row["키"], 3, doc=seen["문서"]) # [저장]
assert made["다시씀"] is False and (folder / "sangeun" / f"{made['이름']}.json").is_file()
old = fh.make(folder, row["키"], 3) # 옛 길 = 같은 내용 → 같은 SK
assert old["다시씀"] is True and old["이름"] == made["이름"]
assert old["검산"] == made["검산"]
again = fh.draft(folder, row["키"], 3)
assert again["같은것"] == made["이름"]
def _src(name: str) -> str:
return (M02 / f"M02_MasterTemplete_Hopyo_{name}.ts").read_text(encoding="utf-8")
def test_screen_view_paths_do_not_save() -> None:
imported = _src("Imported")
load = imported.split("async function load()", 1)[1].split("openModal(", 1)[0]
assert "previewImported(o)" in load and "fromHopyo(" not in load # 열기 = 미리 보기
save = imported.split("async function save()", 1)[1].split("const saveBtn", 1)[0]
assert "fromHopyo(o, doc)" in save # 만들기 = [저장]
view = _src("View")
assert "/sangeun/from-hopyo" not in view and "openImported(" in view
sk = _src("SheetSk")
assert "M02_ToMySk" not in sk and "skMine" not in sk
assert re.search(r"pick\(b\.번\);\s*open\(b\.번, true\)", sk) # 고르면 모달
sheet = _src("Sheet")
assert "mineButton" not in sheet and 'addEventListener("click", () => openView(h))' in sheet
for name in ("Imported", "View"):
assert 'width: "1400px"' in _src(name), name
css = (ROOT / "ui_template" / "ui_template_modal.css").read_text(encoding="utf-8")
assert '.ui-modal.ui-modal--wide[data-width="1400px"]' in css
out = (ROOT / "A00_Common" / "line_stack_out.ts").read_text(encoding="utf-8")
assert "cols: { sum: part, [c]: part }" in out # 비목 줄 금액 칸(엑셀과 같음)