@@ -1426,3 +1426,81 @@ def test_default_instrumentor_builder_mtls_no_cert_source(
14261426 mock_exporter .call_args .kwargs ["endpoint" ]
14271427 == adk_template ._DEFAULT_TELEMETRY_ENDPOINT
14281428 )
1429+
1430+
1431+ class DummyPydanticCard :
1432+ def model_dump_json (self ):
1433+ return '{"name": "pydantic_card"}'
1434+
1435+
1436+ class DummyProtoCard :
1437+ DESCRIPTOR = mock .Mock ()
1438+
1439+
1440+ class DummyFallbackCard (dict ):
1441+ def __init__ (self ):
1442+ super ().__init__ ({"fallback" : "yes" })
1443+
1444+
1445+ class DummyAgentEngine :
1446+ def __init__ (self , card = None , has_card = True ):
1447+ if has_card :
1448+ self .agent_card = card
1449+
1450+ def set_up (self ):
1451+ pass
1452+
1453+ def query (self , query : str ) -> str :
1454+ return query
1455+
1456+
1457+ class TestAgentEngineGenerateClassMethodsSpec :
1458+ """Tests Pydantic, Protobuf, None, No Card, and Fallback AgentCard serialization in _generate_class_methods_spec_or_raise."""
1459+
1460+ def test_pydantic_card_serialization (self ):
1461+ agent_engine = DummyAgentEngine (DummyPydanticCard ())
1462+ specs = _agent_engines ._generate_class_methods_spec_or_raise (
1463+ agent_engine = agent_engine ,
1464+ operations = {"standard" : ["query" ]},
1465+ )
1466+ assert len (specs ) == 1
1467+ assert specs [0 ][_agent_engines ._A2A_AGENT_CARD ] == '{"name": "pydantic_card"}'
1468+
1469+ @mock .patch ("google3.net.proto2.python.public.json_format.MessageToJson" )
1470+ def test_protobuf_card_serialization (self , mock_message_to_json ):
1471+ mock_message_to_json .return_value = '{"name": "proto_card"}'
1472+ agent_engine = DummyAgentEngine (DummyProtoCard ())
1473+ specs = _agent_engines ._generate_class_methods_spec_or_raise (
1474+ agent_engine = agent_engine ,
1475+ operations = {"standard" : ["query" ]},
1476+ )
1477+ assert len (specs ) == 1
1478+ assert specs [0 ][_agent_engines ._A2A_AGENT_CARD ] == '{"name": "proto_card"}'
1479+
1480+ def test_fallback_card_serialization (self ):
1481+ card = DummyFallbackCard ()
1482+ agent_engine = DummyAgentEngine (card )
1483+ specs = _agent_engines ._generate_class_methods_spec_or_raise (
1484+ agent_engine = agent_engine ,
1485+ operations = {"standard" : ["query" ]},
1486+ )
1487+ assert len (specs ) == 1
1488+ assert specs [0 ][_agent_engines ._A2A_AGENT_CARD ] == json .dumps (card )
1489+
1490+ def test_none_card_serialization (self ):
1491+ agent_engine = DummyAgentEngine (None )
1492+ specs = _agent_engines ._generate_class_methods_spec_or_raise (
1493+ agent_engine = agent_engine ,
1494+ operations = {"standard" : ["query" ]},
1495+ )
1496+ assert len (specs ) == 1
1497+ assert specs [0 ][_agent_engines ._A2A_AGENT_CARD ] == 'null'
1498+
1499+ def test_no_card_serialization (self ):
1500+ agent_engine = DummyAgentEngine (has_card = False )
1501+ specs = _agent_engines ._generate_class_methods_spec_or_raise (
1502+ agent_engine = agent_engine ,
1503+ operations = {"standard" : ["query" ]},
1504+ )
1505+ assert len (specs ) == 1
1506+ assert _agent_engines ._A2A_AGENT_CARD not in specs [0 ]
0 commit comments