요구 651 · 653 — 계산 공식 참고용 흐름도(① M01 로직 상세 오른쪽 접는 패널)를 걷음. ② M02 일위대가 다이어그램은 그대로.
지움(64 파일 · 18,666 줄 · 되돌릴 길 = git 이력)
- M01 6 파일 1,064 줄 — Store_Flow.py · UI_LogicLab_Flow.ts/.css · FlowRows.ts · FlowView.ts/.css
- M02_MasterTemplete/DataFlow 43 파일 12,799 줄 — 흐름도 화면 · 셈(Compute · Convert · Lookup · Model · Eval …)
- 시험 15 파일 4,803 줄 — test_m01_logic_flow{view,_engine,_project,_save} · test_m02_df_*(값 찾기 values_old 뺌) — 지운 흐름 코드만 지키던 것
남김(바닥) — DataFlow M02_DF_UnitPick(일위대가 셋) · M02_DF_Values(M02_Item_Prices) · M02_DF_Round · _standard 표 ·
M02_DF_Router = GET /api/m02/df/standards 하나 · M02_DF_Api = cfStandards 하나 · CfRound 꼴은 Round 안으로
고침
- M01 Router — /save = Store_Make.save(개정 확인 · 자체 파일 새 줄 GX · added 그대로) · /calc /text /logic/auto = 옛 셈만 · /logic/flow 둘 지움
- master_formula — 흐름 훅 지움 · 줄에 「흐름」 이 남으면 「흐름도 로직은 걷음」 까닭 오류(저장된 흐름 로직 0 — 마스터 · storage 다시 확인)
- Sangeun_Calc._defaults = 옛 자동값 · M02_Logic_Lib_Read /logic/flow 지움 · main.py 주석
- 화면 — LogicLab(startFlow · scheduleFlow · 예시값 잇기 지움 · [신규 로직] 줄 = 입력 · 중간 · 호표 빈 목록 + 끝수 null) ·
Side(원문 패널 하나) · Source(머리 칸 이름 m01lab-src__top/__title · DF_Panel.css 안 씀) · Detail · View(nowInputs 지움) · Sheet(흐름 갈래 지움) · 글
- 시험 — 지운 파일을 가리키던 목록 넷(spreadsheet_size · 208_1 · 588 · input_prefs) · 717_1 흐름 길 두 줄 · values_old 흐름 셈 부분 지움
- test_713_3_list 기대 — 로직 1,461 → 1,515 · 묶음 307 → 335 · 작업량 21 → 65 · 부르는 506 → 512(782-1 · 2 · 3 건설 기초 로직 54 더함 ·
옛 키만 세면 307 · 21 · 506 그대로)
- 새 지킴 test_794_1b_flow_gone — 흐름 길 404 · 표준 표 남음 · 신규 로직 자체 GX · 흐름 남은 줄 까닭 오류
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
3.4 KiB
Python
78 lines
3.4 KiB
Python
"""713-3 지킴 — 로직 목록 덧칸(묶음 · 작업량 부모 · 부르는/불리는 수 · 관련) · 정본 그대로 · 줄 수 그대로."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from M01_MasterData import M01_MasterData_Router as router
|
||
from M01_MasterData import M01_MasterData_Store_List as store_list
|
||
|
||
COLS = {"묶음", "묶음수", "작업량", "부모", "부르는수", "불리는수", "관련", "인재경"}
|
||
|
||
|
||
def test_목록_줄_수_그대로_덧칸_다_있음() -> None:
|
||
got = router.get_logics()["logics"]
|
||
assert (
|
||
len(got) == 1515
|
||
) # 묶음은 화면 접기만 — 목록 줄은 정본 로직 수 그대로(713-4 1,461 + 782 건설 기초 54)
|
||
assert all(COLS <= set(x) for x in got)
|
||
|
||
|
||
def test_묶음_작업량_부르기() -> None:
|
||
more = store_list.extras()
|
||
# 한 절에 로직 둘 넘음(조사 12-B ㉯ 323 → 713-4 합침 · 지움 뒤 307 → 782 건설 기초 335)
|
||
assert sum(1 for v in more.values() if v["묶음"]) == 335
|
||
work = {k for k, v in more.items() if v["작업량"]}
|
||
assert len(work) == 65 # 27 − 터파기 작업량 6(713-4 · 단가 로직 안에 품음) + 782 시공능력 44
|
||
assert more["GF000098"]["부모"] == ["GF000099"] # 측구터파기 작업량 → 단가 로직 밑
|
||
assert more["GC000268"]["불리는수"] >= 300 # 기계경비 로직
|
||
assert sum(1 for v in more.values() if v["부르는수"]) == 512 # 506 + 782 건설 기초 6
|
||
assert more["GC000294"]["관련"] == ["GC000292"] # 비고 「1-5-6(주③)」
|
||
# 인재경 줄 수 = 712-1 묶음 파생 · 못 가른 「하위」 = 복합 하위 로직 부르기 31(조사 12-B ③4)
|
||
assert sum(v["인재경"]["하위"] for v in more.values()) == 31
|
||
assert more["GF000101"]["인재경"] == {"인력": 1, "재료": 0, "경비": 1, "하위": 0}
|
||
|
||
|
||
def test_관련은_해석_글과_넓은_절을_뺌() -> None:
|
||
more = store_list.extras()
|
||
assert all(len(v["관련"]) <= store_list._WIDE for v in more.values())
|
||
assert not any(k in v["관련"] for k, v in more.items()) # 자기 자신 없음
|
||
|
||
|
||
def test_화면_접기_같은_절_작업량_찾는_중엔_펼침() -> None:
|
||
import json
|
||
import shutil
|
||
import subprocess
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
if shutil.which("node") is None:
|
||
pytest.skip("node 가 없음")
|
||
root = Path(__file__).resolve().parents[2]
|
||
url = (root / "M01_MasterData/logic/M01_MasterData_logic_list_fold.ts").as_uri()
|
||
src = f"""
|
||
import {{ foldRows }} from "{url}";
|
||
const items = [
|
||
{{ key: "A", group: "f|9-12" }}, {{ key: "W", parents: ["A"] }},
|
||
{{ key: "B", group: "f|9-12" }}, {{ key: "C", group: "f|9-12" }}, {{ key: "D" }},
|
||
];
|
||
const keys = (rows) => rows.map((r) => [r.item.key, r.depth, r.hidden ?? 0]);
|
||
console.log(JSON.stringify({{
|
||
shut: keys(foldRows(items, new Set(), false)),
|
||
open: keys(foldRows(items, new Set(["A"]), false)),
|
||
flat: keys(foldRows(items, new Set(), true)).length,
|
||
}}));
|
||
"""
|
||
done = subprocess.run(
|
||
["node", "--experimental-strip-types", "--input-type=module", "-e", src],
|
||
capture_output=True,
|
||
text=True,
|
||
encoding="utf-8",
|
||
timeout=60,
|
||
cwd=root,
|
||
)
|
||
assert done.returncode == 0, done.stderr
|
||
got = json.loads(done.stdout)
|
||
assert got["shut"] == [["A", 0, 3], ["D", 0, 0]] # 묶음 나머지 둘 + 작업량 하나 접힘
|
||
assert got["open"] == [["A", 0, 3], ["W", 1, 0], ["B", 1, 0], ["C", 1, 0], ["D", 0, 0]]
|
||
assert got["flat"] == 5
|