From 05a4943bcc0ef2c99971685ed1caf263980a8ff0 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 30 Sep 2026 14:13:38 +0900 Subject: [PATCH] =?UTF-8?q?test(M02):=2027-2=20=EC=83=88=20=EA=B7=9C?= =?UTF-8?q?=EC=B9=99=EC=97=90=20=EB=A7=9E=EC=B6=A4=20=E2=80=94=20=ED=9A=8C?= =?UTF-8?q?=EC=82=AC=20=EC=B8=B5=20=EA=B0=88=EB=9D=BC=20=EB=82=B4=EA=B8=B0?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=20=C2=B7=20=EC=A1=B0=ED=95=A9=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=9D=BD=EA=B8=B0=20=C2=B7=20=EC=A2=8C=EC=B8=A1=20?= =?UTF-8?q?=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=B0=A8=EB=A1=80(PLAN?= =?UTF-8?q?=2027-2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test_m02_layers_store: 갈라 내기 = 회사 층 쓰기 권한(일반 403 · 회사 관리자 UC7-000001) · 조합 이름은 Combo_Store.find - test_m02_structure_options: 좌측 차례 일위대가 조합 → 구조물 조합 → 옵션 → 도면 · onOpen 이 일위대가 고름도 지움 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt --- resources/tester/test_m02_layers_store.py | 12 ++++++++---- resources/tester/test_m02_structure_options.py | 13 ++++++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/resources/tester/test_m02_layers_store.py b/resources/tester/test_m02_layers_store.py index eebcdaa1..1be487e9 100644 --- a/resources/tester/test_m02_layers_store.py +++ b/resources/tester/test_m02_layers_store.py @@ -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, "자재조합": "회사 자재", diff --git a/resources/tester/test_m02_structure_options.py b/resources/tester/test_m02_structure_options.py index dd671b6b..df0ad925 100644 --- a/resources/tester/test_m02_structure_options.py +++ b/resources/tester/test_m02_structure_options.py @@ -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")