Files
govoplan-audit/tests/test_audit_module_contract.py
T
zemion f71434ec6d
Module Package Release / publish-packages (push) Successful in 11s
docs: localize audit guidance
2026-08-22 08:27:57 +02:00

70 lines
2.7 KiB
Python

from __future__ import annotations
import pathlib
import tomllib
import unittest
from govoplan_audit.backend.manifest import get_manifest
ROOT = pathlib.Path(__file__).resolve().parents[1]
class AuditModuleContractTests(unittest.TestCase):
def test_audit_package_does_not_hard_require_access(self) -> None:
project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))["project"]
dependencies = tuple(project["dependencies"])
self.assertTrue(any(item.startswith("govoplan-core>=") for item in dependencies))
self.assertFalse(any(item.startswith("govoplan-access") for item in dependencies))
def test_audit_source_does_not_import_access_implementation(self) -> None:
offenders: list[str] = []
for path in (ROOT / "src" / "govoplan_audit").rglob("*.py"):
source = path.read_text(encoding="utf-8")
if "govoplan_access" in source:
offenders.append(str(path.relative_to(ROOT)))
self.assertEqual([], offenders)
def test_audit_documentation_declares_admin_help_contexts(self) -> None:
topics = {topic.id: topic for topic in get_manifest().documentation}
evidence = topics["audit.read-authorized-evidence"]
self.assertIn("audit.admin.system", evidence.metadata["help_contexts"])
self.assertIn("audit.admin.tenant", evidence.metadata["help_contexts"])
self.assertEqual(
["audit.admin.system", "audit.admin.tenant"],
evidence.metadata["surfaces"],
)
operations = topics["audit.recording-retention-and-outbox"]
self.assertIn("audit.retention", operations.metadata["help_contexts"])
def test_public_documentation_has_complete_german_baseline(self) -> None:
for topic in get_manifest().documentation:
german = topic.translations.get("de", {})
self.assertTrue(
all(german.get(field) for field in ("title", "summary", "body")),
topic.id,
)
def test_evidence_export_permissions_are_module_owned_and_scope_separated(self) -> None:
manifest = get_manifest()
permissions = {item.scope: item for item in manifest.permissions}
self.assertEqual("tenant", permissions["audit:evidence:export"].level)
self.assertEqual("system", permissions["audit:system_evidence:export"].level)
roles = {item.slug: item for item in manifest.role_templates}
self.assertIn(
"audit:evidence:export",
roles["audit_evidence_exporter"].permissions,
)
self.assertIn(
"audit:system_evidence:export",
roles["audit_system_evidence_exporter"].permissions,
)
if __name__ == "__main__":
unittest.main()