Merge remote-tracking branch 'origin/sub_laptop_6' into main_laptop_1

This commit is contained in:
2026-09-30 14:15:32 +09:00
2 changed files with 18 additions and 7 deletions
+8 -4
View File
@@ -19,6 +19,7 @@ from fastapi.testclient import TestClient
from common_util.common_util_auth import verify_session
from config import config_system
from M01_MasterData import M01_MasterData_Store as m01
from M02_MasterTemplete import M02_MasterTemplete_Combo_Store as combos
from M02_MasterTemplete import M02_MasterTemplete_Router_Items as items_router
from M02_MasterTemplete import M02_MasterTemplete_Router_Layers as layers_router
from M02_MasterTemplete import M02_MasterTemplete_Store as store
@@ -111,10 +112,13 @@ def test_회사_층_첫_진입_뼈대와_쓰기_권한(world):
assert [(r["key"], r["열"]) for r in items] == [("SC7-000001", "cw")] # 회사 키(26-4a)
assert items[0]["도번"].startswith("SD") and (root / "structure/cw.json").is_file()
assert client.get("/api/m02/items?layer=company&owner=9").status_code == 403 # 남의 회사
# 일위대가(UA) 갈라 내기는 M01 시스템 마스터에 쓰므로 회사 관리자도 못 함
body = {"본뜬키": "UA000001", "담은로직": [], "이름": "x"}
# 일위대가 갈라 내기(27-2c) = 회사 층 쓰기 권한 — 일반 사용자 403 · 회사 관리자는 회사 조합(UC)
branch = "/api/m02/layers/company/structures/cw/combo"
body = {"본뜬키": "UA000001", "담은로직": [{"로직": "GF000221"}], "이름": "x"}
assert _as(world).post(branch, json=body).status_code == 403
admin = _as(world, "ADMIN")
assert admin.post("/api/m02/layers/company/structures/cw/combo", json=body).status_code == 403
made = admin.post(branch, json=body)
assert made.status_code == 200 and made.json()["키"] == "UC7-000001"
assert admin.delete(f"{url}?판={client.get(url).json()['판']}").status_code == 409 # 쓰는 양식
@@ -149,7 +153,7 @@ def test_회사_항목을_개인으로_복사(world):
admin.post(f"{base}/structures/cw/use-combo", json={"종류": "일위대가", "키": "UA000004"})
row = admin.get("/api/m02/items?layer=company").json()[0]
ss = row["key"]
ua_name = items_router.items_store._combo_names()["UA000004"]
ua_name = combos.find("UA000004")["이름"]
assert row["names"] == { # 키 대신 화면 이름
"일위대가": ua_name,
"자재조합": "회사 자재",
+10 -3
View File
@@ -120,9 +120,16 @@ def test_좌측_줄은_구조물_집계_양식_아래_한_줄_같은_한_곳에
assert side.index("옵션: section(options.title") < side.index(
'도면: section(L("M02_KindDrawing")'
)
assert "children: [summary, ...(extras ? [extras.옵션, extras.도면] : [])]" in side
assert "onOpen: () => (options.clear(), paint())" in side # 자재 조합을 열면 이 줄 고름 지움
assert "onOpen: () => (matset.clear(), paint())" in side # 이 줄을 열면 자재 조합 고름 지움
# 차례 = 일위대가 조합(27-2b) → 구조물 조합 → 옵션 → 도면 양식
order = [
"...(labor ? [section(labor.title, labor.body)] : []),",
" summary,",
" ...(extras ? [extras.옵션, extras.도면] : []),",
]
assert "\n".join(order) in side
# 자재 조합을 열면 이 줄 · 일위대가 고름 지움 / 이 줄을 열면 자재 조합 · 일위대가 고름 지움
assert "onOpen: () => (options.clear(), labor?.clear(), paint())" in side
assert "onOpen: () => (matset.clear(), labor?.clear(), paint())" in side
paint = side.split("function paint(): void {")[1].split("\n }\n")[0]
assert "if (opt.getOpen()) options.clear();" in paint # 양식을 열면 이 줄 고름 지움
api = (ROOT / "M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts").read_text("utf-8")