Files
OpenOPC/tests/test_builtin_role_overrides.py
2026-07-01 17:56:31 +08:00

107 lines
3.8 KiB
Python

from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from opc.core.config import OPCConfig, RoleConfig, RoleRuntimePolicyConfig
from opc.layer2_organization.org_engine import OrgEngine
class BuiltinRoleOverrideTests(unittest.TestCase):
def test_corporate_builtin_roles_inherit_configured_tools(self) -> None:
with tempfile.TemporaryDirectory() as tmpdir:
config = OPCConfig()
config.org.company_profile = "corporate"
config.org.roles = [
RoleConfig(
id="ceo",
name="CEO",
responsibility="Configured CEO role",
tools=["file_read", "todo_write"],
runtime_policy=RoleRuntimePolicyConfig(execution_strategy="native"),
),
RoleConfig(
id="cto",
name="CTO",
responsibility="Configured CTO role",
tools=["shell_exec", "web_search"],
runtime_policy=RoleRuntimePolicyConfig(execution_strategy="native"),
),
]
engine = OrgEngine(config, Path(tmpdir))
ceo = engine.get_agent("ceo")
cto = engine.get_agent("cto")
cmo = engine.get_agent("cmo")
content = engine.get_agent("content_specialist")
design = engine.get_agent("designer")
qa = engine.get_agent("qa_analyst")
env = engine.get_agent("env_engineer")
self.assertIsNotNone(ceo)
self.assertIsNotNone(cto)
self.assertIsNotNone(cmo)
self.assertIsNotNone(content)
self.assertIsNotNone(design)
self.assertIsNotNone(qa)
self.assertIsNotNone(env)
assert ceo is not None
assert cto is not None
assert cmo is not None
assert content is not None
assert design is not None
assert qa is not None
assert env is not None
self.assertEqual(len(engine.list_agents()), 11)
self.assertIn("file_read", ceo.tools)
self.assertIn("todo_write", ceo.tools)
self.assertNotIn("request_user_input", ceo.tools)
self.assertEqual(ceo.runtime_policy["execution_strategy"], "native")
self.assertIn("shell_exec", cto.tools)
self.assertIn("web_search", cto.tools)
self.assertIn("file_read", cmo.tools)
self.assertIn("web_search", cmo.tools)
self.assertIn("shell_exec", content.tools)
self.assertIn("file_write", content.tools)
self.assertIn("shell_exec", design.tools)
self.assertIn("file_write", design.tools)
self.assertIn("shell_exec", qa.tools)
self.assertIn("file_write", qa.tools)
self.assertIn("shell_exec", env.tools)
self.assertIn("file_write", env.tools)
def test_custom_org_empty_tools_remain_unconfigured(self) -> None:
config = OPCConfig()
config.org.company_profile = "custom"
config.org.roles = [
RoleConfig(
id="lead",
name="Lead",
responsibility="Coordinate.",
tools=[],
),
RoleConfig(
id="analyst",
name="Analyst",
responsibility="Analyze.",
reports_to="lead",
tools=[],
),
]
engine = OrgEngine(config)
lead = engine.get_agent("lead")
analyst = engine.get_agent("analyst")
assert lead is not None
assert analyst is not None
self.assertEqual(lead.tools, [])
self.assertEqual(analyst.tools, [])
if __name__ == "__main__":
unittest.main()