Files
Aislo/resources/tester/test_m02_system_read.py
T
eomsangdonandClaude Opus 5.5 524dc8febc fix(M02): 마스터 층 읽기도 층 길 한 벌 — 회사 관리자 · 일반 「시스템 관리자 권한」 막힘 풂 (39-8)
- Api_Fetch: 시스템 층도 /layers/system/… (양식 목록 · 읽기 · 저장 · 지우기 · 번호 · 장부 · 새 도면 · 복사) — 옛 /api/m02/templates/* 부름 0
- 서버: GET /layers/system/structure-options(읽기 로그인 누구나 · 고쳐 씀은 옛 길 그대로) · 층 양식 목록에 쓰는곳(지우기 확인 전 막음)
- 「〇〇로 복사…」 폴더 창 칸 글 「복사할 폴더」

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
2026-10-04 21:37:24 +09:00

77 lines
3.0 KiB
Python

"""마스터 층 읽기는 층 길 한 벌(39-8 · sub1 검증 흠 H2) — 회사 관리자 · 일반도 `/layers/system/…` 로
표 · 카드 · 일위대가 · 번호 · 장부 · 옵션을 읽음(200) · 쓰기는 서버가 그대로 막음(403).
시스템 층 = 견본 표(임시 폴더) · storage = 임시 폴더.
"""
from __future__ import annotations
from typing import Any
import pytest
from fastapi import FastAPI
from fastapi.testclient import TestClient
from common_util.common_util_auth import verify_session
from config import config_system
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
from M02_MasterTemplete import M02_Template_Layers as layers
from resources.tester.test_m02_structure import write_sample_table
SYS = "/api/m02/layers/system"
TABLE = f"{SYS}/templates/table/구조물집계표"
@pytest.fixture()
def world(tmp_path, monkeypatch) -> dict[str, Any]:
system = tmp_path / "system"
system.mkdir()
write_sample_table(system)
monkeypatch.setattr(store, "FOLDER", system)
monkeypatch.setattr(layers, "SYSTEM_ROOT", system)
(tmp_path / "storage").mkdir()
monkeypatch.setattr(config_system, "STORAGE_BASE_DIR", str(tmp_path / "storage"))
with store.at(system):
store.create_structure("rv")
session: dict[str, Any] = {"user_id": 42, "company_id": 7, "role": "USER", "is_master": False}
app = FastAPI()
app.include_router(items_router.router)
app.include_router(layers_router.router)
app.dependency_overrides[verify_session] = lambda: session
return {"client": TestClient(app), "session": session}
@pytest.mark.parametrize("role", ["USER", "ADMIN", "SYSTEM_ADMIN"])
def test_세_계정_모두_마스터_층_읽기_200(world, role):
world["session"]["role"] = role
client = world["client"]
for url in (
f"{SYS}/templates",
TABLE,
f"{SYS}/templates/structure/rv",
f"{SYS}/templates/labor/rv",
f"{SYS}/templates/area/rv",
f"{SYS}/structures/numbers",
f"{SYS}/structure-combos",
f"{SYS}/structure-options",
):
assert client.get(url).status_code == 200, url
rows = client.get(f"{SYS}/templates").json()["양식"]
table = next(r for r in rows if (r["종류"], r["이름"]) == ("table", "구조물집계표"))
assert table["쓰는곳"] # 지우기 확인 창 전에 막는 글
@pytest.mark.parametrize("role", ["USER", "ADMIN"])
def test_회사_관리자_일반은_마스터_쓰기_403(world, role):
world["session"]["role"] = role
client = world["client"]
got = client.get(TABLE).json()
put = client.put(TABLE, json={"판": got["판"], "문서": got["문서"]})
assert put.status_code == 403
assert client.post(f"{SYS}/structures/c1").status_code == 403
assert client.post(f"{SYS}/labor/rv/copy?from=rv").status_code == 403
gone = client.delete(f"{SYS}/templates/area/rv?판=x")
assert gone.status_code == 403