// This file is auto-generated by alef — DO NOT EDIT.
// alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
// To regenerate: alef generate
// To verify freshness: alef verify --exit-code
// Issues & docs: https://github.com/kreuzberg-dev/alef
package dev.kreuzberg.e2e

import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
import kotlin.test.assertFalse
import kotlin.test.assertFailsWith
import kotlinx.coroutines.runBlocking
import dev.kreuzberg.Kreuzberg
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
import dev.kreuzberg.ExtractionConfig

/** E2e tests for category: async. */
class AsyncTest {

    companion object {
        private val MAPPER = ObjectMapper().registerModule(Jdk8Module()).registerKotlinModule().setPropertyNamingStrategy(com.fasterxml.jackson.databind.PropertyNamingStrategies.SNAKE_CASE)
    }
    @Test
    fun testAsyncExtractBytes() = runBlocking {
        // Async extract_bytes call on PDF document
        val result = Kreuzberg.extractBytes("pdf/fake_memo.pdf", "application/pdf", ExtractionConfig())
        assertEquals("application/pdf", result.mimeType.trim())
        assertTrue(result.content.length >= 50, "expected length >= 50")
    }

    @Test
    fun testAsyncExtractBytesEmptyMime() = runBlocking {
        // extract_bytes empty MIME async
        assertFailsWith<Exception> {
            val config = MAPPER.readValue("{}", ExtractionConfig::class.java)
            Kreuzberg.extractBytes("text/plain.txt", "", config)
        }
        Unit
    }

    @Test
    fun testAsyncExtractBytesInvalidMime() = runBlocking {
        // extract_bytes unsupported MIME async
        assertFailsWith<Exception> {
            val config = MAPPER.readValue("{}", ExtractionConfig::class.java)
            Kreuzberg.extractBytes("text/plain.txt", "application/x-nonexistent", config)
        }
        Unit
    }

}
