core/core/exposed/src/jvmTest/kotlin/dev/inmo/postssystem/core/exposed/ExposedContentAPICommonTests.kt

62 lines
1.9 KiB
Kotlin
Raw Normal View History

2020-11-25 08:08:45 +00:00
package dev.inmo.postssystem.core.exposed
2020-11-25 08:08:45 +00:00
import dev.inmo.postssystem.core.content.TextContent
import kotlinx.coroutines.runBlocking
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.transactionManager
import java.io.File
import java.sql.Connection
2020-04-10 10:30:20 +00:00
import kotlin.test.Test
2020-04-11 07:06:10 +00:00
import kotlin.test.assertEquals
2020-07-30 09:34:32 +00:00
class ExposedContentRepoCommonTests {
private val tempFolder = System.getProperty("java.io.tmpdir")!!
@Test
fun `Test that it is possible to use several different databases at one time`() {
2019-11-10 18:17:23 +00:00
val numberOfDatabases = 8
val databaseFiles = (0 until numberOfDatabases).map {
"$tempFolder/ExposedContentAPICommonTestsDB$it.db"
}
val apis = databaseFiles.map {
2020-04-11 07:06:10 +00:00
File(it).also {
it.delete()
it.deleteOnExit()
}
2020-07-30 09:34:32 +00:00
ExposedContentRepo(
Database.Companion.connect("jdbc:sqlite:$it", driver = "org.sqlite.JDBC").also {
it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE
}
)
}
val results = apis.mapIndexed { i, api ->
2020-04-11 07:06:10 +00:00
val content = runBlocking { api.registerContent(TextContent(i.toString())) }
assert(content != null)
2020-04-11 07:06:10 +00:00
val ids = runBlocking { api.getContentsIds() }
assertEquals(ids.size, 1)
content!!
}
results.forEachIndexed { i, content ->
apis.forEachIndexed { j, api ->
assert(
runBlocking {
api.getContentById(content.id) == (if (i != j) null else content)
}
)
2019-11-10 18:17:23 +00:00
assert(
runBlocking {
api.deleteContent(content.id) == (i == j)
}
)
}
}
databaseFiles.forEach {
File(it).delete()
}
}
2020-04-10 10:30:20 +00:00
}