in agents/agents-features/agents-features-a2a-core/src/commonTest/kotlin/ai/koog/agents/a2a/core/MessageConvertersTest.kt [34:91]
fun testA2AtoKoog_User_withTextDataAndFiles() {
val json = buildJsonObject { put("k", "v") }
val bytesBase64 = "YmFzZTY0" // arbitrary base64 string
val a2a = A2AMessage(
messageId = "m1",
role = Role.User,
parts = listOf(
TextPart("Hello"),
DataPart(json),
FilePart(FileWithBytes(bytes = bytesBase64, name = "file.bin", mimeType = null)),
FilePart(FileWithUri(uri = "https://example.com/doc.txt", name = "doc.txt", mimeType = "text/plain")),
),
contextId = "ctx-123",
taskId = "task-1",
referenceTaskIds = listOf("ref-1", "ref-2"),
extensions = listOf("ext:a"),
)
val actual: Message = a2a.toKoogMessage(clock = fixedClock)
val expectedParts = listOf(
ContentPart.Text("Hello"),
ContentPart.Text(prettyJson.encodeToString(json)),
ContentPart.File(
format = "",
mimeType = "application/octet-stream",
fileName = "file.bin",
content = AttachmentContent.Binary.Base64(bytesBase64)
),
ContentPart.File(
format = "",
mimeType = "text/plain",
fileName = "doc.txt",
content = AttachmentContent.URL("https://example.com/doc.txt")
)
)
val expectedMetadata = JsonObject(
mapOf(
MESSAGE_A2A_METADATA_KEY to Json.encodeToJsonElement(
MessageA2AMetadata(
messageId = "m1",
contextId = "ctx-123",
taskId = "task-1",
referenceTaskIds = listOf("ref-1", "ref-2"),
metadata = null,
extensions = listOf("ext:a"),
)
)
)
)
val expected: Message = Message.User(
parts = expectedParts,
metaInfo = RequestMetaInfo(timestamp = fixedInstant, metadata = expectedMetadata),
)
assertEquals(expected, actual)
}