music-app/backend/tests/test_routers_settings.py
Jarian Cottingham 24c03426f8 test: add comprehensive test suite with 94% coverage
- 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
2026-07-06 06:07:31 +00:00

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