75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
|
|
"""GET/PUT /api/admin/platform-media-storage — Auth-Matrix (kein Live-DB nötig)."""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import os
|
||
|
|
from unittest.mock import MagicMock, patch
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from fastapi.testclient import TestClient
|
||
|
|
|
||
|
|
os.environ.setdefault("SKIP_DB_MIGRATE", "1")
|
||
|
|
|
||
|
|
from auth import require_auth
|
||
|
|
from main import app
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.fixture
|
||
|
|
def client() -> TestClient:
|
||
|
|
return TestClient(app)
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.fixture(autouse=True)
|
||
|
|
def _clear_overrides():
|
||
|
|
yield
|
||
|
|
app.dependency_overrides.pop(require_auth, None)
|
||
|
|
|
||
|
|
|
||
|
|
def test_platform_media_storage_get_requires_platform_admin(client: TestClient) -> None:
|
||
|
|
def _trainer():
|
||
|
|
return {"profile_id": 1, "role": "trainer"}
|
||
|
|
|
||
|
|
app.dependency_overrides[require_auth] = _trainer
|
||
|
|
r = client.get("/api/admin/platform-media-storage", headers={"X-Auth-Token": "t"})
|
||
|
|
assert r.status_code == 403
|
||
|
|
|
||
|
|
|
||
|
|
def test_platform_media_storage_put_requires_superadmin(client: TestClient) -> None:
|
||
|
|
def _admin():
|
||
|
|
return {"profile_id": 1, "role": "admin"}
|
||
|
|
|
||
|
|
app.dependency_overrides[require_auth] = _admin
|
||
|
|
r = client.put(
|
||
|
|
"/api/admin/platform-media-storage",
|
||
|
|
headers={"X-Auth-Token": "t", "Content-Type": "application/json"},
|
||
|
|
json={"local_relative_root": "foo"},
|
||
|
|
)
|
||
|
|
assert r.status_code == 403
|
||
|
|
|
||
|
|
|
||
|
|
@patch("routers.platform_media_storage.get_effective_media_root", return_value=__import__("pathlib").Path("/tmp/media"))
|
||
|
|
def test_platform_media_storage_get_ok_for_admin(mock_root, client: TestClient) -> None:
|
||
|
|
def _admin():
|
||
|
|
return {"profile_id": 1, "role": "admin"}
|
||
|
|
|
||
|
|
app.dependency_overrides[require_auth] = _admin
|
||
|
|
|
||
|
|
mock_cm = MagicMock()
|
||
|
|
mock_conn = MagicMock()
|
||
|
|
mock_cm.__enter__.return_value = mock_conn
|
||
|
|
mock_cm.__exit__.return_value = False
|
||
|
|
mock_cur = MagicMock()
|
||
|
|
mock_cur.fetchone.return_value = {
|
||
|
|
"storage_backend": "local",
|
||
|
|
"local_relative_root": "nas",
|
||
|
|
}
|
||
|
|
|
||
|
|
with patch("routers.platform_media_storage.get_db", return_value=mock_cm), patch(
|
||
|
|
"routers.platform_media_storage.get_cursor", return_value=mock_cur
|
||
|
|
):
|
||
|
|
r = client.get("/api/admin/platform-media-storage", headers={"X-Auth-Token": "t"})
|
||
|
|
|
||
|
|
assert r.status_code == 200
|
||
|
|
body = r.json()
|
||
|
|
assert body["storage_backend"] == "local"
|
||
|
|
assert body["local_relative_root"] == "nas"
|