fix(api): boot up a fresh container for each test

This commit is contained in:
Harsh Shandilya 2023-10-31 10:56:17 +05:30
parent b9d92ecefa
commit 45f384d048
No known key found for this signature in database

View file

@ -10,7 +10,6 @@ import com.google.common.truth.Truth.assertThat
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dev.msfjarvis.claw.model.shiori.AuthRequest import dev.msfjarvis.claw.model.shiori.AuthRequest
import dev.msfjarvis.claw.model.shiori.AuthResponse import dev.msfjarvis.claw.model.shiori.AuthResponse
import dev.msfjarvis.claw.model.shiori.Bookmark
import dev.msfjarvis.claw.model.shiori.BookmarkRequest import dev.msfjarvis.claw.model.shiori.BookmarkRequest
import dev.msfjarvis.claw.model.shiori.EditedBookmark import dev.msfjarvis.claw.model.shiori.EditedBookmark
import dev.msfjarvis.claw.model.shiori.Tag import dev.msfjarvis.claw.model.shiori.Tag
@ -18,9 +17,7 @@ import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import okhttp3.MediaType import okhttp3.MediaType
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.testcontainers.containers.GenericContainer import org.testcontainers.containers.GenericContainer
@ -33,18 +30,13 @@ class ShioriApiTest {
@BeforeEach @BeforeEach
fun setUp() { fun setUp() {
container.start()
runBlocking { credentials = api.login(AuthRequest(USER, PASSWORD)) } runBlocking { credentials = api.login(AuthRequest(USER, PASSWORD)) }
} }
@AfterEach @AfterEach
fun tearDown() { fun tearDown() {
runBlocking { container.stop()
val ids = api.getBookmarks(credentials.session).bookmarks.map(Bookmark::id)
if (ids.isNotEmpty()) {
api.deleteBookmark(credentials.session, ids)
}
api.logout(credentials.session)
}
} }
@Test @Test
@ -148,26 +140,12 @@ class ShioriApiTest {
private val json = Json { ignoreUnknownKeys = true } private val json = Json { ignoreUnknownKeys = true }
// The mapped port can only be obtained after the container has started, so this has to be lazy. private val api
private val api by get() =
lazy(LazyThreadSafetyMode.NONE) {
Retrofit.Builder() Retrofit.Builder()
.baseUrl("http://${container.host}:${container.firstMappedPort}") .baseUrl("http://${container.host}:${container.firstMappedPort}")
.addConverterFactory(json.asConverterFactory(MediaType.get("application/json"))) .addConverterFactory(json.asConverterFactory(MediaType.get("application/json")))
.build() .build()
.create<ShioriApi>() .create<ShioriApi>()
} }
@JvmStatic
@BeforeAll
fun setupContainer() {
container.start()
}
@JvmStatic
@AfterAll
fun destroyContainer() {
container.stop()
}
}
} }