Files
reducers/backend/tests/test_configuration_development_standard.py

87 lines
3.2 KiB
Python

from __future__ import annotations
from pathlib import Path
from src.configurations.registry import CONFIGURATIONS, load_configuration_template
from src.placement.registry import PLACEMENT_SOLVERS
from src.relation_validators import VALIDATOR_REGISTRY
ROOT = Path(__file__).resolve().parents[1]
def test_configuration_development_standard_docs_exist() -> None:
assert (ROOT / "docs" / "configuration-development-standard.md").exists()
assert (ROOT / "docs" / "topology-json-authoring-guide.md").exists()
assert (ROOT / "skill" / "references" / "configuration-development-standard.md").exists()
assert (ROOT / "skill" / "references" / "topology-json-authoring-guide.md").exists()
skill_text = (ROOT / "skill" / "SKILL.md").read_text(encoding="utf-8")
assert "references/configuration-development-standard.md" in skill_text
assert "references/topology-json-authoring-guide.md" in skill_text
def test_registered_configurations_have_standard_files() -> None:
for family, spec in CONFIGURATIONS.items():
assert spec.package_dir.exists()
assert (spec.package_dir / "family.py").exists()
assert (spec.package_dir / "topology.template.json").exists()
assert (spec.package_dir / "placement_rules.py").exists()
assert load_configuration_template(family).family == family
def test_registered_configurations_have_requirements_and_placement_solvers() -> None:
for family in CONFIGURATIONS:
requirement_dir = ROOT / "input" / "requirements" / "reducers" / family
assert requirement_dir.exists()
assert list(requirement_dir.glob("*.json"))
assert family in PLACEMENT_SOLVERS
def test_all_topology_relation_types_have_validators() -> None:
for family in CONFIGURATIONS:
template = load_configuration_template(family)
for relation in template.relations:
assert relation.relation_type in VALIDATOR_REGISTRY
def test_configuration_standard_uses_flat_src_layout() -> None:
docs = [
ROOT / "docs" / "configuration-development-standard.md",
ROOT / "docs" / "topology-json-authoring-guide.md",
ROOT / "skill" / "references" / "configuration-development-standard.md",
ROOT / "skill" / "references" / "topology-json-authoring-guide.md",
]
for path in docs:
text = path.read_text(encoding="utf-8")
assert "src/configurations/" in text
if "configuration-development-standard" in path.name:
assert "src/placement/" in text
assert "src/planetary_reducer" not in text
def test_topology_json_authoring_guide_covers_schema_fields() -> None:
text = (ROOT / "docs" / "topology-json-authoring-guide.md").read_text(encoding="utf-8")
for field in [
"template_id",
"family",
"description",
"nodes",
"relations",
"id",
"kind",
"role",
"gear_type",
"repeat",
"formula_ref",
"stage_id",
"local_role",
"source",
"target",
"relation_type",
"carrier_ref",
"mesh_id",
]:
assert field in text
for relation_type in VALIDATOR_REGISTRY:
assert relation_type in text