from ai_orchestrator.config import ( ExecutionConfig, ModelsConfig, ModelSlotConfig, PolicyConfig, PolicyMode, ProjectConfig, ProjectMetadata, ) from ai_orchestrator.domain.enums import PolicyDecisionType, RiskLevel from ai_orchestrator.domain.models import ActionDescriptor from ai_orchestrator.infrastructure.policy import StaticProjectPolicyEvaluator def test_policy_evaluator_returns_confirm_for_configured_resource() -> None: project = ProjectConfig( project=ProjectMetadata(id="default", name="Default"), models=ModelsConfig( weak=ModelSlotConfig(provider="local", model="weak"), strong=ModelSlotConfig(provider="local", model="strong"), vision=ModelSlotConfig(provider="disabled"), embedding=ModelSlotConfig(provider="local", model="embed"), ), execution=ExecutionConfig(), policy=PolicyConfig(), ) evaluator = StaticProjectPolicyEvaluator(projects={"default": project}) decision = evaluator.evaluate( ActionDescriptor( resource="filesystem", risk_level=RiskLevel.WRITE, action_name="file.write", preview_available=True, ), "default", ) assert decision.decision == PolicyDecisionType.CONFIRM assert decision.requires_confirmation is True def test_policy_evaluator_returns_disabled_by_config() -> None: project = ProjectConfig( project=ProjectMetadata(id="default", name="Default"), models=ModelsConfig( weak=ModelSlotConfig(provider="local", model="weak"), strong=ModelSlotConfig(provider="local", model="strong"), vision=ModelSlotConfig(provider="disabled"), embedding=ModelSlotConfig(provider="local", model="embed"), ), execution=ExecutionConfig(), policy=PolicyConfig( default_mode=PolicyMode.CONFIRM, resources={ "filesystem": PolicyMode.CONFIRM, "shell": PolicyMode.CONFIRM, "sql": PolicyMode.CONFIRM, "mcp": PolicyMode.CONFIRM, "external_models": PolicyMode.DISABLED, "desktop": PolicyMode.CONFIRM, "browser": PolicyMode.CONFIRM, "network": PolicyMode.CONFIRM, "cost": PolicyMode.CONFIRM, "system": PolicyMode.CONFIRM, }, ), ) evaluator = StaticProjectPolicyEvaluator(projects={"default": project}) decision = evaluator.evaluate( ActionDescriptor( resource="external_models", risk_level=RiskLevel.COST, action_name="model.external", ), "default", ) assert decision.decision == PolicyDecisionType.DISABLED_BY_CONFIG