# #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