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

1import functools 

2import pathlib 

3import typing 

4 

5from archdocs.main import ArchitectureParserAndRenderer, SettingsForArchdocs 

6from tests.playground import PLAYGROUND_EXAMPLES 

7 

8 

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) 

23 

24 

25def render_diagram(arch_settings: SettingsForArchdocs, /) -> str: 

26 return ArchitectureParserAndRenderer(local_settings=arch_settings).render_architecture_diagram() 

27 

28 

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) 

34 

35 

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 ) 

42 

43 

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 )