Files
ss-tools/backend/tests/test_agent_context.py

62 lines
2.2 KiB
Python

# #region Test.AgentChat.Context [C:3] [TYPE Module] [SEMANTICS test,agent-chat,context,validation]
# @BRIEF Contract tests for UIContext validation at the backend trust boundary.
# @RELATION BINDS_TO -> [AgentChat.Context.Validate]
# @TEST_EDGE: valid -> returns unchanged payload.
# @TEST_EDGE: invalid_objectType -> raises validation error.
# @TEST_EDGE: oversized -> raises validation error.
# @TEST_EDGE: objectName_too_long -> raises validation error.
# ruff: noqa: I001
import pytest
from src.agent._context import UIContextValidationError, validate_uicontext
VALID_CONTEXT = {
"objectType": "dashboard",
"objectId": "42",
"objectName": "Energy",
"envId": "ss-dev",
"route": "/dashboards/42",
"contextVersion": 1,
}
# #region test_valid_uicontext_returns_payload [C:2] [TYPE Function]
# @BRIEF Valid UIContext payload returns unchanged.
def test_valid_uicontext_returns_payload():
assert validate_uicontext(dict(VALID_CONTEXT)) == VALID_CONTEXT
# #endregion test_valid_uicontext_returns_payload
# #region test_invalid_object_type_rejected [C:2] [TYPE Function]
# @BRIEF Unknown objectType is rejected by backend validation.
def test_invalid_object_type_rejected():
payload = dict(VALID_CONTEXT, objectType="chart")
with pytest.raises(UIContextValidationError, match="objectType"):
validate_uicontext(payload)
# #endregion test_invalid_object_type_rejected
# #region test_oversized_payload_rejected [C:2] [TYPE Function]
# @BRIEF Payloads over 4KB are rejected before prompt injection.
def test_oversized_payload_rejected():
payload = dict(VALID_CONTEXT, debug_padding="x" * 5000)
with pytest.raises(UIContextValidationError, match="4 KB"):
validate_uicontext(payload)
# #endregion test_oversized_payload_rejected
# #region test_object_name_too_long_rejected [C:2] [TYPE Function]
# @BRIEF objectName longer than 256 chars is rejected.
def test_object_name_too_long_rejected():
payload = dict(VALID_CONTEXT, objectName="x" * 257)
with pytest.raises(UIContextValidationError, match="objectName"):
validate_uicontext(payload)
# #endregion test_object_name_too_long_rejected
# #endregion Test.AgentChat.Context