Coverage for tests/served_page.py: 100%
32 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 22:03 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 22:03 +0000
1import typing
3import fastapi
4from fastapi.testclient import TestClient as FastapiTestClient
5from litestar import Litestar
6from litestar.testing import TestClient as LitestarTestClient
8from archdocs.integrations import fastapi as fastapi_integration
9from archdocs.integrations import litestar as litestar_integration
10from archdocs.main import SettingsForArchdocs
13type PageRenderer = typing.Callable[[SettingsForArchdocs | None, str | None], str]
15GOOD_HTTP_CODE: typing.Final = 200
16CONTENT_TYPE_HTML: typing.Final = "text/html"
17# A literal, not `archdocs.settings.DEFAULT_PATH`: where the default route lives is part of the
18# package's promise, and an expectation read from the code under test would prove nothing.
19DEFAULT_ROUTE_PATH: typing.Final = "/docs/architecture/"
22def render_fastapi_page(arch_settings: SettingsForArchdocs | None, route_path: str | None, /) -> str:
23 fastapi_app: typing.Final = fastapi.FastAPI()
24 if route_path is None:
25 fastapi_integration.add_architecture_doc_routes(fastapi_app, arch_settings=arch_settings)
26 else:
27 fastapi_integration.add_architecture_doc_routes(
28 fastapi_app,
29 route_path=route_path,
30 arch_settings=arch_settings,
31 )
32 fastapi_response: typing.Final = FastapiTestClient(fastapi_app).get(route_path or DEFAULT_ROUTE_PATH)
33 assert fastapi_response.status_code == GOOD_HTTP_CODE
34 assert CONTENT_TYPE_HTML in fastapi_response.headers["content-type"]
35 return fastapi_response.text
38def render_litestar_page(arch_settings: SettingsForArchdocs | None, route_path: str | None, /) -> str:
39 litestar_app: typing.Final = Litestar()
40 if route_path is None:
41 litestar_integration.add_architecture_doc_routes(litestar_app, arch_settings=arch_settings)
42 else:
43 litestar_integration.add_architecture_doc_routes(
44 litestar_app,
45 route_path=route_path,
46 arch_settings=arch_settings,
47 )
48 litestar_response: typing.Final = LitestarTestClient(litestar_app).get(route_path or DEFAULT_ROUTE_PATH)
49 assert litestar_response.status_code == GOOD_HTTP_CODE
50 assert CONTENT_TYPE_HTML in litestar_response.headers["content-type"]
51 return litestar_response.text
54ALL_PAGE_RENDERERS: typing.Final[tuple[PageRenderer, ...]] = (render_fastapi_page, render_litestar_page)
55FRAMEWORK_IDS: typing.Final = ("fastapi", "litestar")