Files
Aislo/resources/tester/test_713_3_list.py
T
eomsangdonandClaude Opus 5.5 598b80eb26 refactor(794-1b): M01 흐름도 패널 걷음 — 로직 상세 오른쪽 = 원문만 · [신규 로직] = 빈 시트 줄 · 흐름 서버 길 · DataFlow 화면 지움
요구 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>
2026-11-05 19:38:39 +09:00

78 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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