f8d3cbdd59
Add the FastAPI app, PostgreSQL migrations, Docker/Helm packaging, API contracts, docs, client examples, and the unit/integration/compatibility test suite for local client and tooling labs without a real vCenter.
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""Broadcom universe registry coverage."""
|
|
|
|
from fastapi.routing import APIRoute
|
|
|
|
from app.vsphere.rest.coverage import (
|
|
CORE_IMPLEMENTED,
|
|
IMPLEMENTED,
|
|
catalog_entries,
|
|
reload_coverage,
|
|
universe_stats,
|
|
)
|
|
from app.vsphere.rest.stub_surface import router as stub_surface_router
|
|
|
|
|
|
def test_universe_covers_broadcom_operations_index() -> None:
|
|
reload_coverage()
|
|
stats = universe_stats()
|
|
assert stats["broadcom_operations"] == 1348
|
|
assert int(stats["unique_routes"]) >= 1000
|
|
assert int(stats["registry_methods"]) >= int(stats["unique_routes"])
|
|
assert int(stats["core_methods"]) == len(CORE_IMPLEMENTED)
|
|
assert int(stats["stub_methods"]) >= 850
|
|
|
|
|
|
def test_registry_includes_put_and_all_core_routes() -> None:
|
|
reload_coverage()
|
|
entries = {(e["verb"], e["path"]): e["status"] for e in catalog_entries()}
|
|
assert any(verb == "PUT" for verb, _path in entries)
|
|
for key, status in CORE_IMPLEMENTED.items():
|
|
assert entries[key] == status
|
|
|
|
|
|
def test_stub_surface_registers_each_contract_path_separately() -> None:
|
|
"""Universe stubs are individual FastAPI routes, not a catch-all."""
|
|
|
|
stub_routes = [
|
|
route
|
|
for route in stub_surface_router.routes
|
|
if isinstance(route, APIRoute) and str(route.name or "").startswith("vsphere-stub:")
|
|
]
|
|
expected = {(verb, path) for (verb, path), status in IMPLEMENTED.items() if status == "stub"}
|
|
registered: set[tuple[str, str]] = set()
|
|
for route in stub_routes:
|
|
methods = {
|
|
method for method in (route.methods or set()) if method not in {"HEAD", "OPTIONS"}
|
|
}
|
|
assert len(methods) == 1, route.path
|
|
registered.add((next(iter(methods)), route.path))
|
|
assert len(stub_routes) == len(expected)
|
|
assert registered == expected
|
|
assert not any("{full_path" in route.path for route in stub_routes)
|