import re
import pytest
from cpex import PluginManager, PipelineResult
@pytest.mark.asyncio
async def test_all_fields_accessible(manager: PluginManager):
payload = {
"message": {
"role": "user",
"content": [{"content_type": "text", "text": "Hello"}],
}
}
result = await manager.invoke_hook("cmf.tool_pre_invoke", payload)
assert isinstance(result, PipelineResult)
assert isinstance(result.continue_processing, bool)
assert result.violation is None
assert isinstance(result.errors, list)
assert result.metadata is None or isinstance(result.metadata, dict)
assert isinstance(result.context_table, dict)
@pytest.mark.asyncio
async def test_deny_result_violation_fields(pii_deny_config_path: str):
mgr = PluginManager(pii_deny_config_path)
await mgr.initialize()
payload = {
"message": {
"role": "assistant",
"content": [
{
"content_type": "tool_call",
"content": {
"tool_call_id": "tc_x",
"name": "submit_form",
"arguments": {"ssn": "987-65-4321"},
},
}
],
}
}
result = await mgr.invoke_hook("cmf.tool_pre_invoke", payload)
assert result.continue_processing is False
assert result.violation is not None
assert isinstance(result.violation, dict)
assert "reason" in result.violation
await mgr.shutdown()
@pytest.mark.asyncio
async def test_repr_no_pointers(manager: PluginManager):
payload = {
"message": {
"role": "user",
"content": [{"content_type": "text", "text": "hi"}],
}
}
result = await manager.invoke_hook("cmf.tool_pre_invoke", payload)
r = repr(result)
assert not re.search(r"0x[0-9a-fA-F]+", r), f"repr contains pointer: {r!r}"