BoilerWorks

boilerworks / tests / test_registry.py
Source Blame History 120 lines
0cb4a5e… anonymous 1 """Tests for boilerworks.registry."""
0cb4a5e… anonymous 2
0cb4a5e… anonymous 3 from __future__ import annotations
0cb4a5e… anonymous 4
0cb4a5e… anonymous 5 import pytest
0cb4a5e… anonymous 6
0cb4a5e… anonymous 7 from boilerworks.registry import Registry, TemplateInfo
0cb4a5e… anonymous 8
0cb4a5e… anonymous 9
0cb4a5e… anonymous 10 @pytest.fixture(scope="module")
0cb4a5e… anonymous 11 def registry() -> Registry:
0cb4a5e… anonymous 12 return Registry()
0cb4a5e… anonymous 13
0cb4a5e… anonymous 14
0cb4a5e… anonymous 15 def test_yaml_loads_without_error(registry: Registry) -> None:
0cb4a5e… anonymous 16 templates = registry.list_all()
0cb4a5e… anonymous 17 assert isinstance(templates, list)
0cb4a5e… anonymous 18 assert len(templates) > 0
0cb4a5e… anonymous 19
0cb4a5e… anonymous 20
0cb4a5e… anonymous 21 def test_all_26_templates_present(registry: Registry) -> None:
0cb4a5e… anonymous 22 assert len(registry.list_all()) == 26
0cb4a5e… anonymous 23
0cb4a5e… anonymous 24
0cb4a5e… anonymous 25 def test_templates_are_template_info_instances(registry: Registry) -> None:
0cb4a5e… anonymous 26 for t in registry.list_all():
0cb4a5e… anonymous 27 assert isinstance(t, TemplateInfo)
0cb4a5e… anonymous 28
0cb4a5e… anonymous 29
0cb4a5e… anonymous 30 def test_filter_by_size_full(registry: Registry) -> None:
0cb4a5e… anonymous 31 full = registry.filter_by_size("full")
0cb4a5e… anonymous 32 assert len(full) == 15
0cb4a5e… anonymous 33 assert all(t.size == "full" for t in full)
0cb4a5e… anonymous 34
0cb4a5e… anonymous 35
0cb4a5e… anonymous 36 def test_filter_by_size_micro(registry: Registry) -> None:
0cb4a5e… anonymous 37 micro = registry.filter_by_size("micro")
0cb4a5e… anonymous 38 assert len(micro) == 6
0cb4a5e… anonymous 39 assert all(t.size == "micro" for t in micro)
0cb4a5e… anonymous 40
0cb4a5e… anonymous 41
0cb4a5e… anonymous 42 def test_filter_by_size_edge(registry: Registry) -> None:
0cb4a5e… anonymous 43 edge = registry.filter_by_size("edge")
0cb4a5e… anonymous 44 assert len(edge) == 5
0cb4a5e… anonymous 45 assert all(t.size == "edge" for t in edge)
0cb4a5e… anonymous 46
0cb4a5e… anonymous 47
0cb4a5e… anonymous 48 def test_filter_by_language_python(registry: Registry) -> None:
0cb4a5e… anonymous 49 python = registry.filter_by_language("python")
0cb4a5e… anonymous 50 names = {t.name for t in python}
0cb4a5e… anonymous 51 assert "django-nextjs" in names
0cb4a5e… anonymous 52 assert "fastapi-micro" in names
0cb4a5e… anonymous 53 assert "nestjs-nextjs" not in names
0cb4a5e… anonymous 54
0cb4a5e… anonymous 55
0cb4a5e… anonymous 56 def test_filter_by_language_typescript(registry: Registry) -> None:
0cb4a5e… anonymous 57 ts = registry.filter_by_language("typescript")
0cb4a5e… anonymous 58 names = {t.name for t in ts}
0cb4a5e… anonymous 59 assert "nestjs-nextjs" in names
0cb4a5e… anonymous 60 assert "django-nextjs" not in names
0cb4a5e… anonymous 61
0cb4a5e… anonymous 62
0cb4a5e… anonymous 63 def test_filter_by_language_go(registry: Registry) -> None:
0cb4a5e… anonymous 64 go = registry.filter_by_language("go")
0cb4a5e… anonymous 65 assert all(t.language == "go" for t in go)
0cb4a5e… anonymous 66 assert len(go) >= 2
0cb4a5e… anonymous 67
0cb4a5e… anonymous 68
0cb4a5e… anonymous 69 def test_get_by_name_returns_correct_template(registry: Registry) -> None:
0cb4a5e… anonymous 70 t = registry.get_by_name("django-nextjs")
0cb4a5e… anonymous 71 assert t is not None
0cb4a5e… anonymous 72 assert t.name == "django-nextjs"
0cb4a5e… anonymous 73 assert t.size == "full"
0cb4a5e… anonymous 74 assert t.language == "python"
0cb4a5e… anonymous 75 assert t.status == "done"
0cb4a5e… anonymous 76
0cb4a5e… anonymous 77
0cb4a5e… anonymous 78 def test_get_by_name_returns_none_for_unknown(registry: Registry) -> None:
0cb4a5e… anonymous 79 assert registry.get_by_name("this-does-not-exist") is None
0cb4a5e… anonymous 80
0cb4a5e… anonymous 81
0cb4a5e… anonymous 82 def test_get_by_name_fastapi_micro(registry: Registry) -> None:
0cb4a5e… anonymous 83 t = registry.get_by_name("fastapi-micro")
0cb4a5e… anonymous 84 assert t is not None
0cb4a5e… anonymous 85 assert t.size == "micro"
0cb4a5e… anonymous 86 assert t.language == "python"
0cb4a5e… anonymous 87
0cb4a5e… anonymous 88
0cb4a5e… anonymous 89 def test_search_by_keyword(registry: Registry) -> None:
0cb4a5e… anonymous 90 results = registry.search("e-commerce")
0cb4a5e… anonymous 91 names = {t.name for t in results}
0cb4a5e… anonymous 92 assert "saleor-nextjs" in names
0cb4a5e… anonymous 93
0cb4a5e… anonymous 94
0cb4a5e… anonymous 95 def test_search_case_insensitive(registry: Registry) -> None:
0cb4a5e… anonymous 96 results = registry.search("Python")
0cb4a5e… anonymous 97 assert len(results) > 0
0cb4a5e… anonymous 98
0cb4a5e… anonymous 99
0cb4a5e… anonymous 100 def test_filter_by_status_done(registry: Registry) -> None:
0cb4a5e… anonymous 101 done = registry.filter_by_status("done")
e6d6826… anonymous 102 assert len(done) == 26
0cb4a5e… anonymous 103 assert all(t.status == "done" for t in done)
0cb4a5e… anonymous 104
0cb4a5e… anonymous 105
0cb4a5e… anonymous 106 def test_all_templates_have_required_fields(registry: Registry) -> None:
0cb4a5e… anonymous 107 for t in registry.list_all():
0cb4a5e… anonymous 108 assert t.name, f"Template missing name: {t}"
0cb4a5e… anonymous 109 assert t.repo, f"Template {t.name} missing repo"
0cb4a5e… anonymous 110 assert t.size in ("full", "micro", "edge"), f"Template {t.name} has invalid size"
0cb4a5e… anonymous 111 assert t.language, f"Template {t.name} missing language"
0cb4a5e… anonymous 112 assert t.status in ("done", "building", "planned"), f"Template {t.name} has invalid status"
0cb4a5e… anonymous 113 assert t.description, f"Template {t.name} missing description"
0cb4a5e… anonymous 114
0cb4a5e… anonymous 115
0cb4a5e… anonymous 116 def test_names_returns_all_names(registry: Registry) -> None:
0cb4a5e… anonymous 117 names = registry.names()
0cb4a5e… anonymous 118 assert len(names) == 26
0cb4a5e… anonymous 119 assert "django-nextjs" in names
0cb4a5e… anonymous 120 assert "astro-site" in names

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button