from __future__ import annotations import unittest from govoplan_workflow.backend.manifest import ( DEFINITION_READ_SCOPE, DEFINITION_WRITE_SCOPE, INSTANCE_START_SCOPE, get_manifest, ) from govoplan_core.core.workflows import ( CAPABILITY_WORKFLOW_RUNTIME_WORKER, ) class WorkflowManifestTests(unittest.TestCase): def test_manifest_exposes_definition_contracts(self) -> None: manifest = get_manifest() self.assertEqual(manifest.id, "workflow") self.assertIn( "workflow.definition_graph", {item.name for item in manifest.provides_interfaces}, ) self.assertIn( DEFINITION_READ_SCOPE, {item.scope for item in manifest.permissions}, ) self.assertIn( DEFINITION_WRITE_SCOPE, {item.scope for item in manifest.permissions}, ) self.assertIn( INSTANCE_START_SCOPE, {item.scope for item in manifest.permissions}, ) self.assertIn( "workflow.runtime_worker", {item.name for item in manifest.provides_interfaces}, ) self.assertIn( CAPABILITY_WORKFLOW_RUNTIME_WORKER, manifest.capability_factories, ) self.assertEqual( "@govoplan/workflow-webui", manifest.frontend.package_name if manifest.frontend else None, ) self.assertIsNotNone(manifest.migration_spec) requirement = next( item for item in manifest.requires_interfaces if item.name == "dataflow.run_lifecycle" ) self.assertTrue(requirement.optional) if __name__ == "__main__": unittest.main()