"""Tests for main application.""" from unittest.mock import Mock, patch import pytest from fastapi import FastAPI from app.main import app_factory, lifespan, main @pytest.mark.asyncio async def test_lifespan() -> None: """Test lifespan context manager.""" app = FastAPI() with ( patch("app.main.init_db") as mock_init, patch("app.main.close_db") as mock_close, ): async with lifespan(app): mock_init.assert_called_once() mock_close.assert_not_called() mock_close.assert_called_once() def test_app_factory() -> None: """Test app factory creates FastAPI app.""" app = app_factory() assert isinstance(app, FastAPI) def test_app_factory_has_routes() -> None: """Test app has registered routes.""" app = app_factory() routes = [str(route.path) for route in app.routes if hasattr(route, "path")] assert "/health" in routes # Check that API routes are included assert any("api" in path for path in routes) @patch("app.main.uvicorn.run") def test_main(mock_uvicorn_run: Mock) -> None: """Test main function starts uvicorn.""" main() mock_uvicorn_run.assert_called_once() call_kwargs = mock_uvicorn_run.call_args.kwargs assert call_kwargs.get("factory") is True assert call_kwargs.get("host") == "0.0.0.0" assert call_kwargs.get("port") == 8000