- 새 파일 M02_MasterTemplete_Find_Pick.ts — 있는 길 넷 이음(기준 목록 · 로직 · 층 서고 목록 · /logic-lib/pick 인력 job · 재료 price 서버 찾기) · 기계 · 실무 호표 뺌 - 부르는 곳 셋: 단가산출 [기본 로직 선택](로직 줄만) · [항목 추가](더한줄 인력 · 재료 = 요소 키 LB · MT 수량 1) · 일위대가 [로직 추가](Labor_Pick 이 lib.sangeun 이면 새 창) - 일위대가 인력 · 재료 = 고정 줄 이음 꼴 fixedOf · lib.fixed 받는 칸은 723(sub1) — 그 전엔 회색 막힘 - 옛 창(B09 둘 · 불러오기 둘 · 프로젝트 층) 그대로 · 옛 창의 단가산출 탭 코드 걷음(부르는 곳 없음) - 부품 상자: 데이터 표 흐린 줄 is-dim 더함 - 낡은 시험 test_717_4_sangeun_pick: 옛 창 단가산출 탭 · 재료 숨은 한 줄 글 대조 → 새 창 꼴로 고침 - 새 지킴 시험 test_721_find_pick(부르는 곳 · 옛 창 그대로 · 인력 · 재료 줄이 서버 셈에서 노임 · 자재 값) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
3.7 KiB
Python
78 lines
3.7 KiB
Python
"""717-4 단가산출(SK) 고르기 — SK 목록 층 차례 · 고른 SK 참조 꼴 · 일위대가 줄 금액."""
|
||
|
||
from __future__ import annotations
|
||
|
||
import re
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
from M02_MasterTemplete import M02_Labor_Ref as refs
|
||
from M02_MasterTemplete import M02_MasterTemplete_Store as store
|
||
from M02_MasterTemplete import M02_Sangeun_Calc as calc
|
||
from resources.tester.test_m02_labor_ref import COMPANY, MINE, world # noqa: F401 — 같은 임시 층
|
||
|
||
ROOT = Path(__file__).resolve().parents[2]
|
||
M02 = ROOT / "M02_MasterTemplete"
|
||
PCT = "GC001109" # 원/㎡ · 인력 둘 + 덧줄 %
|
||
|
||
|
||
def _text(path: Path) -> str:
|
||
return path.read_text(encoding="utf-8")
|
||
|
||
|
||
def test_sk_list_layer_order_and_ref_shape():
|
||
"""목록 = 마스터 › 회사 › 개인 차례 · 종류 sangeun 만 · 고른 줄 = 참조 {층, 주인, 키}."""
|
||
pick = _text(M02 / "M02_MasterTemplete_Sangeun_Pick.ts")
|
||
order = re.search(r"LAYER_ORDER = \[([^\]]+)\]", pick).group(1)
|
||
assert [x.strip().strip('"') for x in order.split(",")] == ["system", "company", "personal"]
|
||
assert "[...scopes].sort((a, b) => rank(a) - rank(b))" in pick
|
||
assert "r.종류 === kind" in pick and 'SANGEUN_KIND = "sangeun"' in pick
|
||
assert "listLayerDocs(scopes, SANGEUN_KIND)" in pick
|
||
assert 'ref: { 층: at.층, 주인: at.층 === "system" ? null : at.주인, 키: r.이름 }' in pick
|
||
# 721-2 — SK · 일위대가 탭은 찾아 넣기 창(Find_Pick) · 줄 누름 = 참조
|
||
find = _text(M02 / "M02_MasterTemplete_Find_Pick.ts")
|
||
assert "go: take(() => opt.ref?.(x.ref, x.제목 || x.이름))" in find
|
||
assert "sangeun: true," in _text(
|
||
M02 / "M02_MasterTemplete_Hopyo_Pick.ts"
|
||
) # 일위대가 [로직 추가] → 찾아 넣기 창
|
||
store_ts = _text(ROOT / "B09_Estimation" / "B09_Estimation_UI_Store.ts")
|
||
assert '["sangeun", "단가산출"],' in store_ts and "sangeun: sangeunItems," in store_ts
|
||
# 더한줄 고르기 — 715 이음 꼴 셋(인력 · 재료 = 요소 키)
|
||
assert 'logic: (x) => done({ 종류: "로직", 로직: x.키, 입력값: {}, 수량: 1 })' in pick
|
||
assert "ref: (ref) => done({ 참조: ref, 수량: 1 })" in pick
|
||
assert "done({ 종류: e.종류, 요소: e.코드, 이름: e.이름, 단위: e.단위, 수량: 1 })" in pick
|
||
|
||
|
||
def _sk(folder, name):
|
||
with store.at(folder):
|
||
return refs.create(
|
||
"sangeun", {"이름": name, "단위": "㎡", "바탕": {"로직": PCT}, "더한줄": []}
|
||
)["이름"]
|
||
|
||
|
||
def test_list_amount_and_labor_line_holds_upper_sk(world): # noqa: F811
|
||
"""층 목록 SK 줄에 1 단위 `기준금액` · 개인 일위대가 줄이 회사 SK 를 참조 = SK 1 단위 × 수량."""
|
||
from M02_MasterTemplete import M02_Labor_Doc as labor
|
||
|
||
sk = _sk(world["company"], "회사 단가산출")
|
||
with store.at(world["company"]):
|
||
rows = [r for r in store.list_all() if r["종류"] == "sangeun"]
|
||
refs.summaries(world["company"], rows)
|
||
one = calc.calc_doc(store.read("sangeun", sk)["문서"])["1단위"]["계"]
|
||
assert [r["이름"] for r in rows] == [sk]
|
||
assert rows[0]["제목"] == "회사 단가산출" and rows[0]["기준금액"] == pytest.approx(one, abs=1)
|
||
with store.at(world["personal"]):
|
||
sc = refs.create(
|
||
"precombo",
|
||
{
|
||
"이름": "일위대가",
|
||
"단위": "㎡",
|
||
"담은로직": [{"참조": {**COMPANY, "키": sk}, "수량": {"손": 3}}],
|
||
},
|
||
)["이름"]
|
||
saved = store.read("precombo", sc)["문서"]["담은로직"][0]["참조"]
|
||
got = labor.calc({"담은로직": [{"참조": {**MINE, "키": sc}, "수량": {"손": 1}}]}, {})
|
||
assert saved == {**COMPANY, "키": sk}
|
||
assert got["반영합"]["계"] == pytest.approx(one * 3, abs=1)
|