from __future__ import annotations import pytest from app.tools.export_openapi import export_schema def test_openapi_export_is_offline_and_contains_product_contracts( monkeypatch: pytest.MonkeyPatch, ) -> None: def forbidden(*_args: object, **_kwargs: object) -> None: raise AssertionError("OpenAPI export must not open a database or read a secret") monkeypatch.setattr("psycopg.connect", forbidden) monkeypatch.setattr("app.core.secrets.read_secret_file", forbidden) schema = export_schema() paths = schema["paths"] assert "/api/v1/retrieval/search" in paths assert "/api/v1/chat/completions" in paths assert "/api/v1/document-uploads" in paths assert "/api/v1/document-uploads/{upload_id}/content" in paths assert "/api/v1/document-uploads/{upload_id}/complete" in paths assert "/api/v1/documents" in paths assert "/api/v1/documents/{document_id}/review-bundle" in paths assert "/api/v1/documents/{document_id}/review-decisions" in paths assert ( paths["/api/v1/documents/{document_id}/review-decisions"]["post"]["operationId"] == "createDocumentReviewDecision" ) assert paths["/api/v1/chat/completions"]["post"]["operationId"] == ( "streamGroundedChatCompletion" )