| from fastapi import FastAPI | |
| import app as app_module | |
| def test_app_py_exports_unified_fastapi_app() -> None: | |
| assert isinstance(app_module.app, FastAPI) | |
| def test_app_py_exports_gradio_demo_for_space_sdk() -> None: | |
| assert type(app_module.demo).__name__ == "Blocks" | |
| def test_app_py_serves_api_and_gradio_from_one_asgi_app() -> None: | |
| route_paths = {getattr(route, "path", "") for route in app_module.app.routes} | |
| assert "/health" in route_paths | |
| assert "/runs" in route_paths | |
| assert "" in route_paths | |
| def test_app_py_defaults_to_spaces_friendly_bind(monkeypatch) -> None: | |
| monkeypatch.delenv("GRADIO_SERVER_NAME", raising=False) | |
| monkeypatch.delenv("GRADIO_SERVER_PORT", raising=False) | |
| monkeypatch.delenv("HOST", raising=False) | |
| monkeypatch.delenv("PORT", raising=False) | |
| assert app_module.server_config() == {"host": "0.0.0.0", "port": 7860} | |
| assert app_module.gradio_launch_config() == {"server_name": "0.0.0.0", "server_port": 7860} | |
| def test_app_py_does_not_self_bind_under_gradio_space(monkeypatch) -> None: | |
| monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench") | |
| monkeypatch.setenv("SPACE_SDK", "gradio") | |
| assert app_module.should_self_launch() is False | |
| assert app_module.should_launch_gradio_space() is True | |
| def test_app_py_does_not_self_bind_under_space_without_sdk_env(monkeypatch) -> None: | |
| monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench") | |
| monkeypatch.delenv("SPACE_SDK", raising=False) | |
| monkeypatch.delenv("HF_SPACE_SDK", raising=False) | |
| assert app_module.should_self_launch() is False | |
| def test_app_py_can_force_self_launch(monkeypatch) -> None: | |
| monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench") | |
| monkeypatch.setenv("FORCE_SELF_LAUNCH", "1") | |
| assert app_module.should_self_launch() is True | |
| assert app_module.should_launch_gradio_space() is False | |
| def test_app_py_self_binds_outside_gradio_space(monkeypatch) -> None: | |
| monkeypatch.delenv("SPACE_ID", raising=False) | |
| monkeypatch.delenv("SPACE_SDK", raising=False) | |
| monkeypatch.delenv("FORCE_SELF_LAUNCH", raising=False) | |
| assert app_module.should_self_launch() is True | |
| assert app_module.should_launch_gradio_space() is False | |
| def test_space_metadata_uses_gradio_sdk_app_py() -> None: | |
| readme = open("README.md", encoding="utf-8").read() | |
| assert "sdk: gradio" in readme | |
| assert "app_file: app.py" in readme | |
| assert "sdk: docker" not in readme.split("---", 2)[1] | |