mirror of
https://github.com/OpenByteInc/QuantDinger.git
synced 2026-09-28 15:22:56 +08:00
75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
"""OpenAPI infrastructure tests."""
|
|
import os
|
|
|
|
import pytest
|
|
import yaml
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def openapi_spec(app):
|
|
from app.openapi import get_openapi_api
|
|
|
|
api = get_openapi_api(app)
|
|
assert api is not None
|
|
with app.app_context():
|
|
return api.spec.to_dict()
|
|
|
|
|
|
def test_health_endpoints_still_work(client):
|
|
for path in ("/health", "/api/health"):
|
|
resp = client.get(path)
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data["status"] == "healthy"
|
|
assert "timestamp" in data
|
|
|
|
|
|
def test_api_root(client):
|
|
resp = client.get("/")
|
|
assert resp.status_code == 200
|
|
data = resp.get_json()
|
|
assert data["name"] == "QuantDinger Python API"
|
|
assert data["status"] == "running"
|
|
|
|
|
|
def test_openapi_spec_has_health_paths(openapi_spec):
|
|
paths = openapi_spec.get("paths", {})
|
|
assert "/health" in paths
|
|
assert "/api/health" in paths
|
|
assert "/" in paths
|
|
assert len(paths) >= 150, "expected bulk smorest migration to register most human routes"
|
|
|
|
|
|
def test_openapi_shared_schemas(openapi_spec):
|
|
schemas = openapi_spec.get("components", {}).get("schemas", {})
|
|
for name in (
|
|
"HumanSuccessEnvelope",
|
|
"HumanErrorEnvelope",
|
|
"AgentSuccessEnvelope",
|
|
"AgentError",
|
|
):
|
|
assert name in schemas, f"missing shared schema {name}"
|
|
|
|
|
|
def test_export_script_writes_yaml(tmp_path):
|
|
"""Regression: export_openapi.py produces parseable YAML."""
|
|
import subprocess
|
|
import sys
|
|
|
|
out = tmp_path / "out.yaml"
|
|
env = os.environ.copy()
|
|
env["SKIP_STARTUP_HOOKS"] = "1"
|
|
env["OPENAPI_ENABLED"] = "false"
|
|
backend_root = os.path.join(os.path.dirname(__file__), "..")
|
|
script = os.path.join(backend_root, "scripts", "export_openapi.py")
|
|
subprocess.run(
|
|
[sys.executable, script, "--output", str(out)],
|
|
check=True,
|
|
cwd=backend_root,
|
|
env=env,
|
|
)
|
|
loaded = yaml.safe_load(out.read_text(encoding="utf-8"))
|
|
assert loaded["openapi"].startswith("3.")
|
|
assert "x-api-app-version" not in loaded.get("info", {})
|
|
assert "/health" in loaded["paths"]
|