Files
Aislo/resources/tester/test_718_1_hopyo_import.py
T
eomsangdonandClaude Opus 5.5 cc588889f6 feat(718-1): 불러오기 결과 「단가산출」 켬 — 산근 블록마다 바탕 없는 단가산출(715-2 받음)
- 새 M02_Hopyo_Sangeun.py — 단산 블록을 부르는 첫 엑셀 줄 1 단위 단가를 고정 더한줄 하나로 · 본뜬 「HP-###### 단산N」 · 같은 본뜬은 그대로(겹침 없음)
- 길 POST /layers/{층}/hopyo/{키}/sangeun · [끝내기] 지문 기록에 단가산출도 셈
- 마법사: 결과 「단가산출」 체크 켬 → ② 걸음 [단가산출 만들기] · 알림 글 「일위대가 · 단가산출」
- 시험: test_718_1 단가산출 더함 · 낡은 대조 고침 — 716-3 왼쪽 판 차례(extras 없어짐) · SANGEUN_READY 대조
- 고정 더한줄 셈 값(엔진 값묶음)은 715-1b 뒤

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

99 lines
5.1 KiB
Python

"""일위대가 불러오기 한시(PLAN 718-1) — 올림 지문 · [끝내기] 지움 · 겹침 막음.
같은 엑셀 작업 중 다시 올림 = 그 파일 이어서(새 키 없음) · [끝내기] = HP · 격자 · 맞춤셈 캐시 0 ·
만든 일위대가 · 별칭 장부 그대로 · 끝낸 같은 엑셀 다시 올림 409 · 만든 것 없이 지움 = 다시 올림 됨 ·
옛 HP(지문 없음) = 파일 그대로 목록에서만 숨김 · 키 번 = 지운 뒤에도 다시 안 씀. 층 = 임시 폴더.
"""
import json
from M02_MasterTemplete import M02_Hopyo_Fit as fit
from M02_MasterTemplete import M02_Hopyo_Store as hs
from M02_MasterTemplete import M02_Template_Layers as layers
from resources.tester.test_m02_hopyo_excel import NORTH, URL, _post, client # noqa: F401
ALL = "/api/m02/layers/personal/hopyo-build-all"
def _keys(client):
return [r["키"] for r in client.get(URL.format("personal")).json()["줄"]]
def test_이어서_끝내기_지움_겹침_막음(client):
folder = layers.personal_dir(7, 42)
first = _post(client).json()
assert first["키"] == "HP-000001" and len(first["지문"]) == 64
again = _post(client).json()
assert again["키"] == "HP-000001" and again["이어서"] is True # 작업 중 같은 엑셀 = 새 키 없음
assert _keys(client) == ["HP-000001"]
made = client.post(ALL, json={"층": "personal", "키": "HP-000001"}).json()
assert len(made["만듦"]) == 68
hs.remember(folder, {"장부 줄": {"갈래": "안 씀"}}) # 별칭 장부 = 끝내기 뒤 남음
cache = fit.cache_path(folder, "HP-000001")
cache.write_text("{}", encoding="utf-8")
old_cache = cache.with_name("_".join(cache.name.split("_")[:2]) + "_옛판_1.json")
old_cache.write_text("{}", encoding="utf-8")
sc_before = sorted((folder / "precombo").glob("SC-*.json"))
res = client.delete(URL.format("personal") + "/HP-000001")
assert res.status_code == 200 and res.json() == {"지움": "HP-000001", "만든": 68}
assert not list((folder / hs.DIRNAME).glob("HP-*.json")) # 이번 HP 0
assert not list((folder / hs.DIRNAME / hs.GRID).glob("HP-*.json"))
assert not cache.exists() and not old_cache.exists()
assert hs.memory(folder) == {"장부 줄": {"갈래": "안 씀"}}
assert sorted((folder / "precombo").glob("SC-*.json")) == sc_before # 만든 일위대가 그대로
block = _post(client) # 끝낸 같은 엑셀 = 막음 · 안내
assert block.status_code == 409 and "이미 불러온 엑셀" in block.json()["detail"]
assert "단가산출 68" in block.json()["detail"] and _keys(client) == []
assert sorted((folder / "precombo").glob("SC-*.json")) == sc_before
def test_만든_것_없이_지움_다시_올림_키_번_안_되씀(client):
assert _post(client).json()["키"] == "HP-000001"
assert client.delete(URL.format("personal") + "/HP-000001").json()["만든"] == 0
got = _post(client) # 만든 것 없음 = 막지 않음 · 번은 이어서
assert got.status_code == 200 and got.json()["키"] == "HP-000002"
def test_옛_HP_목록에서만_숨김(client):
folder = layers.personal_dir(7, 42) / hs.DIRNAME
folder.mkdir(parents=True)
old = folder / "HP-000007.json"
old.write_text(json.dumps({"키": "HP-000007", "파일": "옛.xls", "호표": []}), encoding="utf-8")
assert _keys(client) == []
assert client.get("/api/m02/layers/personal/hopyo-picks").json()["줄"] == []
assert _post(client).json()["키"] == "HP-000008" # 옛 번 뒤로
assert old.is_file() and _keys(client) == ["HP-000008"]
def test_결과_단가산출_산근_블록_바탕_없음_겹침_없음(client):
folder = layers.personal_dir(7, 42)
assert _post(client).json()["키"] == "HP-000001"
url = URL.format("personal") + "/HP-000001/sangeun"
got = client.post(url)
assert got.status_code == 200, got.text
got = got.json()
assert got["블록"] > 0 and len(got["만듦"]) == got["블록"] and got["그대로"] == 0
docs = [json.loads(p.read_bytes()) for p in sorted((folder / "sangeun").glob("SK-*.json"))]
assert len(docs) == got["블록"]
one = docs[0]
assert one["바탕"] is None and one["본뜬"]["키"].startswith("HP-000001 단산")
assert one["구분"] == "실무자료" and len(one["더한줄"]) == 1 and one["단위"]
hp = hs.read(folder, "HP-000001")
no = int(one["본뜬"]["키"].rsplit("단산", 1)[1])
line = next( # 그 블록을 부르는 첫 엑셀 줄 = 엑셀 단가 그대로
x
for h in hp["호표"]
for x in h["줄"]
if (x.get("참조") or {}).get("종류") == "단산" and x["참조"]["번"] == no
)
price = one["더한줄"][0]["고정"]["단가"]
assert sum(price.values()) == sum((line["단가"] or {}).get(k) or 0 for k in price)
again = client.post(url).json() # 다시 = 그대로(겹침 없음)
assert again["만듦"] == [] and again["그대로"] == got["블록"]
res = client.delete(URL.format("personal") + "/HP-000001").json()
assert res["만든"] == got["블록"] # 단가산출만 만들어도 지문 기록
assert len(list((folder / "sangeun").glob("SK-*.json"))) == got["블록"] # 남음
assert _post(client).status_code == 409