diff --git a/libs/core/tests/unit_tests/utils/test_json_schema.py b/libs/core/tests/unit_tests/utils/test_json_schema.py index 68a711f42d6..a6eafdfd83e 100644 --- a/libs/core/tests/unit_tests/utils/test_json_schema.py +++ b/libs/core/tests/unit_tests/utils/test_json_schema.py @@ -452,6 +452,84 @@ def test_dereference_refs_list_index() -> None: assert actual_dict_key == expected_dict_key +def test_dereference_refs_list_index_items_ref_mcp_like() -> None: + """Regression test: MCP-style list index ref into array items.""" + schema = { + "type": "object", + "properties": { + "body": { + "anyOf": [ + {"type": "string"}, + { + "type": "object", + "properties": { + "Message": { + "type": "object", + "properties": { + "bccRecipients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "emailAddress": { + "type": "object", + "properties": { + "address": {"type": "string"}, + "name": {"type": "string"}, + }, + "required": ["address"], + } + }, + }, + "description": ( + "The Bcc: recipients for the message." + ), + }, + "ccRecipients": { + "type": "array", + "items": { + "$ref": ( + "#/properties/body/anyOf/1/" + "properties/Message/properties/" + "bccRecipients/items" + ) + }, + "description": ( + "The Cc: recipients for the message." + ), + }, + }, + "additionalProperties": False, + }, + "SaveToSentItems": { + "type": ["boolean", "null"], + "default": False, + }, + }, + "additionalProperties": False, + }, + ] + } + }, + "required": ["body"], + "additionalProperties": False, + } + + resolved = dereference_refs(schema) + + message_props = resolved["properties"]["body"]["anyOf"][1]["properties"]["Message"][ + "properties" + ] + + bcc_items = message_props["bccRecipients"]["items"] + cc_items = message_props["ccRecipients"]["items"] + + # $ref should be fully resolved in ccRecipients.items + assert "$ref" not in cc_items + # And ccRecipients.items should match bccRecipients.items + assert cc_items == bcc_items + + def test_dereference_refs_mixed_ref_with_properties() -> None: """Test dereferencing refs that have $ref plus other properties.""" # This pattern can cause infinite recursion if not handled correctly