From c1833e4aadad7ee6f2681e853f6281fb868af845 Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Wed, 11 Oct 2023 23:40:02 +0200 Subject: [PATCH] Adding all other test methods --- build.gradle.kts | 2 + src/main/kotlin/Main.kt | 33 +++++++++++++++-- src/test/kotlin/MainKtTestMock.kt | 49 +++++++++++++++++++++++++ src/test/kotlin/MainKtTestMockEngine.kt | 27 ++++++++++++++ src/test/kotlin/MainKtTestSubclass.kt | 28 ++++++++++++++ 5 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 src/test/kotlin/MainKtTestMock.kt create mode 100644 src/test/kotlin/MainKtTestMockEngine.kt create mode 100644 src/test/kotlin/MainKtTestSubclass.kt diff --git a/build.gradle.kts b/build.gradle.kts index d7f0ca6..1168cba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,6 +34,8 @@ dependencies { exclude(group = "org.slf4j", module = "slf4j-api") } + testImplementation("io.mockk:mockk:1.13.7") + testImplementation("io.ktor:ktor-client-mock:2.3.5") } tasks.test { diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index f64d3f7..e3500b4 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,5 +1,8 @@ import io.github.jan.supabase.SupabaseClient +import io.github.jan.supabase.createSupabaseClient +import io.github.jan.supabase.postgrest.Postgrest import io.github.jan.supabase.postgrest.postgrest +import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable @Serializable @@ -25,18 +28,42 @@ data class ResultPerson ( fun main() { println("Hello World!") // Application goes here + val supabaseClient = createSupabaseClient( + supabaseUrl = "", + supabaseKey = "" + ) { + install(Postgrest) + } + + runBlocking { + savePerson(listOf(Person("Jan", 30), Person("Jane", 42)), supabaseClient) + } } suspend fun getPerson(client: SupabaseClient): List { return client .postgrest["person"] - .select().decodeList() + .select().decodeList() + .filter { it.age > 18 } } - suspend fun savePerson(persons: List, client: SupabaseClient): List { + val adults = persons.filter { it.age > 18 } + return client .postgrest["person"] - .insert(persons) + .insert(adults) .decodeList() } + +// Used in MainKtTestSubclass +class DatabaseClient(private val client: SupabaseClient){ + suspend fun savePerson(persons: List): List { + val adults = persons.filter { it.age > 18 } + + return client + .postgrest["person"] + .insert(adults) + .decodeList() + } +} \ No newline at end of file diff --git a/src/test/kotlin/MainKtTestMock.kt b/src/test/kotlin/MainKtTestMock.kt new file mode 100644 index 0000000..52c1e23 --- /dev/null +++ b/src/test/kotlin/MainKtTestMock.kt @@ -0,0 +1,49 @@ +import io.github.jan.supabase.SupabaseClient +import io.github.jan.supabase.createSupabaseClient +import io.github.jan.supabase.postgrest.Postgrest +import io.github.jan.supabase.postgrest.postgrest +import io.github.jan.supabase.postgrest.query.PostgrestBuilder +import io.github.jan.supabase.postgrest.query.PostgrestResult +import io.ktor.http.* +import io.mockk.coEvery +import io.mockk.every +import io.mockk.mockk +import kotlinx.coroutines.runBlocking +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.testcontainers.containers.ComposeContainer +import org.testcontainers.junit.jupiter.Container +import org.testcontainers.junit.jupiter.Testcontainers +import java.io.File +import java.nio.file.Path +import kotlin.test.BeforeTest + +class MainKtTestMock { + + private lateinit var supabaseClient : SupabaseClient + + @BeforeTest + fun setUp() { + + supabaseClient = mockk() + val postgrest = mockk() + val postgrestBuilder = mockk() + val postgrestResult = PostgrestResult(body = null, headers = Headers.Empty) + + every { supabaseClient.postgrest } returns postgrest + every { postgrest["path"] } returns postgrestBuilder + coEvery { postgrestBuilder.insert(values = any>()) } returns postgrestResult + } + + @Test + fun testSavePerson(){ + val randomPersons = listOf(Person("Jan", 30), Person("Jane", 42)) + + runBlocking { + val result = savePerson(randomPersons, supabaseClient) + assertEquals(2, result.size) + assertEquals(randomPersons, result.map { it.toPerson() }) + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/MainKtTestMockEngine.kt b/src/test/kotlin/MainKtTestMockEngine.kt new file mode 100644 index 0000000..e780a01 --- /dev/null +++ b/src/test/kotlin/MainKtTestMockEngine.kt @@ -0,0 +1,27 @@ +import io.github.jan.supabase.SupabaseClient +import io.github.jan.supabase.createSupabaseClient +import io.ktor.client.engine.mock.* +import kotlinx.coroutines.runBlocking +import kotlinx.serialization.json.Json +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class MainKtTestMockEngine { + + private val supabaseClient : SupabaseClient = createSupabaseClient("", "",) { + httpEngine = MockEngine { _ -> + respond(Json.encodeToString(Person.serializer(), Person("name_1", 16))) + } + } + + @Test + fun testSavePerson(){ + val randomPersons = listOf(Person("Jan", 30), Person("Jane", 42)) + + runBlocking { + val result = savePerson(randomPersons, supabaseClient) + assertEquals(2, result.size) + assertEquals(randomPersons, result.map { it.toPerson() }) + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/MainKtTestSubclass.kt b/src/test/kotlin/MainKtTestSubclass.kt new file mode 100644 index 0000000..70cea79 --- /dev/null +++ b/src/test/kotlin/MainKtTestSubclass.kt @@ -0,0 +1,28 @@ +import io.mockk.coEvery +import io.mockk.mockk +import io.mockk.verify +import kotlinx.coroutines.runBlocking +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import kotlin.test.BeforeTest + +class MainKtTestSubclass { + + private lateinit var client : DatabaseClient + + @BeforeTest + fun setUp() { + client = mockk() + coEvery { client.savePerson(any>()) } returns listOf(ResultPerson(2, "name_2", 2, "timestamp_2")) + } + + @Test + fun testSavePerson(){ + val fakePersons = listOf(Person("name_1", 16), Person("name_2", 28)) + + runBlocking { + val result = client.savePerson(fakePersons) + assertEquals(2, result.size) + } + } +} \ No newline at end of file