# ruff: noqa: F811 — 임시 층 fixture(world)를 test_m02_labor_ref 에서 받아 씀 """836-5 저장 전 단가산출(불러오기 미리 보기)도 수식 보기 — 임시 storage · M01 그대로. ① 미리 보기 문서째 수식 길 읽기(`Sk_Path.read_memory`) = 디스크 쓰기 0 · 금액 = 저장한 SK 를 읽은 값 · 미리 셈(`본`)도 쓰기 0 ② 화면 — 줄 쌓기가 빈 키 + 저장 전 문서를 서버에 문서째 읽힘 · 왼쪽은 보기만 · 탭은 그 문서가 있을 때만 수식 실무 엑셀 없으면 ① skip. """ from __future__ import annotations from pathlib import Path import helper_m02_hopyo_golden as golden import pytest from M02_MasterTemplete import M02_Doc_Sk_Path as path 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] 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 @pytest.mark.parametrize( ("tag", "no"), [("봉화", 3), ("북부청임도", 2)] ) # STmate 원파일 · 엑셀(EST) def test_memory_doc_read_writes_nothing_same_as_saved(world, tag, no) -> None: src = golden.FILES.get(tag) if src is None or not src.exists(): pytest.skip(f"실무 엑셀 없음 {tag}") 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): seen = fh.draft(folder, row["키"], no) before = _files(folder) got = path.read_memory(seen["문서"]) # 저장 전 문서째 asked = path.preview("-", {"본": seen["문서"], "문서": got["문서"]}) # 미리 셈 assert _files(folder) == before # 읽기 · 미리 셈 = 디스크 쓰기 0 assert got["판"] == "" and got["셈"] and asked["셈"] == got["셈"] made = fh.make(folder, row["키"], no, doc=seen["문서"]) # [저장] saved = path.read(made["이름"]) assert saved["셈"] == got["셈"] # 금액 = 저장한 SK 와 같음 with pytest.raises(store.StoreError): path.read_memory("문서 아님") def test_screen_memory_doc_stack_view() -> None: stack = (ROOT / "A00_Common" / "line_stack_screen.ts").read_text(encoding="utf-8") assert "memory?: () => Record | null;" in stack assert 'cp.route(saved ? "-" : key, path)' in stack and "본: saved" in stack assert 'call("/read", {})' in stack and "left.inert = !!mem();" in stack tabs = (ROOT / "M02_MasterTemplete" / "M02_MasterTemplete_Sangeun_Tabs.ts").read_text( encoding="utf-8" ) assert ( "const doc = !!k || !!opt.page || !!opt.memory?.();" in tabs and "memory: opt.memory," in tabs ) detail = (ROOT / "M02_MasterTemplete" / "M02_MasterTemplete_Sangeun_Detail.ts").read_text( encoding="utf-8" ) assert "doc.가져온 &&" in detail and "memory: () =>" in detail router = (ROOT / "M02_MasterTemplete" / "M02_Doc_Router.py").read_text(encoding="utf-8") assert '"/layers/{layer}/sangeun/-/doc/read"' in router and "write=body.본 is None" in router