- 템플릿 표 인라인 width → --dt-w · css width var(--dt-w) · 거리이정표 표 틀 폭 전체 - 고칠 수 있는 칸 td.is-can-edit outline 1px accent 28% (box-shadow 아님) - B05 구조물 조합 미지정 = 구조물 리스트 램프 회색 - 시험 기대값 고침(243_1 · 246_1 · 177_1 · ui_data_table) · 새 시험 258_1 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015sDZSjFvoiDjdGpgj3muc3
85 lines
5.1 KiB
Python
85 lines
5.1 KiB
Python
"""246-1 · 128 — B09 설계내역서 우클릭 메뉴 줄임 · 입력 칸 테두리 되돌림.
|
|
|
|
- 입력 칸 = 241 앞 모양(글 상자 accent 5% 채움 · td 표시 없음)
|
|
- 더함 = 「항목 추가」 하나 — 항목 = 바로 아래 같은 부모 · 폴더 = 그 폴더 첫 하위
|
|
- 맨 위 1단(새 공종) = ← 내어쓰기 — 직접비 · 손 줄은 묶음 · 관급자재대 앞 · 자재 줄은 못 냄
|
|
- 연결 이름 = 「구조물 조합」 · 「일위대가 사전조합」 · 「단가산출」 · 지움 = 「줄 삭제」
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
from test_184_3_b09_bill_menu import DG, ROWS, _menu, _order, _row # noqa: E402
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
OLD_ADDS = ["위에 줄 추가", "아래에 줄 추가", "아래에 하위 줄 추가", "새 공종 추가(1단)"]
|
|
|
|
|
|
def test_입력_칸_채움_색_td_테두리_옅게():
|
|
css = (ROOT / "ui_template" / "ui_template_data_table.css").read_text("utf-8")
|
|
body = css.split(".ui-data-table__input {")[1].split("}")[0]
|
|
assert "background: color-mix(in srgb, var(--color-accent) 5%, var(--color-canvas));" in body
|
|
assert "box-shadow" not in body
|
|
assert "td.is-can-edit {" in css # 258-2 — 고칠 칸 옅은 outline 되살림
|
|
|
|
|
|
def test_더함_하나_줄_삭제_연결_이름_셋():
|
|
keys = ["sec:1", "earth:4", "hand:g", "hand:a", "fee", "sec:G"]
|
|
out = _menu({}, labels=keys)["labels"]
|
|
for key in keys:
|
|
assert [x for x in out[key] if "추가" in x] == ["항목 추가"], key
|
|
assert not set(OLD_ADDS) & set(out[key]) and "줄 지우기" not in out[key]
|
|
assert "줄 삭제" in out["earth:4"] and "줄 삭제" in out["hand:a"]
|
|
link = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Tabs_Bill_Link.ts").read_text("utf-8")
|
|
# 251-6 고르기 다섯 = 단가연결 모달 하나 · 종류 이름 = 단가산출 · 사전조합 · 구조물 조합 · 호표 둘
|
|
kinds = link.split("kindFilter: [")[1].split("],\n pick")[0]
|
|
for name in ["일위대가 호표", "단가산출 호표", "구조물 조합", "일위대가 사전조합", "단가산출"]:
|
|
assert f'text: "{name}"' in kinds
|
|
for word in ["서고", "마스터", "회사", "개인", "M01", "새 산근", "로직"]:
|
|
assert word not in kinds
|
|
toasts = [part.split(",")[0] for part in link.split("showToast(")[1:]]
|
|
assert toasts and not any("서고" in t for t in toasts) # 알림 글 쉬운 말
|
|
bill = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Tabs_Bill.ts").read_text("utf-8")
|
|
assert "항목 추가 · 줄 삭제" in bill # 표 아래 안내 글
|
|
|
|
|
|
#: 관급자재대 안 손 묶음(hand:s · 자재 없음) · 손 항목(hand:t)
|
|
SUPPLY = [*ROWS[:-1], _row("hand:s", "sec:G", 2, "group", cost="supply"),
|
|
_row("hand:t", "hand:s", 3, cost="supply", qty=1, ref=DG), ROWS[-1]] # fmt: skip
|
|
|
|
|
|
def test_자리_규칙():
|
|
runs = [("hand:g", "항목 추가"), ("hand:a", "항목 추가"), ("hand:b", "항목 추가"),
|
|
("hand:a", "내어쓰기 ←"), ("hand:g", "내어쓰기 ←"), ("hand:s", "내어쓰기 ←"),
|
|
("hand:t", "내어쓰기 ←"), ("mat:M1", "내어쓰기 ←")] # fmt: skip
|
|
out = _menu({}, runs=runs, rows=SUPPLY)["runs"]
|
|
new = lambda b: [(e.get("parent"), e.get("name", e["key"])) for e in b["rows"]] # noqa: E731
|
|
# 폴더 = 그 폴더 첫 하위 · 항목 = 바로 아래 같은 부모
|
|
got = new(out["hand:g|항목 추가"])
|
|
assert got[got.index(("sec:1.2", "hand:g")) + 1] == ("hand:g", "새 줄")
|
|
got = [e["key"] for e in out["hand:a|항목 추가"]["rows"]]
|
|
row = out["hand:a|항목 추가"]["rows"][got.index("hand:a") + 1]
|
|
assert (row["name"], row["parent"]) == ("새 줄", "hand:g")
|
|
got = out["hand:b|항목 추가"]["rows"]
|
|
row = got[[e["key"] for e in got].index("hand:b") + 1]
|
|
assert (row["name"], row["parent"], "kind" in row) == ("새 줄", "sec:1.2", False)
|
|
# ← = 한 단씩 — 레벨 4 → 3(sec:1.2 아래) · 레벨 3 → 2(sec:1 아래)
|
|
assert ("hand:a", "sec:1.2") in _order(out["hand:a|내어쓰기 ←"])
|
|
assert ("hand:g", "sec:1") in _order(out["hand:g|내어쓰기 ←"])
|
|
# 관급 안 손 묶음 ← = 새 공종(직접비) · 관급자재대 앞
|
|
b = out["hand:s|내어쓰기 ←"]
|
|
tops = [k for k, p in _order(b) if p is None]
|
|
assert tops == ["sec:1", "sec:4", "hand:s", "sec:G"]
|
|
s = {e["key"]: e for e in b["rows"]}["hand:s"]
|
|
assert (s["kind"], s["cost"]) == ("group", "direct")
|
|
# 손 항목 ← 관급 묶음 밖(sec:G 아래) · 자재 줄 = 1단 안 됨
|
|
assert ("hand:t", "sec:G") in _order(out["hand:t|내어쓰기 ←"])
|
|
assert out["mat:M1|내어쓰기 ←"] is None
|
|
# 1단 손 항목 → 묶음(수량 · 연결 지움) — 2단 손 항목을 두 번 냄
|
|
one = _menu({"bill": out["hand:t|내어쓰기 ←"]}, runs=[("hand:t", "내어쓰기 ←")],
|
|
rows=SUPPLY)["runs"]["hand:t|내어쓰기 ←"] # fmt: skip
|
|
t = {e["key"]: e for e in one["rows"]}["hand:t"]
|
|
assert ("parent" in t, t["kind"], t["qty"], t["ref"], t["cost"]) == (
|
|
False, "group", None, None, "direct") # fmt: skip
|