feat(database): migrate away from kotest

This commit is contained in:
Harsh Shandilya 2023-05-04 02:49:07 +05:30
parent 7c5a9eb683
commit 4d78a73602
No known key found for this signature in database
3 changed files with 116 additions and 105 deletions

View file

@ -33,8 +33,13 @@ dependencies {
implementation(libs.sqldelight.primitiveAdapters) implementation(libs.sqldelight.primitiveAdapters)
implementation(projects.core) implementation(projects.core)
testImplementation(libs.kotest.assertions.core) testImplementation(libs.junit.jupiter.api)
testImplementation(libs.kotest.runner.junit5) testImplementation(libs.truth) { exclude(group = "junit", module = "junit") }
testRuntimeOnly(libs.junit.jupiter.engine)
testRuntimeOnly(libs.junit.legacy) {
// See https://github.com/google/truth/issues/333
because("Truth needs it")
}
testImplementation(libs.kotlinx.coroutines.core) testImplementation(libs.kotlinx.coroutines.core)
testImplementation(libs.sqldelight.jvmDriver) testImplementation(libs.sqldelight.jvmDriver)
} }

View file

@ -8,18 +8,18 @@ package dev.msfjarvis.claw.database.local
import app.cash.sqldelight.adapter.primitive.IntColumnAdapter import app.cash.sqldelight.adapter.primitive.IntColumnAdapter
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import com.google.common.truth.Truth.assertThat
import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.LobstersDatabase
import dev.msfjarvis.claw.database.model.CSVAdapter import dev.msfjarvis.claw.database.model.CSVAdapter
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.shouldBe
import java.util.UUID import java.util.UUID
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
class PostCommentsQueriesTest : FunSpec() { class PostCommentsQueriesTest {
private lateinit var postQueries: PostCommentsQueries private lateinit var postQueries: PostCommentsQueries
init { @BeforeEach
beforeEach { fun setup() {
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
LobstersDatabase.Schema.create(driver) LobstersDatabase.Schema.create(driver)
val database = val database =
@ -31,18 +31,19 @@ class PostCommentsQueriesTest : FunSpec() {
postQueries = database.postCommentsQueries postQueries = database.postCommentsQueries
} }
test("get non-existent post") { @Test
fun `get non-existent post`() {
val ids = postQueries.getCommentIds(UUID.randomUUID().toString()).executeAsOneOrNull() val ids = postQueries.getCommentIds(UUID.randomUUID().toString()).executeAsOneOrNull()
ids shouldBe null assertThat(ids).isNull()
} }
test("put and get post comments") { @Test
fun `put and get post comments`() {
val postId = UUID.randomUUID().toString() val postId = UUID.randomUUID().toString()
val comments = PostComments(postId, List(10) { UUID.randomUUID().toString() }) val comments = PostComments(postId, List(10) { UUID.randomUUID().toString() })
postQueries.rememberComments(comments) postQueries.rememberComments(comments)
val ids = postQueries.getCommentIds(postId).executeAsOne().commentIds val ids = postQueries.getCommentIds(postId).executeAsOne().commentIds
ids shouldHaveSize 10 assertThat(ids).hasSize(10)
}
} }
} }

View file

@ -8,19 +8,17 @@ package dev.msfjarvis.claw.database.local
import app.cash.sqldelight.adapter.primitive.IntColumnAdapter import app.cash.sqldelight.adapter.primitive.IntColumnAdapter
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import com.google.common.truth.Truth.assertThat
import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.LobstersDatabase
import dev.msfjarvis.claw.database.model.CSVAdapter import dev.msfjarvis.claw.database.model.CSVAdapter
import io.kotest.core.spec.style.FunSpec import org.junit.jupiter.api.BeforeEach
import io.kotest.matchers.collections.shouldBeEmpty import org.junit.jupiter.api.Test
import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.shouldBe
class SavedPostQueriesTest : FunSpec() {
class SavedPostQueriesTest {
private lateinit var postQueries: SavedPostQueries private lateinit var postQueries: SavedPostQueries
init { @BeforeEach
beforeEach { fun setup() {
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
LobstersDatabase.Schema.create(driver) LobstersDatabase.Schema.create(driver)
val database = val database =
@ -32,17 +30,19 @@ class SavedPostQueriesTest : FunSpec() {
postQueries = database.savedPostQueries postQueries = database.savedPostQueries
} }
test("add and count posts") { @Test
fun `add and count posts`() {
val posts = createTestData(5) val posts = createTestData(5)
posts.forEach { postQueries.insertOrReplacePost(it) } posts.forEach { postQueries.insertOrReplacePost(it) }
val postCount = postQueries.selectCount().executeAsOne() val postCount = postQueries.selectCount().executeAsOne()
postCount shouldBe 5 assertThat(postCount).isEqualTo(5)
} }
test("update post in database") { @Test
fun `update post in database`() {
// Get 1 post // Get 1 post
val post = createTestData(1)[0] val post = createTestData(1)[0]
@ -55,15 +55,16 @@ class SavedPostQueriesTest : FunSpec() {
// Check post count // Check post count
val postsCount = postQueries.selectCount().executeAsOne() val postsCount = postQueries.selectCount().executeAsOne()
postsCount shouldBe 1 assertThat(postsCount).isEqualTo(1)
// Check if post is updated // Check if post is updated
val postFromDb = postQueries.selectPost(post.shortId).executeAsOne() val postFromDb = postQueries.selectPost(post.shortId).executeAsOne()
postFromDb.submitterName shouldBe "Fake name" assertThat(postFromDb.submitterName).isEqualTo("Fake name")
} }
test("get post from db") { @Test
fun `get post from db`() {
// Get 1 post // Get 1 post
val post = createTestData(1)[0] val post = createTestData(1)[0]
@ -71,10 +72,11 @@ class SavedPostQueriesTest : FunSpec() {
postQueries.insertOrReplacePost(post) postQueries.insertOrReplacePost(post)
val postFromDb = postQueries.selectAllPosts().executeAsOne() val postFromDb = postQueries.selectAllPosts().executeAsOne()
postFromDb.shortId shouldBe "test_id_1" assertThat(postFromDb.shortId).isEqualTo("test_id_1")
} }
test("get multiple posts from db") { @Test
fun `get multiple posts from db`() {
// Get 5 post // Get 5 post
val posts = createTestData(5) val posts = createTestData(5)
@ -84,10 +86,13 @@ class SavedPostQueriesTest : FunSpec() {
val postsFromDb = postQueries.selectAllPosts().executeAsList() val postsFromDb = postQueries.selectAllPosts().executeAsList()
// Check if all posts have correct shortId // Check if all posts have correct shortId
postsFromDb.forEachIndexed { index, post -> post.shortId shouldBe "test_id_${index.inc()}" } postsFromDb.forEachIndexed { index, post ->
assertThat(post.shortId).isEqualTo("test_id_${index.inc()}")
}
} }
test("delete post") { @Test
fun `delete post`() {
// Create 3 posts and insert them to DB // Create 3 posts and insert them to DB
val posts = createTestData(3) val posts = createTestData(3)
posts.forEach { postQueries.insertOrReplacePost(it) } posts.forEach { postQueries.insertOrReplacePost(it) }
@ -98,12 +103,13 @@ class SavedPostQueriesTest : FunSpec() {
val postsFromDB = postQueries.selectAllPosts().executeAsList() val postsFromDB = postQueries.selectAllPosts().executeAsList()
// Check if size is 2, and only the correct post is deleted // Check if size is 2, and only the correct post is deleted
postsFromDB shouldHaveSize 2 assertThat(postsFromDB).hasSize(2)
postsFromDB[0].shortId shouldBe "test_id_1" assertThat(postsFromDB[0].shortId).isEqualTo("test_id_1")
postsFromDB[1].shortId shouldBe "test_id_3" assertThat(postsFromDB[1].shortId).isEqualTo("test_id_3")
} }
test("delete all posts") { @Test
fun `delete all posts`() {
// Create 5 posts and insert them to DB // Create 5 posts and insert them to DB
val posts = createTestData(5) val posts = createTestData(5)
posts.forEach { postQueries.insertOrReplacePost(it) } posts.forEach { postQueries.insertOrReplacePost(it) }
@ -113,8 +119,7 @@ class SavedPostQueriesTest : FunSpec() {
val dbPosts = postQueries.selectAllPosts().executeAsList() val dbPosts = postQueries.selectAllPosts().executeAsList()
dbPosts.shouldBeEmpty() assertThat(dbPosts).isEmpty()
}
} }
private fun createTestData(count: Int): ArrayList<SavedPost> { private fun createTestData(count: Int): ArrayList<SavedPost> {