Spaces:
Runtime error
Runtime error
File size: 4,105 Bytes
0ce9643 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | """Tests for /api/settings endpoints (token + cache management)."""
from __future__ import annotations
import types
from unittest.mock import patch
import pytest
from fastapi.testclient import TestClient
from neural_mri.core.scan_cache import ScanCache
from neural_mri.main import app
@pytest.fixture(autouse=True)
def _override_settings():
"""Override settings dependencies and reset global token state."""
from neural_mri.api.routes_settings import get_scan_cache, get_settings
cache = ScanCache(max_entries=5)
settings = types.SimpleNamespace(max_cache_entries=5)
app.dependency_overrides[get_scan_cache] = lambda: cache
app.dependency_overrides[get_settings] = lambda: settings
yield cache
app.dependency_overrides.clear()
# Reset global token state
import neural_mri.api.routes_settings as rs
rs._runtime_token = None
@pytest.fixture
def client():
return TestClient(app)
# ββ Token endpoints ββββββββββββββββββββββββββββββββββββββββββββββ
@patch("neural_mri.api.routes_settings._validate_token", return_value=True)
def test_post_token_valid(mock_validate, client):
resp = client.post("/api/settings/token", json={"token": "hf_test123"})
assert resp.status_code == 200
data = resp.json()
assert data["is_set"] is True
assert data["is_valid"] is True
assert data["source"] == "runtime"
mock_validate.assert_called_once_with("hf_test123")
@patch("neural_mri.api.routes_settings._validate_token", return_value=False)
def test_post_token_invalid(mock_validate, client):
resp = client.post("/api/settings/token", json={"token": "bad_token"})
assert resp.status_code == 200
data = resp.json()
assert data["is_set"] is True
assert data["is_valid"] is False
assert data["source"] == "runtime"
@patch("neural_mri.api.routes_settings._validate_token", return_value=True)
def test_delete_token(mock_validate, client):
# First set a token
client.post("/api/settings/token", json={"token": "hf_test"})
# Then delete it
resp = client.delete("/api/settings/token")
assert resp.status_code == 200
data = resp.json()
assert data["is_set"] is False
assert data["is_valid"] is None
assert data["source"] == "none"
def test_get_token_status_no_token(client):
resp = client.get("/api/settings/token/status")
assert resp.status_code == 200
data = resp.json()
assert data["is_set"] is False
assert data["source"] == "none"
@patch("neural_mri.api.routes_settings._validate_token", return_value=True)
def test_get_token_status_after_set(mock_validate, client):
client.post("/api/settings/token", json={"token": "hf_valid"})
resp = client.get("/api/settings/token/status")
assert resp.status_code == 200
data = resp.json()
assert data["is_set"] is True
assert data["source"] == "runtime"
# ββ Cache endpoints ββββββββββββββββββββββββββββββββββββββββββββββ
def test_get_cache_status_empty(client):
resp = client.get("/api/settings/cache")
assert resp.status_code == 200
data = resp.json()
assert data["entry_count"] == 0
assert data["max_entries"] == 5
def test_get_cache_status_with_entries(client, _override_settings):
cache = _override_settings
cache.put("model1", "T1", "", {"data": 1})
cache.put("model1", "T2", "", {"data": 2})
resp = client.get("/api/settings/cache")
assert resp.status_code == 200
data = resp.json()
assert data["entry_count"] == 2
def test_delete_cache_clears(client, _override_settings):
cache = _override_settings
cache.put("model1", "T1", "", {"data": 1})
assert len(cache._store) == 1
resp = client.delete("/api/settings/cache")
assert resp.status_code == 200
assert resp.json() == {"status": "cleared"}
# Verify cache is empty
resp2 = client.get("/api/settings/cache")
assert resp2.json()["entry_count"] == 0
|