fun testA2AtoKoog_User_withTextDataAndFiles()

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