database: add SavedPost table and switch tests to it

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-02-28 19:06:43 +05:30
parent f76628574a
commit 75888c5ba6
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 57 additions and 39 deletions

View file

@ -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 = ?;

View file

@ -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(),
) )