Coverage for tests/rendered_diagram.py: 100%
24 statements
« prev ^ index » next coverage.py v7.15.3, created at 2026-08-03 00:00 +0000
« prev ^ index » next coverage.py v7.15.3, created at 2026-08-03 00:00 +0000
1import functools
2import pathlib
3import typing
5from archdocs.main import ArchitectureParserAndRenderer, SettingsForArchdocs
6from tests.playground import PLAYGROUND_EXAMPLES
9SETTINGS_ARGUMENT: typing.Final = "arch_settings"
10TESTS_ROOT: typing.Final = pathlib.Path(__file__).parent
11FASTAPI_ROOT: typing.Final = TESTS_ROOT / "fastapi"
12LITESTAR_ROOT: typing.Final = TESTS_ROOT / "litestar"
13KUBERNETES_VARIANTS_ROOT: typing.Final = TESTS_ROOT / "kubernetes_variants"
14# The lookup climbs out of any root inside `tests/` and reaches the fixture charts, so a bare
15# service node is asked for by a directory name nothing here has.
16WITHOUT_MANIFESTS: typing.Final = "there-are-no-manifests-here"
17SOURCE_SERVICE_NAME: typing.Final = "app-svc"
18SHOWCASE_SETTINGS: typing.Final = PLAYGROUND_EXAMPLES["showcase"]
19ALL_EXAMPLE_SETTINGS: typing.Final = (
20 *PLAYGROUND_EXAMPLES.values(),
21 SettingsForArchdocs(root_dir=TESTS_ROOT / "kubernetes_fixtures", service_name="kubernetes-svc"),
22)
25def render_diagram(arch_settings: SettingsForArchdocs, /) -> str:
26 return ArchitectureParserAndRenderer(local_settings=arch_settings).render_architecture_diagram()
29# The examples are checked in and no test rewrites them, so the same settings give the same
30# diagram all session long: layout, syntax and feature suites ask for them dozens of times.
31@functools.cache
32def render_example_diagram(arch_settings: SettingsForArchdocs, /) -> str:
33 return render_diagram(arch_settings)
36def build_named_settings(service_name: str, /) -> SettingsForArchdocs:
37 return SettingsForArchdocs(
38 root_dir=LITESTAR_ROOT,
39 service_name=service_name,
40 kubernetes_dir=WITHOUT_MANIFESTS,
41 )
44def render_source_diagram(project_path: pathlib.Path, source_code: str, /) -> str:
45 (project_path / "main.py").write_text(source_code)
46 return render_diagram(
47 SettingsForArchdocs(
48 root_dir=project_path,
49 service_name=SOURCE_SERVICE_NAME,
50 kubernetes_dir=WITHOUT_MANIFESTS,
51 ),
52 )