Merge remote-tracking branch 'origin/sub_laptop_7' into main_laptop_1
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""마스터 층 읽기는 층 길 한 벌(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
|
||||
Reference in New Issue
Block a user