Files
Aislo/resources/tester/test_common_aliases.py
T
eomsangdonandClaude Opus 5 a08938ea1a refactor(aliases): 별칭표를 한 벌로 — 범위(scope)·판을 붙여 B08·B09 가 같은 파일만 읽음
- 정본 resources/data_aliases/aliases_2026-01-01.json · 로더 common_util/common_util_aliases.py
  (칸 빠짐·모르는 축·겹친 범위의 두 대상은 읽을 때 오류 · 판이 다르면 안 씀 · 양방향 조회)
- 흩어진 세 벌을 옮김: 매핑표 ground_aliases(리핑암→파쇄암·암절취) 삭제 ·
  B09 UnitPrice 전역 VARIANT_ALIASES 삭제 · B08 인계본 ground_class_aliases 는 별칭표에서 만든 보기
- 범위: 리핑암→파쇄암 @FP-10-11 · 리핑암→암절취 @FP-10-12 · 화약공→1016 @FP-09-05 (근거 문구 줄마다)
- 자원 축 별칭 검사도 같은 로더로 합침(자원 목록 폴더에서 별칭 파일을 옮김)
- 시험 test_common_aliases.py 6건 · 전체 1509 통과

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn
2026-09-13 17:22:17 +09:00

78 lines
3.0 KiB
Python

"""별칭표 한 벌 (2026-09-13 축 C 명세 5장·17장 · `common_util_aliases`).
지키는 것
① 정본 파일의 모든 줄에 scope·pum_edition 이 있다
② 별칭은 **범위 안·같은 판**에서만 옮긴다 — 「리핑암 → 파쇄암」은 10-11 에서만
③ 양방향 조회 — 품셈 이름으로도 우리 이름을 찾는다
④ scope 없음 · 모르는 축 · 겹친 범위의 두 대상은 읽을 때 오류
⑤ B09 갈래 고르기와 B08 인계본이 **같은 파일**을 읽는다
"""
from __future__ import annotations
import json
import pytest
from B08_Quantity.B08_Quantity_Engine_Handoff import load_mapping
from common_util.common_util_aliases import (
ALIAS_FILE,
AliasError,
alias_target,
load_aliases,
parse_aliases,
)
ROW = {
"axis": "variant",
"from": "리핑암",
"to": "파쇄암",
"scope": "FP-10-11",
"pum_edition": "2026-01-01",
}
def test_정본_파일_모든_줄에_범위와_판():
rows = parse_aliases(json.loads(ALIAS_FILE.read_text(encoding="utf-8"))["aliases"])
assert rows
assert all(row["scope"].startswith("FP-") and row["pum_edition"] for row in rows)
def test_범위_안_같은_판에서만_옮긴다():
rows = load_aliases("variant")
assert alias_target(rows, "리핑암", "FP-10-11", "2026-01-01") == "파쇄암"
assert alias_target(rows, "리 핑 암", "FP-10-12-02", "2026-01-01") == "암절취"
assert alias_target(rows, "리핑암", "FP-09-19-02", "2026-01-01") is None
assert alias_target(rows, "리핑암", "FP-10-11", "2027-01-01") is None
assert alias_target(rows, "발파암", "FP-10-11", "2026-01-01") is None
def test_양방향_조회():
rows = load_aliases("variant")
assert alias_target(rows, "파쇄암", "FP-10-11", "2026-01-01", reverse=True) == "리핑암"
assert alias_target(rows, "파쇄암", "FP-10-12", "2026-01-01", reverse=True) is None
def test_규약_어기면_읽을_때_오류():
with pytest.raises(AliasError):
parse_aliases([{**ROW, "scope": ""}])
with pytest.raises(AliasError):
parse_aliases([{**ROW, "axis": "ground"}])
with pytest.raises(AliasError):
parse_aliases([ROW, {**ROW, "to": "암절취", "scope": "FP-10"}])
# 범위가 안 겹치거나 판이 다르면 같은 이름이 다른 곳으로 가도 된다
assert len(parse_aliases([ROW, {**ROW, "to": "암절취", "scope": "FP-10-12"}])) == 2
assert len(parse_aliases([ROW, {**ROW, "to": "암절취", "pum_edition": "2027-01-01"}])) == 2
def test_B08_인계본은_범위째_싣는다():
view = load_mapping().ground_aliases["aliases"]["리핑암"]
assert view["scopes"] == {"파쇄암": "FP-10-11", "암절취": "FP-10-12"}
def test_B09_갈래_고르기가_별칭표를_읽는다():
from B09_Estimation.B09_Estimation_UnitPrice import find_variant_code
assert find_variant_code("FP-10-11", "리핑암") == "B-FP-10-11#파쇄암"
assert find_variant_code("FP-10-11", "발파암") == "B-FP-10-11#발파암"