chore: register pages features APIs and data contracts
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from tools.build_api_registry import build as build_api_registry
|
||||
from tools.build_architecture_inventory import build as build_architecture_inventory
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
CONFIG = ROOT / "config"
|
||||
|
||||
|
||||
def load(name: str) -> dict:
|
||||
return json.loads((CONFIG / name).read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
class GovernanceRegistryTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.features = load("features.config.json")
|
||||
self.pages = load("pages.config.json")
|
||||
self.api = load("api.config.json")
|
||||
self.data = load("data-fields.config.json")
|
||||
|
||||
def test_features_are_unique_and_use_declared_roles(self) -> None:
|
||||
roles = set(self.features["roles"])
|
||||
items = self.features["features"]
|
||||
ids = [item["id"] for item in items]
|
||||
self.assertEqual(len(ids), len(set(ids)))
|
||||
self.assertTrue(all(item["access"] in roles for item in items))
|
||||
self.assertTrue(all(isinstance(item["enabled"], bool) for item in items))
|
||||
|
||||
def test_page_registry_matches_the_current_primary_navigation(self) -> None:
|
||||
inventory_pages = build_architecture_inventory()["pages"]
|
||||
registered = self.pages["pages"]
|
||||
self.assertEqual(
|
||||
[(item["id"], item["title"]) for item in registered],
|
||||
[(item["id"], item["title"]) for item in inventory_pages],
|
||||
)
|
||||
feature_ids = {item["id"] for item in self.features["features"]}
|
||||
self.assertTrue(all(page["feature"] in feature_ids for page in registered))
|
||||
self.assertEqual(sum(bool(page.get("default")) for page in registered), 1)
|
||||
|
||||
def test_api_registry_is_current_and_owned(self) -> None:
|
||||
self.assertEqual(self.api, build_api_registry())
|
||||
feature_ids = {item["id"] for item in self.features["features"]}
|
||||
roles = set(self.features["roles"])
|
||||
keys = []
|
||||
for route in self.api["routes"]:
|
||||
keys.append((route["method"], route["path"], route["match"]))
|
||||
self.assertIn(route["feature"], feature_ids)
|
||||
self.assertIn(route["access"], roles)
|
||||
self.assertEqual(len(keys), len(set(keys)))
|
||||
|
||||
def test_public_routes_are_explicitly_limited(self) -> None:
|
||||
public = {
|
||||
(item["method"], item["path"])
|
||||
for item in self.api["routes"]
|
||||
if item["access"] == "public"
|
||||
}
|
||||
self.assertEqual(
|
||||
public,
|
||||
{
|
||||
("GET", "/api/health"),
|
||||
("POST", "/api/auth/login"),
|
||||
("POST", "/api/auth/register"),
|
||||
},
|
||||
)
|
||||
|
||||
def test_calculation_datasets_use_approved_providers(self) -> None:
|
||||
providers = self.data["providers"]
|
||||
ids = []
|
||||
for dataset in self.data["datasets"]:
|
||||
ids.append(dataset["id"])
|
||||
self.assertIn(dataset["primary"], providers)
|
||||
for fallback in dataset.get("fallbacks", []):
|
||||
self.assertIn(fallback, providers)
|
||||
if dataset["usage"] == "calculation":
|
||||
self.assertTrue(providers[dataset["primary"]]["calculation_allowed"])
|
||||
if dataset["primary"] == "unresolved":
|
||||
self.assertEqual(dataset["usage"], "blocked")
|
||||
self.assertEqual(len(ids), len(set(ids)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user