test/a2a/test_config.py
Rama main · réplica de lectura del repositorio original.
# Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
#
# SPDX-License-Identifier: Apache-2.0
import pytest
from a2a.client.client_factory import TransportProtocol
from a2a.types import AgentCapabilities, AgentCard, AgentInterface
from a2a.utils.constants import PROTOCOL_VERSION_CURRENT
from ag2.a2a import A2AConfig
from ag2.a2a.errors import A2AInvalidCardError
def _card_with_interfaces(*urls: str) -> AgentCard:
return AgentCard(
name="t",
description="",
version="1.0.0",
default_input_modes=["text/plain"],
default_output_modes=["text/plain"],
capabilities=AgentCapabilities(),
skills=[],
supported_interfaces=[
AgentInterface(
url=u,
protocol_binding=TransportProtocol.JSONRPC.value,
protocol_version=PROTOCOL_VERSION_CURRENT,
)
for u in urls
],
)
class TestFromCardUrlResolution:
def test_picks_first_non_empty_interface_url(self) -> None:
card = _card_with_interfaces("", "http://second.example")
config = A2AConfig.from_card(card)
assert config.card_url == "http://second.example"
def test_picks_first_when_all_have_urls(self) -> None:
card = _card_with_interfaces("http://a.example", "http://b.example")
config = A2AConfig.from_card(card)
assert config.card_url == "http://a.example"
def test_explicit_url_overrides_card(self) -> None:
card = _card_with_interfaces("http://from-card.example")
config = A2AConfig.from_card(card, card_url="http://override.example")
assert config.card_url == "http://override.example"
def test_no_interfaces_and_no_override_raises(self) -> None:
card = _card_with_interfaces()
with pytest.raises(A2AInvalidCardError):
A2AConfig.from_card(card)
def test_all_empty_urls_and_no_override_raises(self) -> None:
card = _card_with_interfaces("", "")
with pytest.raises(A2AInvalidCardError):
A2AConfig.from_card(card)