"""道体注入与完整性校验测试。""" from __future__ import annotations import pytest from app.application.chat.send_message import _contract_system_messages from app.modules.runtime.contract import RuntimeContract from app.modules.runtime.integrity import validate_daoti_integrity def _contract(**kw: object) -> RuntimeContract: base: dict[str, object] = { "character_id": "c", "session_id": "s", "run_id": "r", "model_hint": "m", "trace_id": "t", } base.update(kw) return RuntimeContract(**base) def test_system_prompt_injected() -> None: msgs = _contract_system_messages(_contract(system_prompt="特殊系统指令")) assert "特殊系统指令" in msgs def test_mission_injected() -> None: msgs = _contract_system_messages(_contract(mission="守护用户")) assert any("守护用户" in m for m in msgs) def test_safety_guidelines_precede_safety_constraints() -> None: c = _contract(safety_guidelines="道体边界", safety_constraints=["司命约束"]) msgs = _contract_system_messages(c) assert msgs.index("行为边界:\n道体边界") < msgs.index("安全约束:\n- 司命约束") def test_integrity_pass_when_consistent() -> None: c = _contract(mission="M", safety_guidelines="S") validate_daoti_integrity(c, mission="M", safety_guidelines="S") # 不抛即通过 def test_integrity_raises_on_mission_tamper() -> None: c = _contract(mission="M") with pytest.raises(ValueError): validate_daoti_integrity(c, mission="被篡改") def test_integrity_raises_on_safety_tamper() -> None: c = _contract(safety_guidelines="S") with pytest.raises(ValueError): validate_daoti_integrity(c, safety_guidelines="被篡改") def test_integrity_skips_none_fields() -> None: # 道体字段未设(None)时跳过校验 validate_daoti_integrity(_contract(), mission=None, safety_guidelines=None)