from __future__ import annotations import asyncio import sys import tempfile import unittest from pathlib import Path import httpx sys.path.insert(0, str(Path(__file__).resolve().parents[3])) from backend.app.dependencies import get_settings_service from backend.app.db.settings_repository import SettingsRepository from backend.app.main import app from backend.app.services.settings_service import SettingsService class SettingsApiGoldenTest(unittest.TestCase): def setUp(self) -> None: self.temp_dir = tempfile.TemporaryDirectory() repository = SettingsRepository(str(Path(self.temp_dir.name) / "tasks.db")) service = SettingsService(repository=repository) async def _override_settings_service() -> SettingsService: return service app.dependency_overrides[get_settings_service] = _override_settings_service def tearDown(self) -> None: app.dependency_overrides.clear() self.temp_dir.cleanup() def _request(self, method: str, url: str, payload: dict | None = None) -> httpx.Response: async def _run() -> httpx.Response: transport = httpx.ASGITransport(app=app) async with httpx.AsyncClient(transport=transport, base_url="http://testserver") as client: if method == "GET": return await client.get(url) return await client.post(url, json=payload) return asyncio.run(_run()) def test_settings_default_response(self) -> None: response = self._request("GET", "/api/settings") self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"show_thumbnails": False}) def test_settings_update_persistence(self) -> None: response = self._request("POST", "/api/settings", {"show_thumbnails": True}) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), {"show_thumbnails": True}) self.assertEqual(self._request("GET", "/api/settings").json(), {"show_thumbnails": True}) if __name__ == "__main__": unittest.main()