- SkPatch SOLO · _mach_logics: (주연료, 조종원) 없는 기종 = GC000273 손료만 · GC000272 조종원 없음 · GC000276 연료 없음(M01 로직이 부르는 것과 같음) · 까닭 = 부착용 집게를 GC000268 로 이으면 「없는 요소 MO:None」 셈 오류(ORCA 북부청사방 단산59 실측) - EQ 630 중 570 셈 됨(남은 60 = M01 기계 자료 빈칸 · 이 걸음 밖) · 여덟 파일 장비 더한줄 180 줄 모두 셈 됨 · 기초 80 · SK 37 · 고름 대기 89 그대로 - test_778_2: 부착용 집게 = GC000273 · 셈 됨 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
80 lines
4.5 KiB
Python
80 lines
4.5 KiB
Python
"""못옮김 기계 잇기 = 기계경비 기초 로직 줄(PLAN 778-2 · 분석 621-B 4-2).
|
||
|
||
EQ 키 바로 더한줄은 셈 오류 → 사용자 잇기 `{id, 기계: EQ…}` = SK 더한줄
|
||
`{종류: 로직, 로직: 기계경비 기초, 입력값: {기계: 기계 번호}}` · SK 셈 됨(그 기계 시간당 기계경비 ×
|
||
엑셀 시간 × 배) · 갈래 다른 키 · 없는 키 = LinkError. 고르기 목록 밖 기계 = 서버 둘째 요청 ·
|
||
지은 문맥 밖 스레드에도 셈 됨(마스터를 셈에 넘김). master 읽기만.
|
||
"""
|
||
|
||
import threading
|
||
|
||
import pytest
|
||
|
||
from M01_MasterData import M01_MasterData_Store as m01
|
||
from M02_MasterTemplete import M02_Hopyo_Combine as combine
|
||
from M02_MasterTemplete import M02_Hopyo_SkPatch as skpatch
|
||
from M02_MasterTemplete import M02_Sangeun_Calc as calc
|
||
from M02_MasterTemplete import M02_Sangeun_Router as sangeun_router
|
||
from resources.tester.test_m02_hopyo_excel import client # noqa: F401
|
||
|
||
BASE = "GC000267" # 바탕 아무 기초(시간 단위) — 셈만 봄
|
||
|
||
|
||
def _plan(whole) -> skpatch._Plan:
|
||
doc = {"키": "SK-000000", "이름": "견줌", "단위": "시간", "바탕": {"로직": BASE},
|
||
"입력값": {}, "덮개": {}, "뺀줄": [], "자재표시": {}, "더한줄": []} # fmt: skip
|
||
work = skpatch._Plan(doc, whole)
|
||
one = {"id": "기계:굴착기", "갈래": "기계", "이름": "굴착기", "규격": "0.6", "단위": "시간",
|
||
"수량": 0.25, "글": "엑셀만 장비 — 기계 못 찾음", "후보": []} # fmt: skip
|
||
work.lost = [one, {**one, "id": "기계:굴착기#1"}]
|
||
return work
|
||
|
||
|
||
def test_기계_잇기_뒤_SK_셈_됨():
|
||
whole = m01.loaded()[1]
|
||
work = _plan(whole)
|
||
work.link([{"id": "기계:굴착기", "기계": "EQ000026"}])
|
||
add = work.doc["더한줄"][-1]
|
||
assert add["종류"] == "로직" and add["로직"] in combine.MACHINE_SET - {
|
||
combine.MACHINE["굴착기"]
|
||
}
|
||
assert add["입력값"] == {skpatch.MACH_IN: "0211-0060"} and "요소" not in add
|
||
assert add["수량"] == pytest.approx(0.25 * work.tb) and add["단위"] == "시간"
|
||
ran = calc.run(work.doc, whole) # 전 = 「Decimal × dict」 셈 오류
|
||
line = next(x for x in ran["줄"] if x.get("cid") == "add:#0")
|
||
assert float(line["금액"]) > 0
|
||
one = {"종류": "로직", "로직": add["로직"], "입력값": add["입력값"], "수량": 1}
|
||
hour = calc.run({**work.doc, "바탕": None, "더한줄": [one]}, whole)["기준"]
|
||
assert float(hour["경비"]) == 27120 # 굴착기(타이어) 0.6㎥ 시간당 경비(엑셀 14-6 과 같음)
|
||
# 무한궤도 = 굴착기(무한궤도) 기계경비 · 갈래 다른 키 · 없는 키 = 틀림
|
||
work.link([{"id": "기계:굴착기#1", "기계": "EQ000019"}])
|
||
assert work.doc["더한줄"][-1]["로직"] == combine.MACHINE["굴착기"]
|
||
# 연료 · 조종원 없는 부속(부착용 집게 0.6∼0.8) = 손료만 기초(GC000273) · 셈 됨
|
||
solo = _plan(whole)
|
||
solo.link([{"id": "기계:굴착기", "기계": "EQ000437"}])
|
||
assert solo.doc["더한줄"][-1]["로직"] == skpatch.SOLO[(False, False)]
|
||
assert calc.run(solo.doc, whole)["기준"] is not None
|
||
work.lost = _plan(whole).lost
|
||
with pytest.raises(skpatch.LinkError):
|
||
work.link([{"id": "기계:굴착기", "기계": "MT000010"}])
|
||
with pytest.raises(skpatch.LinkError):
|
||
work.link([{"id": "기계:굴착기", "기계": "EQ999999"}])
|
||
|
||
|
||
def test_목록_밖_기계_서버_둘째_요청에도_셈(client): # noqa: F811
|
||
m01.loaded() # 마스터 = 이 스레드에서 지음 · 요청 = 다른 스레드(문맥 안 따라감)
|
||
client.app.include_router(sangeun_router.router)
|
||
one = {"종류": "로직", "로직": "GC000268", "입력값": {skpatch.MACH_IN: "0211-0060"},
|
||
"이름": "굴착기(타이어) 0.6㎥", "단위": "시간", "수량": 1} # fmt: skip
|
||
doc = {"키": "SK-000000", "이름": "t", "단위": "시간", "바탕": None, "입력값": {}, "덮개": {},
|
||
"뺀줄": [], "자재표시": {}, "더한줄": [one]} # fmt: skip
|
||
for _ in range(2):
|
||
got = client.post("/api/m02/layers/personal/sangeun/calc", json={"문서": doc})
|
||
assert got.status_code == 200, got.text
|
||
assert got.json()["기준"]["경비"] == 27120, got.json().get("까닭")
|
||
whole, out = m01.loaded()[1], {} # 지은 문맥 밖 스레드(서버 요청 스레드 풀과 같음)
|
||
run = threading.Thread(target=lambda: out.update(calc.run(doc, whole)))
|
||
run.start()
|
||
run.join()
|
||
assert out["기준"] and float(out["기준"]["경비"]) == 27120, out.get("까닭")
|