BoilerWorks

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

Keyboard Shortcuts

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