- 탭 셋 일위대가표 · 단가산출표 · 단가산출 상세 = 서버 역할 id(이름으로 안 찾음 · STmate 단가산출근거 뛰기 풀림) · 두 형식 같은 탭 글 · 원본 시트 이름은 막대 - 새 logic/M02_MasterTemplete_Hopyo_SheetMap.ts(순수 — 줄 칠 · 블록 칠 · 머리 행 = 가장 나쁜 칠 · 뛸 곳) · 「이어짐」 = 확인 창 체크 규칙(캐시가 이김) - 새 M02_MasterTemplete_Hopyo_SheetNav.ts — 범례 createLegend · 맥락 단추(상세 · 목록 · 하위 호표 · 부르는 줄 차례로) · 뒤로 · 두 번 누름 = 첫 단추 · 다시 칠(목록 다시 읽음 · 캐시 고침 · 만들기) · 칠은 A 열 ~ 끝 열 · 띠는 A 열 - Hopyo_Sheet.ts = 잇는 줄만(580 → 609) · 줄 행 누름 = 그 줄 그대로 · 머리 행 = 호표 영역 - 779-6 — 같은 파일 창은 새 모달 대신 그 창을 앞으로 꺼내 그 자리로 · 닫기 = 제자리로 내림 · 마지막 격자 다시 씀(확인 · 고르기 창 [엑셀 보기] 모두 openSheet 한 곳으로 지나감) - Hopyo_Check.ts saveDraft = 다시 칠 알림 한 줄(663 → 662) · Hopyo_Api.ts at 내보냄(676 그대로) - 서버 Match.view — 목록 「후보」 중 이름 후보 안 찾은 줄만 다시 셈(뒤 셈 끝 뒤) → 확인 창 「없음」과 같음(빨강) · 북부청 임도 목록 응답 2.81 → 3.49 초(다시 셈 48 줄 · 없음 11) - 시험: 새 test_779_4_sheet_map(꼴 표 · 블록 칠 · 실물 EST · STmate 칠 행 수 · 뛸 곳) · test_m02_hopyo_screen 779 지킴 더함 - 낡은 시험 고침: test_779_2 기대 「후보 ≠ 없음 허용」 → 「모두 같음」(까닭 = 이번 덧 셈) · 도우미 helper_m02_hopyo_check · helper_729_3_hopyo_left 에 document 대역(까닭 = saveDraft 알림이 document 를 씀) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
79 lines
3.4 KiB
Python
79 lines
3.4 KiB
Python
"""779-2 불러오기 엑셀 하이라이트 재료 — 목록 `줄상태` 수 = 줄 수 · 상태 = 확인 창 상태 ·
|
|
`hopyo-marks` 길 읽기만(층 폴더 파일 변화 0) · 블록 판정 = 맞춤셈 캐시 · SK = 만든 것."""
|
|
|
|
import hashlib
|
|
|
|
from M02_MasterTemplete import M02_Hopyo_Fit as fit
|
|
from M02_MasterTemplete import M02_Hopyo_Sangeun as sangeun
|
|
from M02_MasterTemplete import M02_Template_Layers as layers
|
|
from resources.tester.test_m02_hopyo_excel import NORTH, URL, _post, client # noqa: F401
|
|
|
|
# ruff: noqa: F811
|
|
KEY = "HP-000001"
|
|
|
|
|
|
def _tree(root) -> dict[str, str]:
|
|
return {
|
|
str(p.relative_to(root)): hashlib.sha256(p.read_bytes()).hexdigest()
|
|
for p in sorted(root.rglob("*"))
|
|
if p.is_file()
|
|
}
|
|
|
|
|
|
def _ready(client):
|
|
res = _post(client, data=NORTH.read_bytes(), name=NORTH.name)
|
|
assert res.status_code == 200 and res.json()["키"] == KEY
|
|
folder = layers.personal_dir(7, 42)
|
|
fit.run_job(folder, KEY)
|
|
return folder
|
|
|
|
|
|
def test_줄상태_수_줄_수_확인창_같음(client):
|
|
_ready(client)
|
|
base = URL.format("personal")
|
|
whole = client.get(f"{base}/{KEY}").json()
|
|
assert whole["호표"]
|
|
diff = {}
|
|
for h in whole["호표"]:
|
|
one = client.get(f"{base}/{KEY}/{h['번']}").json()["호표"]
|
|
assert len(h["줄상태"]) == len(one["줄"]) == h["맞춤"][1], h["번"]
|
|
for (i, state, check), line in zip(h["줄상태"], one["줄"]):
|
|
full = line["맞춤"]["상태"]
|
|
if state != full:
|
|
diff[(state, full)] = diff.get((state, full), 0) + 1
|
|
assert check == line["맞춤"]["체크"]
|
|
assert h["만든"] is None # 확인된 사전조합 전
|
|
assert [x[0] for x in h["줄상태"]] == list(range(len(h["줄상태"])))
|
|
# 779-4 — 목록 「후보」 중 이름 후보 안 찾은 줄은 다시 셈 → 확인 창과 모두 같음(「없음」 = 빨강)
|
|
assert diff == {}, diff
|
|
|
|
|
|
def test_marks_읽기만_판정_캐시_같음_SK(client):
|
|
folder = _ready(client)
|
|
base = URL.format("personal")
|
|
before = _tree(folder)
|
|
got = client.get(f"{base}-marks/{KEY}")
|
|
assert got.status_code == 200, got.text
|
|
rows = got.json()["블록"]
|
|
assert _tree(folder) == before # 읽기만 — 파일 변화 0
|
|
cache = fit.result(folder, KEY)["블록"]
|
|
hp = client.get(f"{base}-grid/{KEY}") # 길 살아 있음(블록 수는 파일에서)
|
|
assert hp.status_code == 200
|
|
assert rows and [r["번"] for r in rows] == sorted(r["번"] for r in rows)
|
|
judged = [r for r in rows if r["판정"]]
|
|
assert judged and all(r["판정"] in ("맞음", "다른 점", "후보", "없음") for r in judged)
|
|
assert {r["판정"] for r in judged} <= {e["판정"]["상태"] for e in cache.values()}
|
|
assert all(r["SK"] is None and r["갈래"] is None and r["못옮김"] == [] for r in rows)
|
|
# [단가산출 만들기] 뒤 = SK · 갈래 · 못옮김 실림
|
|
made = client.post(f"{base}/{KEY}/sangeun")
|
|
assert made.status_code == 200, made.text
|
|
after = {r["번"]: r for r in client.get(f"{base}-marks/{KEY}").json()["블록"]}
|
|
for one in made.json()["만듦"]:
|
|
row = after[one["번"]]
|
|
assert (row["SK"], row["갈래"], row["못옮김"]) == (one["키"], one["갈래"], one["못옮김"])
|
|
assert sangeun.made(folder, KEY)
|
|
snap = _tree(folder)
|
|
client.get(f"{base}-marks/{KEY}")
|
|
assert _tree(folder) == snap
|
|
assert client.get(f"{base}-marks/HP-999999").status_code in (404, 400)
|