Ctrl K
ComunidadGuías…

test/a2a/test_config.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 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)