46 lines
1.7 KiB
Python
46 lines
1.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.assertIn("govoplan-core>=0.1.8", 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"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|