from __future__ import annotations import unittest from govoplan_core.core.modules import ModuleManifest from govoplan_scheduling.backend.manifest import get_manifest class SchedulingManifestTests(unittest.TestCase): def test_manifest_contract(self) -> None: manifest = get_manifest() self.assertIsInstance(manifest, ModuleManifest) self.assertEqual(manifest.id, "scheduling") self.assertIn("poll", manifest.dependencies) self.assertNotIn("access", manifest.dependencies) self.assertIn("access", manifest.optional_dependencies) self.assertIn("addresses", manifest.optional_dependencies) self.assertIn("policy", manifest.optional_dependencies) self.assertEqual( ("poll.scheduling", "poll.participation_gateway"), manifest.required_capabilities, ) self.assertIn("auth.principalResolver", manifest.optional_capabilities) self.assertIn("poll.scheduling", manifest.required_capabilities) self.assertIn("calendar.scheduling", manifest.optional_capabilities) self.assertIn("policy.schedulingParticipantPrivacy", manifest.optional_capabilities) self.assertIn("access.people_search", manifest.optional_capabilities) self.assertIn("addresses.people_search", manifest.optional_capabilities) self.assertIn("evaluation", manifest.optional_dependencies) self.assertIsNotNone(manifest.route_factory) self.assertIsNotNone(manifest.migration_spec) self.assertIsNotNone(manifest.frontend) self.assertEqual( ["/scheduling/public/:requestId/:token"], [route.path for route in manifest.frontend.public_routes], ) self.assertIn("poll.availability_matrix", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("poll.response_collection", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("poll.workflow_context", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("poll.governed_participation", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("notifications.dispatch", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("access.people_search", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("addresses.people_search", {interface.name for interface in manifest.requires_interfaces}) self.assertIn("calendar.scheduling", {interface.name for interface in manifest.requires_interfaces}) required_interfaces = {interface.name: interface for interface in manifest.requires_interfaces} for interface_name in ( "poll.availability_matrix", "poll.response_collection", "poll.workflow_context", "poll.governed_participation", ): self.assertEqual("0.1.11", required_interfaces[interface_name].version_min) if __name__ == "__main__": unittest.main()