mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 19:07:02 +05:30
database: add SavedPost table and switch tests to it
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
f76628574a
commit
75888c5ba6
2 changed files with 57 additions and 39 deletions
|
@ -0,0 +1,39 @@
|
||||||
|
import kotlin.collections.List;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS SavedPost(
|
||||||
|
shortId TEXT NOT NULL PRIMARY KEY,
|
||||||
|
title TEXT NOT NULL,
|
||||||
|
url TEXT NOT NULL,
|
||||||
|
createdAt TEXT NOT NULL,
|
||||||
|
commentsUrl TEXT NOT NULL,
|
||||||
|
submitterName TEXT NOT NULL,
|
||||||
|
submitterAvatarUrl TEXT NOT NULL,
|
||||||
|
tags TEXT as List<String> NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
insertOrReplacePost:
|
||||||
|
INSERT OR REPLACE
|
||||||
|
INTO SavedPost
|
||||||
|
VALUES ?;
|
||||||
|
|
||||||
|
selectAllPosts:
|
||||||
|
SELECT *
|
||||||
|
FROM SavedPost;
|
||||||
|
|
||||||
|
selectCount:
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM SavedPost;
|
||||||
|
|
||||||
|
deleteAllPosts:
|
||||||
|
DELETE
|
||||||
|
FROM SavedPost;
|
||||||
|
|
||||||
|
deletePost:
|
||||||
|
DELETE
|
||||||
|
FROM SavedPost
|
||||||
|
WHERE shortId = ?;
|
||||||
|
|
||||||
|
selectPost:
|
||||||
|
SELECT *
|
||||||
|
FROM SavedPost
|
||||||
|
WHERE shortId = ?;
|
|
@ -1,13 +1,8 @@
|
||||||
package dev.msfjarvis.lobsters.data.local
|
package dev.msfjarvis.lobsters.data.local
|
||||||
|
|
||||||
import com.squareup.moshi.Moshi
|
|
||||||
import com.squareup.moshi.adapter
|
|
||||||
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
||||||
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
import dev.msfjarvis.lobsters.model.Submitter
|
|
||||||
import dev.msfjarvis.lobsters.model.SubmitterAdapter
|
|
||||||
import dev.msfjarvis.lobsters.model.TagsAdapter
|
import dev.msfjarvis.lobsters.model.TagsAdapter
|
||||||
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory
|
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
@ -16,19 +11,17 @@ import org.junit.Test
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
class SqlDelightQueriesTest {
|
class SqlDelightQueriesTest {
|
||||||
|
|
||||||
private lateinit var postQueries: PostQueries
|
private lateinit var postQueries: SavedPostQueries
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
val moshi = Moshi.Builder().add(MetadataKotlinJsonAdapterFactory()).build()
|
|
||||||
val submitterJsonAdapter = moshi.adapter<Submitter>()
|
|
||||||
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
||||||
LobstersDatabase.Schema.create(driver)
|
LobstersDatabase.Schema.create(driver)
|
||||||
val database = LobstersDatabase(
|
val database = LobstersDatabase(
|
||||||
driver,
|
driver,
|
||||||
LobstersPost.Adapter(SubmitterAdapter(submitterJsonAdapter), TagsAdapter())
|
SavedPost.Adapter(TagsAdapter()),
|
||||||
)
|
)
|
||||||
postQueries = database.postQueries
|
postQueries = database.savedPostQueries
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -63,7 +56,7 @@ class SqlDelightQueriesTest {
|
||||||
postQueries.insertOrReplacePost(post)
|
postQueries.insertOrReplacePost(post)
|
||||||
|
|
||||||
// Create a new post and try replacing it
|
// Create a new post and try replacing it
|
||||||
val newPost = post.copy(comment_count = 100)
|
val newPost = post.copy(submitterName = "Fake name")
|
||||||
postQueries.insertOrReplacePost(newPost)
|
postQueries.insertOrReplacePost(newPost)
|
||||||
|
|
||||||
// Check post count
|
// Check post count
|
||||||
|
@ -71,8 +64,8 @@ class SqlDelightQueriesTest {
|
||||||
assertEquals(1, postsCount)
|
assertEquals(1, postsCount)
|
||||||
|
|
||||||
// Check if post is updated
|
// Check if post is updated
|
||||||
val postFromDb = postQueries.selectPost(post.short_id).executeAsOne()
|
val postFromDb = postQueries.selectPost(post.shortId).executeAsOne()
|
||||||
assertEquals(100, postFromDb.comment_count)
|
assertEquals("Fake name", postFromDb.submitterName)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -84,7 +77,7 @@ class SqlDelightQueriesTest {
|
||||||
postQueries.insertOrReplacePost(post)
|
postQueries.insertOrReplacePost(post)
|
||||||
|
|
||||||
val postFromDb = postQueries.selectAllPosts().executeAsOne()
|
val postFromDb = postQueries.selectAllPosts().executeAsOne()
|
||||||
assertEquals("test_id_1", postFromDb.short_id)
|
assertEquals("test_id_1", postFromDb.shortId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -97,9 +90,9 @@ class SqlDelightQueriesTest {
|
||||||
|
|
||||||
val postsFromDb = postQueries.selectAllPosts().executeAsList()
|
val postsFromDb = postQueries.selectAllPosts().executeAsList()
|
||||||
|
|
||||||
// Check if all posts have correct short_id
|
// Check if all posts have correct shortId
|
||||||
for (i in 1..5) {
|
for (i in 1..5) {
|
||||||
assertEquals("test_id_$i", postsFromDb[i - 1].short_id)
|
assertEquals("test_id_$i", postsFromDb[i - 1].shortId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,8 +109,8 @@ class SqlDelightQueriesTest {
|
||||||
|
|
||||||
// Check if size is 2, and only the correct post is deleted
|
// Check if size is 2, and only the correct post is deleted
|
||||||
assertEquals(2, postsFromDB.size)
|
assertEquals(2, postsFromDB.size)
|
||||||
assertEquals("test_id_1", postsFromDB[0].short_id)
|
assertEquals("test_id_1", postsFromDB[0].shortId)
|
||||||
assertEquals("test_id_3", postsFromDB[1].short_id)
|
assertEquals("test_id_3", postsFromDB[1].shortId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -136,32 +129,18 @@ class SqlDelightQueriesTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun createTestData(count: Int): ArrayList<LobstersPost> {
|
private fun createTestData(count: Int): ArrayList<SavedPost> {
|
||||||
val posts = arrayListOf<LobstersPost>()
|
val posts = arrayListOf<SavedPost>()
|
||||||
|
|
||||||
for (i in 1..count) {
|
for (i in 1..count) {
|
||||||
val submitter = Submitter(
|
val post = SavedPost(
|
||||||
username = "test_user_$i",
|
shortId = "test_id_$i",
|
||||||
createdAt = "0",
|
createdAt = "0",
|
||||||
about = "test",
|
|
||||||
avatarUrl = "test_avatar_url",
|
|
||||||
invitedByUser = "test_user",
|
|
||||||
isAdmin = false,
|
|
||||||
isModerator = false
|
|
||||||
)
|
|
||||||
|
|
||||||
val post = LobstersPost(
|
|
||||||
short_id = "test_id_$i",
|
|
||||||
short_id_url = "test_id_url",
|
|
||||||
created_at = "0",
|
|
||||||
title = "test",
|
title = "test",
|
||||||
url = "test_url",
|
url = "test_url",
|
||||||
score = 0,
|
commentsUrl = "test_comments_url",
|
||||||
flags = 0,
|
submitterName = "test_user_$i",
|
||||||
comment_count = 0,
|
submitterAvatarUrl = "test_avatar_url",
|
||||||
description = "test",
|
|
||||||
comments_url = "test_comments_url",
|
|
||||||
submitter_user = submitter,
|
|
||||||
tags = listOf(),
|
tags = listOf(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue