mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 10:59:59 +00:00
Reorganises four folders that exceeded the 12-item readability limit: - tests/lint/repository/ (27 -> 11): structure/, naming/, documentation/, python/, dependencies/, shell/, yaml/, network/, settings/ - tests/integration/ (25 -> 7): ansible/, infrastructure/, iam/, meta/ (24 sibling dirs grouped under 4 super-categories) - tests/integration/roles/ (13 -> 10): naming/, playwright/, dashboard/ - tests/unit/utils/ (15 -> 12): certs/ for 3 cert/TLS test files Renames 7 test files whose name duplicated the new folder name (e.g. test_no_direct_yaml_calls.py -> yaml/test_no_direct_calls.py, test_dashboard_integration_scope.py -> dashboard/test_integration_scope.py). Adjusts parents[N] in moved __init__.py files, fixes __file__-based path resolution in 8 tests, updates self-path whitelists, and uses absolute imports for PROJECT_ROOT re-exports (ruff TID252). Adds README.md to each new subfolder following the existing scope template. Updates all docs links (suppression.md, base.md, email.md, playwright spec/parity docs, 005-/019- requirements) to new paths. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
import unittest
|
|
from collections import defaultdict
|
|
|
|
from utils.roles.applications.services.registry import (
|
|
build_service_registry_from_roles_dir,
|
|
)
|
|
|
|
from . import PROJECT_ROOT
|
|
|
|
|
|
class TestServicesCanonical(unittest.TestCase):
|
|
"""Discovered canonical aliases from role-local configs must be internally consistent."""
|
|
|
|
def setUp(self):
|
|
self.repo_root = PROJECT_ROOT
|
|
self.service_registry = build_service_registry_from_roles_dir(
|
|
self.repo_root / "roles"
|
|
)
|
|
self.assertGreater(
|
|
len(self.service_registry),
|
|
0,
|
|
"discovered service registry must not be empty",
|
|
)
|
|
|
|
self.role_to_keys = defaultdict(list)
|
|
for key, entry in self.service_registry.items():
|
|
role = entry.get("role")
|
|
if role:
|
|
self.role_to_keys[role].append(key)
|
|
|
|
def test_shared_roles_have_exactly_one_primary_key(self):
|
|
for role, keys in self.role_to_keys.items():
|
|
if len(keys) < 2:
|
|
continue
|
|
primaries = [k for k in keys if "canonical" not in self.service_registry[k]]
|
|
with self.subTest(role=role):
|
|
self.assertEqual(len(primaries), 1)
|
|
|
|
def test_canonical_target_exists(self):
|
|
for key, entry in self.service_registry.items():
|
|
canonical = entry.get("canonical")
|
|
if canonical is None:
|
|
continue
|
|
with self.subTest(key=key):
|
|
self.assertIn(canonical, self.service_registry)
|
|
|
|
def test_canonical_target_has_same_role(self):
|
|
for key, entry in self.service_registry.items():
|
|
canonical = entry.get("canonical")
|
|
if canonical is None:
|
|
continue
|
|
with self.subTest(key=key):
|
|
self.assertEqual(
|
|
entry.get("role"),
|
|
self.service_registry[canonical].get("role"),
|
|
)
|
|
|
|
def test_canonical_target_is_not_itself_an_alias(self):
|
|
for key, entry in self.service_registry.items():
|
|
canonical = entry.get("canonical")
|
|
if canonical is None:
|
|
continue
|
|
with self.subTest(key=key):
|
|
self.assertNotIn("canonical", self.service_registry[canonical])
|
|
|
|
def test_unique_roles_do_not_declare_canonical(self):
|
|
for key, entry in self.service_registry.items():
|
|
canonical = entry.get("canonical")
|
|
if canonical is None:
|
|
continue
|
|
role = entry.get("role")
|
|
with self.subTest(key=key):
|
|
self.assertGreater(len(self.role_to_keys.get(role, [])), 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|