compose-lobsters/database/impl/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt

135 lines
3.4 KiB
Kotlin

/*
* Copyright © 2021-2024 Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.database.local
import com.google.common.truth.Truth.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
class SavedPostQueriesTest {
private lateinit var postQueries: SavedPostQueries
@BeforeEach
fun setup() {
postQueries = setupDatabase().savedPostQueries
}
@Test
fun `add and count posts`() {
val posts = createTestData(5)
posts.forEach { postQueries.insertOrReplacePost(it) }
val postCount = postQueries.selectCount().executeAsOne()
assertThat(postCount).isEqualTo(5)
}
@Test
fun `update post in database`() {
// Get 1 post
val post = createTestData(1).first()
// Insert post into DB
postQueries.insertOrReplacePost(post)
// Create a new post and try replacing it
val newPost = post.copy(submitterName = "Fake name")
postQueries.insertOrReplacePost(newPost)
// Check post count
val postsCount = postQueries.selectCount().executeAsOne()
assertThat(postsCount).isEqualTo(1)
// Check if post is updated
val postFromDb = postQueries.selectAllPosts().executeAsOne()
assertThat(postFromDb.submitterName).isEqualTo("Fake name")
}
@Test
fun `get post from db`() {
// Get 1 post
val post = createTestData(1).first()
// Insert post into DB
postQueries.insertOrReplacePost(post)
val postFromDb = postQueries.selectAllPosts().executeAsOne()
assertThat(postFromDb.shortId).isEqualTo("test_id_1")
}
@Test
fun `get multiple posts from db`() {
// Get 5 post
val posts = createTestData(5)
// Insert posts into DB
posts.forEach { postQueries.insertOrReplacePost(it) }
val postsFromDb = postQueries.selectAllPosts().executeAsList()
// Check if all posts have correct shortId
postsFromDb.forEachIndexed { index, post ->
assertThat(post.shortId).isEqualTo("test_id_${index.inc()}")
}
}
@Test
fun `delete post`() {
// Create 3 posts and insert them to DB
val posts = createTestData(3)
posts.forEach { postQueries.insertOrReplacePost(it) }
// Delete 2nd post
postQueries.deletePost("test_id_2")
val postsFromDB = postQueries.selectAllPosts().executeAsList()
// Check if size is 2, and only the correct post is deleted
assertThat(postsFromDB).hasSize(2)
assertThat(postsFromDB[0].shortId).isEqualTo("test_id_1")
assertThat(postsFromDB[1].shortId).isEqualTo("test_id_3")
}
@Test
fun `delete all posts`() {
// Create 5 posts and insert them to DB
val posts = createTestData(5)
posts.forEach { postQueries.insertOrReplacePost(it) }
// Delete all posts
postQueries.deleteAllPosts()
val dbPosts = postQueries.selectAllPosts().executeAsList()
assertThat(dbPosts).isEmpty()
}
private fun createTestData(count: Int): ArrayList<SavedPost> {
val posts = arrayListOf<SavedPost>()
for (i in 1..count) {
val post =
SavedPost(
shortId = "test_id_$i",
createdAt = "0",
title = "test",
url = "test_url",
commentCount = 0,
commentsUrl = "test_comments_url",
submitterName = "test_user_$i",
tags = listOf(),
description = "",
)
posts.add(post)
}
return posts
}
}