"""Integration tests for API endpoints.""" import pytest from fastapi.testclient import TestClient from backend.main import app client = TestClient(app) @pytest.mark.integration class TestAPIIntegration: """Integration tests for API endpoints.""" def test_health_check(self) -> None: """Test API health check endpoint.""" response = client.get("/health") assert response.status_code == 200 assert response.json() == {"status": "healthy"} def test_root_endpoint(self) -> None: """Test root endpoint.""" response = client.get("/") assert response.status_code == 200 assert response.json() == {"message": "Plex Playlist Backend API"} def test_startup_rejects_invalid_runtime_policy( self, monkeypatch: pytest.MonkeyPatch ) -> None: """Startup should fail fast when compatibility policy is invalid.""" monkeypatch.setenv("BACKEND_REQUIRED_PYTHON", "99.0") with pytest.raises(RuntimeError), TestClient(app): pass monkeypatch.delenv("BACKEND_REQUIRED_PYTHON", raising=False) def test_compatibility_endpoint_reports_policy_status( self, monkeypatch: pytest.MonkeyPatch ) -> None: """Compatibility endpoint should expose runtime and pinning policy status.""" monkeypatch.setenv("BACKEND_REQUIRED_PYTHON", "3.14") with TestClient(app) as local_client: response = local_client.get("/compatibility") assert response.status_code == 200 payload = response.json() assert payload["ok"] is True assert payload["required_python"] == "3.14" assert "current_python" in payload assert "required_packages" in payload assert payload["required_packages"]["fastapi"] == "0.120.2" assert payload["required_packages"]["uvicorn"] == "0.38.0" monkeypatch.delenv("BACKEND_REQUIRED_PYTHON", raising=False)