Ctrl K
ComunidadGuías…

test/a2a/test_messages_mapping.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

from ag2.a2a.extension import CONTEXT_UPDATE_METADATA_KEY
from ag2.a2a.mappers.messages import build_user_message, extract_context_update, parse_message
from ag2.a2a.mappers.parts import struct_to_dict
from ag2.events import TextInput


class TestExtraMetadata:
    def test_extra_metadata_merged_alongside_context_update(self) -> None:
        msg = build_user_message(
            [TextInput("hi")],
            context_update={"k": "v"},
            extra_metadata={"trace_id": "abc"},
        )

        assert extract_context_update(msg) == {"k": "v"}
        assert struct_to_dict(msg.metadata)["trace_id"] == "abc"

    def test_extra_metadata_alone(self) -> None:
        msg = build_user_message([TextInput("hi")], extra_metadata={"trace_id": "abc"})

        assert struct_to_dict(msg.metadata) == {"trace_id": "abc"}
        assert extract_context_update(msg) == {}

    def test_ag2_keys_win_on_collision(self) -> None:
        msg = build_user_message(
            [TextInput("hi")],
            context_update={"real": True},
            extra_metadata={CONTEXT_UPDATE_METADATA_KEY: {"fake": True}},
        )

        assert extract_context_update(msg) == {"real": True}

    def test_no_metadata_when_both_empty(self) -> None:
        msg = build_user_message([TextInput("hi")])

        assert not msg.HasField("metadata")


def test_empty_text_input_round_trips() -> None:
    msg = build_user_message([TextInput("")])

    [restored] = parse_message(msg).inputs

    assert restored == TextInput("")