Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled
205 lines
5.9 KiB
Kotlin
205 lines
5.9 KiB
Kotlin
package com.rssuper.database
|
|
|
|
import android.content.Context
|
|
import androidx.room.Room
|
|
import androidx.test.core.app.ApplicationProvider
|
|
import com.rssuper.database.daos.SubscriptionDao
|
|
import com.rssuper.database.entities.SubscriptionEntity
|
|
import kotlinx.coroutines.flow.first
|
|
import kotlinx.coroutines.test.runTest
|
|
import org.junit.After
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Assert.assertNotNull
|
|
import org.junit.Assert.assertNull
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import java.util.Date
|
|
|
|
class SubscriptionDaoTest {
|
|
|
|
private lateinit var database: RssDatabase
|
|
private lateinit var dao: SubscriptionDao
|
|
|
|
@Before
|
|
fun createDb() {
|
|
val context = ApplicationProvider.getApplicationContext<Context>()
|
|
database = Room.inMemoryDatabaseBuilder(
|
|
context,
|
|
RssDatabase::class.java
|
|
)
|
|
.allowMainThreadQueries()
|
|
.build()
|
|
dao = database.subscriptionDao()
|
|
}
|
|
|
|
@After
|
|
fun closeDb() {
|
|
database.close()
|
|
}
|
|
|
|
@Test
|
|
fun insertAndGetSubscription() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertNotNull(result)
|
|
assertEquals("1", result?.id)
|
|
assertEquals("Test Feed", result?.title)
|
|
}
|
|
|
|
@Test
|
|
fun getSubscriptionByUrl() = runTest {
|
|
val subscription = createTestSubscription("1", url = "https://example.com/feed")
|
|
|
|
dao.insertSubscription(subscription)
|
|
|
|
val result = dao.getSubscriptionByUrl("https://example.com/feed")
|
|
assertNotNull(result)
|
|
assertEquals("1", result?.id)
|
|
}
|
|
|
|
@Test
|
|
fun getAllSubscriptions() = runTest {
|
|
val subscription1 = createTestSubscription("1")
|
|
val subscription2 = createTestSubscription("2")
|
|
|
|
dao.insertSubscriptions(listOf(subscription1, subscription2))
|
|
|
|
val result = dao.getAllSubscriptions().first()
|
|
assertEquals(2, result.size)
|
|
}
|
|
|
|
@Test
|
|
fun getEnabledSubscriptions() = runTest {
|
|
val enabled = createTestSubscription("1", enabled = true)
|
|
val disabled = createTestSubscription("2", enabled = false)
|
|
|
|
dao.insertSubscriptions(listOf(enabled, disabled))
|
|
|
|
val result = dao.getEnabledSubscriptions().first()
|
|
assertEquals(1, result.size)
|
|
assertEquals("1", result[0].id)
|
|
}
|
|
|
|
@Test
|
|
fun updateSubscription() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
|
|
val updated = subscription.copy(title = "Updated Title")
|
|
dao.updateSubscription(updated)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertEquals("Updated Title", result?.title)
|
|
}
|
|
|
|
@Test
|
|
fun deleteSubscription() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
dao.deleteSubscription(subscription)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertNull(result)
|
|
}
|
|
|
|
@Test
|
|
fun deleteSubscriptionById() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
dao.deleteSubscriptionById("1")
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertNull(result)
|
|
}
|
|
|
|
@Test
|
|
fun getSubscriptionCount() = runTest {
|
|
val subscription1 = createTestSubscription("1")
|
|
val subscription2 = createTestSubscription("2")
|
|
|
|
dao.insertSubscriptions(listOf(subscription1, subscription2))
|
|
|
|
val count = dao.getSubscriptionCount().first()
|
|
assertEquals(2, count)
|
|
}
|
|
|
|
@Test
|
|
fun updateError() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
dao.updateError("1", "Feed not found")
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertEquals("Feed not found", result?.error)
|
|
}
|
|
|
|
@Test
|
|
fun updateLastFetchedAt() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
val now = Date()
|
|
|
|
dao.insertSubscription(subscription)
|
|
dao.updateLastFetchedAt("1", now)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertEquals(now, result?.lastFetchedAt)
|
|
assertNull(result?.error)
|
|
}
|
|
|
|
@Test
|
|
fun updateNextFetchAt() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
val future = Date(System.currentTimeMillis() + 3600000)
|
|
|
|
dao.insertSubscription(subscription)
|
|
dao.updateNextFetchAt("1", future)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertEquals(future, result?.nextFetchAt)
|
|
}
|
|
|
|
@Test
|
|
fun insertSubscriptionWithConflict() = runTest {
|
|
val subscription = createTestSubscription("1")
|
|
|
|
dao.insertSubscription(subscription)
|
|
|
|
val updated = subscription.copy(title = "Updated")
|
|
dao.insertSubscription(updated)
|
|
|
|
val result = dao.getSubscriptionById("1")
|
|
assertEquals("Updated", result?.title)
|
|
}
|
|
|
|
private fun createTestSubscription(
|
|
id: String,
|
|
url: String = "https://example.com/feed/$id",
|
|
title: String = "Test Feed",
|
|
enabled: Boolean = true
|
|
): SubscriptionEntity {
|
|
val now = Date()
|
|
return SubscriptionEntity(
|
|
id = id,
|
|
url = url,
|
|
title = title,
|
|
category = "Tech",
|
|
enabled = enabled,
|
|
fetchInterval = 3600000,
|
|
createdAt = now,
|
|
updatedAt = now,
|
|
lastFetchedAt = null,
|
|
nextFetchAt = null,
|
|
error = null,
|
|
httpAuthUsername = null,
|
|
httpAuthPassword = null
|
|
)
|
|
}
|
|
}
|