Files
Aislo/resources/tester/test_713_4_source_match.py
T

81 lines
2.6 KiB
Python

"""713-4 지킴 — 정본 로직 원문 대조 정리(내역 15) 뒤 꼴.
조종원 = 하루 노임 × 1/8(질의회신 상여 · 휴지계수 없음) ·
지운 키(쪼갠 로직 · 쪽 표 · 터파기 작업량)를
쓰는 곳 0 · 방제 8-3 열 여덟 모두 로직 · 플랜트 13-1-1 표 하나.
"""
from __future__ import annotations
import json
import re
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / "resources/master_data/scripts"))
import check_master as cm # noqa: E402
GONE = [
*("GF000100", "GF000102", "GF000104", "GF000106", "GF000108", "GF000110"),
*("GC000872", "GC000873", "GC000874", "GC000875", "GF000216", "GF000217"),
*("QC001609", "QC001610", "QC001611", "QC001612"),
]
MACHINE = (
"GC000267",
"GC000268",
"GC000269",
"GC000270",
"GC000271",
"GC000275",
"GC000276",
"GF000145",
)
def _rows(files):
return {
str(r["키"]): r for d in files.values() for r in (d.get("줄") or []) + (d.get("표") or [])
}
def _bare(v):
"""비고 글(옛 키를 적어 둔 내력)은 뺌 — 식 · 요소 · 용도만 봄."""
if isinstance(v, dict):
return {k: _bare(x) for k, x in v.items() if k != "비고"}
if isinstance(v, list):
return [_bare(x) for x in v]
return v
def test_지운_키는_어디에도_없음() -> None:
pattern = re.compile("|".join(GONE))
for name, data in cm.load().items(): # 대장(`_키대장.json`)은 준 키를 지님(키 불변) · 안 읽음
assert not pattern.search(json.dumps(_bare(data), ensure_ascii=False, default=str)), name
for path in (ROOT / "resources/master_template").rglob("*.json"):
assert not pattern.search(path.read_text(encoding="utf-8", errors="ignore")), path.name
def test_조종원_시간환산_본문대로() -> None:
rows = _rows(cm.load())
for key in MACHINE:
text = str(rows[key]["중간"])
assert "상여계수" not in text and "휴지계수" not in text, key
def test_방제_열_여덟_플랜트_한_표() -> None:
files = cm.load()
rows = _rows(files)
assert len(rows["QF000229"]["용도"]["로직키"]) == 8 # 8-3 원문 열 여덟
pipe = rows["QC001608"]["줄"]
assert {r["구분"] for r in pipe} == {
"배관용 탄소강관 KSD3507",
"압력배관용 탄소강관 KSD3562 SCH#40",
}
whole = cm.mf.Master(files)
passed, stuck = cm.calc_all(files, whole)
assert not stuck and passed == sum(
1 for d in files.values() if d.get("그룹") == "로직" for _ in d["줄"]
)