Files
Aislo/resources/tester/test_b08_haul_state.py
T
eomsangdonandClaude Opus 5 d7cb14f416 test(B08): tmp/tests 중 tester 에 없던 47 개를 resources/tester 로 옮김
tmp/ 가 창끼리 안 건너가는 것이 확정돼(랩탑이 시간 두고 두 번 확인) 시험·예외가
저절로 건너가도록 git 안으로 옮김. 사용자 확정.

- 내용은 하나도 안 고침 — 자리만 옮김. tmp/tests 는 남겨 둠.
- 같은 이름이 이미 있던 64 개는 랩탑 것을 그대로 두고 건너뜀.
- helper_b05_*.js 둘은 랩탑이 .cjs 로 이미 올린 것과 **줄바꿈만 다른 같은 내용**이라
  복사본을 도로 뺌(시험이 .cjs 를 부름).
- resources/tester/ 에서 전체 1176 통과 · 29 건너뜀 · 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 17:15:57 +09:00

85 lines
3.4 KiB
Python

"""운반 줄은 자연상태로 선다 (2026-09-09).
⚠⚠ **두 자가 섞여 있던 자리다.** 유토곡선은 **다짐상태**로 쌓고(운반거리를 그 기준으로 재야
맞는다) **내역서에 오르는 수량은 자연상태**다 —
`config_system_design` 5-4-3 「운반거리 산정 시 모든 수량은 다짐상태로 환산해 계산하고,
**내역서에 적용하는 수량은 자연상태로 한다**」.
⚠ 겨누는 것 넷
① 되돌린 값(`natural_m3`)이 오면 **그 값으로 선다**
② 쓴 계수를 근거에 적는다 — 되짚을 수 있어야 한다
③ ⚠ 되돌릴 계수가 없으면(갈래 못 붙임) **다짐 그대로 두고 사유를 낸다** — 토사 계수로
눅이면 근거 없이 금액이 움직인다
④ **거리는 안 바뀐다** — 거리는 다짐 기준으로 재는 것이 맞다
"""
from __future__ import annotations
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT))
from B08_Quantity.B08_Quantity_Engine_Handoff import build_handoff # noqa: E402
def (**extra: object) -> dict:
row = {
"equipment": "dump_truck",
"ground": "리핑암",
"volume_m3": 140.78,
"average_distance_m": 318.6,
"in_bill": True,
}
row.update(extra)
return {"rows": [row]}
def (**extra: object) -> dict:
rows = build_handoff(haul_table=(**extra))["work_items"]
return next(row for row in rows if row["name"] == "dump_truck 운반")
def test_되돌린_값이_오면_그것으로_선다() -> None:
row = (natural_m3=122.42, conversion_c=1.15)
assert row["quantity"] == 122.42
def test_쓴_계수가_근거에_적힌다() -> None:
row = (natural_m3=122.42, conversion_c=1.15)
assert "÷ C 1.15" in row["spec_detail"] and "자연상태" in row["spec_detail"]
def test_되돌릴_계수가_없으면_다짐_그대로_두고_사유() -> None:
"""⚠ 토사 계수로 눅이면 근거 없이 금액이 움직인다."""
row = ()
assert row["quantity"] == 140.78
assert "다짐상태 그대로" in row["spec_detail"]
def test_거리는_안_바뀐다() -> None:
"""거리는 다짐 기준으로 재는 것이 맞다 — 상태를 되돌려도 그대로다."""
assert (natural_m3=122.42, conversion_c=1.15)["haul_distance_m"] == 318.6
def test_갈래를_통로로_보낸다() -> None:
"""⚠⚠ 운반 단가가 지반 갈래로 갈리는데 `spec` 문자열만 보내면 받는 쪽이 못 고른다.
「버림」에서 275,584원이 사라졌던 그 자리와 같다 — 갈래는 `variant_value` 한 통로로만.
"""
row = (natural_m3=122.42, conversion_c=1.15)
assert row["variant_axis"] == "ground_class"
assert row["variant_value"] == "리핑암"
# ⚠ 이름은 우리 갈래 그대로 — 일위대가의 「파쇄암」과는 인계본 별칭이 이어 준다.
assert row["spec"] == "리핑암"
def test_갈래가_없는_줄은_칸이_비어_있다() -> None:
"""무대처럼 갈래가 없는 자리에 빈 문자열을 넣지 않는다 — `None` 이라야 「없음」이다."""
rows = build_handoff(haul_table={"rows": [{"equipment": "dozer", "volume_m3": 10.0}]})[
"work_items"
]
row = next(r for r in rows if r["name"] == "dozer 운반")
assert row["variant_axis"] is None and row["variant_value"] is None