in agents/agents-features/agents-features-a2a-core/src/commonTest/kotlin/ai/koog/agents/a2a/core/MessageConvertersTest.kt [126:189]
fun testKoogToA2A_User_withPlainTextBinaryAndUrlAttachments() {
val text = ContentPart.Text("Hi")
val plain = ContentPart.File(
content = AttachmentContent.PlainText("abc"),
format = "txt",
mimeType = "text/plain",
fileName = "note.txt",
)
val bytes = byteArrayOf(1, 2, 3)
val bin = ContentPart.File(
content = AttachmentContent.Binary.Bytes(bytes),
format = "bin",
mimeType = "application/octet-stream",
fileName = "bytes.bin",
)
val url = ContentPart.File(
content = AttachmentContent.URL("https://example.com/a.png"),
format = "png",
mimeType = "image/png",
fileName = "a.png",
)
val koog: Message = Message.User(
parts = listOf(text, plain, bin, url),
metaInfo = RequestMetaInfo(timestamp = fixedInstant),
)
val actual = koog.toA2AMessage(
a2aMetadata = MessageA2AMetadata(
messageId = "mid",
contextId = "ctx",
taskId = "task",
referenceTaskIds = listOf("r1"),
metadata = null,
extensions = null,
)
)
val expectedPlainBase64 = AttachmentContent.Binary.Bytes("abc".encodeToByteArray()).asBase64()
val expectedBinBase64 = AttachmentContent.Binary.Bytes(bytes).asBase64()
val expected = A2AMessage(
messageId = "mid",
role = Role.User,
parts = listOf(
TextPart("Hi"),
FilePart(FileWithBytes(bytes = expectedPlainBase64, name = "note.txt", mimeType = "text/plain")),
FilePart(
FileWithBytes(
bytes = expectedBinBase64,
name = "bytes.bin",
mimeType = "application/octet-stream"
)
),
FilePart(FileWithUri(uri = "https://example.com/a.png", name = "a.png", mimeType = "image/png")),
),
extensions = null,
taskId = "task",
referenceTaskIds = listOf("r1"),
contextId = "ctx",
metadata = null,
)
assertEquals(expected, actual)
}