Files

59 lines
2.1 KiB
Python

"""Regression tests for self-contained API documentation pages."""
from __future__ import annotations
from types import SimpleNamespace
import pytest
from fastapi.testclient import TestClient
from app.gateway import config as gateway_config
from app.gateway.app import create_app
def test_config_yaml_docs_switch_overrides_stale_legacy_environment(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("GATEWAY_ENABLE_DOCS", "false")
monkeypatch.setattr(gateway_config, "_gateway_config", None)
monkeypatch.setattr(
gateway_config,
"get_app_config",
lambda: SimpleNamespace(gateway=SimpleNamespace(enable_docs=True)),
)
assert gateway_config.get_gateway_config().enable_docs is True
def test_docs_and_redoc_use_vendored_assets_behind_proxy_prefix(
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""Docs must not need internet access and must retain a reverse-proxy prefix."""
monkeypatch.setenv("GATEWAY_ENABLE_DOCS", "true")
monkeypatch.setattr(gateway_config, "_gateway_config", None)
app = create_app()
with TestClient(app, root_path="/deerflow") as client:
swagger = client.get("/deerflow/docs")
redoc = client.get("/deerflow/redoc")
swagger_bundle = client.get("/deerflow/docs/static/swagger-ui-bundle.js")
redoc_bundle = client.get("/deerflow/docs/static/redoc.standalone.js")
openapi = client.get("/deerflow/openapi.json")
assert swagger.status_code == 200
assert "./docs/static/swagger-ui-bundle.js" in swagger.text
assert "./docs/static/swagger-ui.css" in swagger.text
assert "url: './openapi.json'" in swagger.text
assert "https://" not in swagger.text
assert redoc.status_code == 200
assert "./docs/static/redoc.standalone.js" in redoc.text
assert "./openapi.json" in redoc.text
assert "https://" not in redoc.text
assert swagger_bundle.status_code == 200
assert swagger_bundle.headers["content-type"].startswith("text/javascript")
assert redoc_bundle.status_code == 200
assert redoc_bundle.headers["content-type"].startswith("text/javascript")
assert openapi.status_code == 200