fun testKoogToA2A_User_withPlainTextBinaryAndUrlAttachments()

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)
    }