- Add pytest config with 90% coverage threshold - 15 test files covering all routers, services, schemas, models - 300 tests: unit tests, integration tests, edge cases, mocked external APIs - Update CI workflow to run pytest with coverage enforcement - Mock external services (Genius, MusicBrainz, RadioBrowser) - In-memory SQLite DB per test via conftest fixtures
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
"""Router tests - Settings endpoints."""
|
|
import tempfile
|
|
from app.models.settings import UserSetting
|
|
|
|
|
|
class TestGetSettings:
|
|
def test_default_settings(self, client):
|
|
r = client.get("/api/settings")
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
assert data["audio_quality"] == "high"
|
|
assert data["theme"] == "dark"
|
|
assert data["user_name"] == "User"
|
|
assert data["auto_transcode"] is True
|
|
|
|
def test_custom_settings(self, client, db_module):
|
|
db = db_module.SessionLocal()
|
|
s = UserSetting(key="audio_quality", value="medium")
|
|
db.add(s)
|
|
db.commit()
|
|
db.close()
|
|
r = client.get("/api/settings")
|
|
assert r.status_code == 200
|
|
assert r.json()["audio_quality"] == "medium"
|
|
|
|
|
|
class TestUpdateSettings:
|
|
def test_update(self, client):
|
|
r = client.put("/api/settings", json={
|
|
"audio_quality": "low",
|
|
"theme": "light",
|
|
"user_name": "TestUser"
|
|
})
|
|
assert r.status_code == 200
|
|
assert r.json()["message"] == "Settings updated"
|
|
|
|
def test_update_persists(self, client):
|
|
client.put("/api/settings", json={"audio_quality": "high"})
|
|
r = client.get("/api/settings")
|
|
assert r.json()["audio_quality"] == "high"
|
|
|
|
|
|
class TestServers:
|
|
def test_list_servers(self, client):
|
|
r = client.get("/api/settings/servers")
|
|
assert r.status_code == 200
|
|
assert isinstance(r.json(), list)
|
|
|
|
def test_add_server(self, client):
|
|
tmpdir = tempfile.mkdtemp()
|
|
r = client.post("/api/settings/servers", params={"path": tmpdir, "name": "Test"})
|
|
assert r.status_code == 200
|
|
assert r.json()["path"] == tmpdir
|
|
|
|
def test_add_server_not_exists(self, client):
|
|
r = client.post("/api/settings/servers", params={"path": "/nonexistent/path"})
|
|
assert r.status_code == 400
|
|
|
|
def test_remove_server(self, client):
|
|
tmpdir = tempfile.mkdtemp()
|
|
client.post("/api/settings/servers", params={"path": tmpdir})
|
|
r = client.delete("/api/settings/servers/0")
|
|
assert r.status_code == 200
|
|
|
|
def test_remove_server_not_found(self, client):
|
|
r = client.delete("/api/settings/servers/0")
|
|
assert r.status_code == 404
|