59 lines
2.1 KiB
Python
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
|