Skip to content

Commit 4ab6233

Browse files
committed
add back the artifact and message tests at the end
1 parent f77e7e8 commit 4ab6233

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

tests/contrib/tasks/test_vertex_task_converter.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
from google.genai import types as genai_types
1111
from a2a.contrib.tasks.vertex_task_converter import (
1212
to_sdk_artifact,
13+
to_sdk_message,
1314
to_sdk_part,
1415
to_sdk_task,
1516
to_sdk_task_state,
1617
to_stored_artifact,
18+
to_stored_message,
1719
to_stored_part,
1820
to_stored_task,
1921
to_stored_task_state,
@@ -24,7 +26,9 @@
2426
FilePart,
2527
FileWithBytes,
2628
FileWithUri,
29+
Message,
2730
Part,
31+
Role,
2832
Task,
2933
TaskState,
3034
TaskStatus,
@@ -403,3 +407,91 @@ def test_sdk_task_conversion_round_trip() -> None:
403407
assert round_trip_sdk_task.metadata == sdk_task.metadata
404408
assert round_trip_sdk_task.artifacts == sdk_task.artifacts
405409
assert round_trip_sdk_task.history == []
410+
411+
def test_artifact_conversion_round_trip() -> None:
412+
"""Test converting an Artifact to TaskArtifact and back restores everything."""
413+
original_artifact = Artifact(
414+
artifact_id='art123',
415+
name='My cool artifact',
416+
description='A very interesting description',
417+
extensions=['ext1', 'ext2'],
418+
metadata={'custom': 'value'},
419+
parts=[
420+
Part(
421+
root=TextPart(
422+
text='hello', metadata={'part_meta': 'hello_meta'}
423+
)
424+
),
425+
Part(root=DataPart(data={'foo': 'bar'})), # no metadata
426+
],
427+
)
428+
429+
stored = to_stored_artifact(original_artifact)
430+
assert isinstance(stored, vertexai_types.TaskArtifact)
431+
432+
# ensure it was populated correctly
433+
assert stored.display_name == 'My cool artifact'
434+
assert stored.description == 'A very interesting description'
435+
assert stored.metadata['__vertex_compat_v'] == 1.0
436+
437+
restored_artifact = to_sdk_artifact(stored)
438+
439+
assert restored_artifact.artifact_id == original_artifact.artifact_id
440+
assert restored_artifact.name == original_artifact.name
441+
assert restored_artifact.description == original_artifact.description
442+
assert restored_artifact.extensions == original_artifact.extensions
443+
assert restored_artifact.metadata == original_artifact.metadata
444+
445+
assert len(restored_artifact.parts) == 2
446+
assert isinstance(restored_artifact.parts[0].root, TextPart)
447+
assert restored_artifact.parts[0].root.text == 'hello'
448+
assert restored_artifact.parts[0].root.metadata == {
449+
'part_meta': 'hello_meta'
450+
}
451+
452+
assert isinstance(restored_artifact.parts[1].root, DataPart)
453+
assert restored_artifact.parts[1].root.data == {'foo': 'bar'}
454+
assert restored_artifact.parts[1].root.metadata is None
455+
456+
457+
def test_message_conversion_round_trip() -> None:
458+
"""Test converting a Message to TaskMessage and back restores everything."""
459+
original_message = Message(
460+
message_id='msg456',
461+
role=Role.agent,
462+
context_id='ctx1',
463+
task_id='tsk1',
464+
reference_task_ids=['tsk2', 'tsk3'],
465+
extensions=['ext_msg'],
466+
metadata={'msg_meta': 42},
467+
parts=[
468+
Part(root=TextPart(text='message text')),
469+
],
470+
)
471+
472+
stored = to_stored_message(original_message)
473+
assert stored is not None
474+
assert isinstance(stored, vertexai_types.TaskMessage)
475+
476+
assert stored.message_id == 'msg456'
477+
assert stored.role == 'agent'
478+
assert stored.metadata['__vertex_compat_v'] == 1.0
479+
480+
restored_message = to_sdk_message(stored)
481+
assert restored_message is not None
482+
483+
assert restored_message.message_id == original_message.message_id
484+
assert restored_message.role == original_message.role
485+
# context_id and task_id are not serialized via Message metadata in Go implementation but via Task,
486+
# but reference_task_ids and extensions ARE part of Message metadata.
487+
assert (
488+
restored_message.reference_task_ids
489+
== original_message.reference_task_ids
490+
)
491+
assert restored_message.extensions == original_message.extensions
492+
assert restored_message.metadata == original_message.metadata
493+
494+
assert len(restored_message.parts) == 1
495+
assert isinstance(restored_message.parts[0].root, TextPart)
496+
assert restored_message.parts[0].root.text == 'message text'
497+
assert restored_message.parts[0].root.metadata is None

0 commit comments

Comments
 (0)