- 줄 쌓기 화면 `memory` 옵션(저장 전 문서) — 빈 키 + 몸 `본` · 왼쪽 보기만 · 디스크 쓰기 0 - 서버 `…/sangeun/-/doc/read` · 미리 셈 몸 `본`(읽기 권한이면 됨) - 지킴 시험 `test_836_5_memory_doc`(STmate 봉화 · EST 북부 · 금액 = 저장 SK 와 같음) · 시험 둘 문자열 맞춤 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
74 lines
3.5 KiB
Python
74 lines
3.5 KiB
Python
# 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<string, unknown> | null;" in stack
|
|
assert 'cp.route(saved ? "-" : key, path)' in stack and "본: saved" in stack
|
|
assert 'call<Loaded>("/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
|