chore: add test for domain inbox (#635)

This commit is contained in:
Diego Beraldin 2024-03-25 22:49:11 +01:00 committed by GitHub
parent fded58bcd1
commit 8998a04800
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 154 additions and 9 deletions

View File

@ -11,6 +11,7 @@ import org.junit.Test
import kotlin.test.assertEquals
class DefaultApiConfigurationRepositoryTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -37,4 +38,4 @@ class DefaultApiConfigurationRepositoryTest {
keyStore.save(any(), "feddit.it")
}
}
}
}

View File

@ -17,6 +17,7 @@ import org.junit.Test
import kotlin.test.assertEquals
class DefaultAuthRepositoryTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -47,4 +48,4 @@ class DefaultAuthRepositoryTest {
authService.login(LoginForm("username", "password"))
}
}
}
}

View File

@ -20,6 +20,7 @@ import kotlin.test.assertEquals
import kotlin.test.assertNull
class DefaultIdentityRepositoryTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -107,4 +108,4 @@ class DefaultIdentityRepositoryTest {
siteRepository wasNot Called
}
}
}
}

View File

@ -10,6 +10,7 @@ import org.junit.Rule
import org.junit.Test
class DefaultDeleteAccountUseCaseTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -26,4 +27,4 @@ class DefaultDeleteAccountUseCaseTest {
coVerify { accountRepository.delete(1) }
}
}
}

View File

@ -23,6 +23,7 @@ import org.junit.Test
import kotlin.test.assertEquals
class DefaultLoginUseCaseTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -180,4 +181,4 @@ class DefaultLoginUseCaseTest {
settingsRepository.createSettings(any(), any())
}
}
}
}

View File

@ -17,6 +17,7 @@ import org.junit.Rule
import org.junit.Test
class DefaultLogoutUseCaseTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -34,7 +35,7 @@ class DefaultLogoutUseCaseTest {
)
@Test
fun givenNewAccount_whenExecute_thenInteractionsAreAsExpected() = runTest {
fun whenExecute_thenInteractionsAreAsExpected() = runTest {
val accountId = 1L
coEvery {
accountRepository.getActive()

View File

@ -18,6 +18,7 @@ import org.junit.Rule
import org.junit.Test
class DefaultSwitchAccountUseCaseTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
@ -82,4 +83,4 @@ class DefaultSwitchAccountUseCaseTest {
serviceProvider.changeInstance("new-instance")
}
}
}
}

View File

@ -38,9 +38,13 @@ kotlin {
implementation(projects.domain.lemmy.repository)
}
}
val commonTest by getting {
val androidUnitTest by getting {
dependencies {
implementation(kotlin("test"))
implementation(libs.kotlinx.coroutines.test)
implementation(kotlin("test-junit"))
implementation(libs.mockk)
implementation(libs.turbine)
implementation(projects.core.testutils)
}
}
}

View File

@ -0,0 +1,59 @@
package com.github.diegoberaldin.raccoonforlemmy.domain.inbox
import app.cash.turbine.test
import com.github.diegoberaldin.raccoonforlemmy.core.testutils.DispatcherTestRule
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.inbox.usecase.GetUnreadItemsUseCase
import io.mockk.coEvery
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
class DefaultInboxCoordinatorTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
private val identityRepository = mockk<IdentityRepository>(relaxUnitFun = true) {
every { isLogged } returns MutableStateFlow(true)
every { authToken } returns MutableStateFlow("fake-token")
}
private val getUnreadItemsUseCase = mockk<GetUnreadItemsUseCase>(relaxUnitFun = true) {
coEvery { getUnreadReplies() } returns 0
coEvery { getUnreadMentions() } returns 0
coEvery { getUnreadMessages() } returns 0
}
private val sut = DefaultInboxCoordinator(
identityRepository = identityRepository,
getUnreadItemsUseCase = getUnreadItemsUseCase,
)
@Test
fun whenSetUnreadOnly_thenValueIsUpdated() = runTest {
val resBefore = sut.unreadOnly.value
sut.setUnreadOnly(!resBefore)
val resAfter = sut.unreadOnly.value
assertNotEquals(resBefore, resAfter)
}
@Test
fun whenSendEvent_thenValueIsUpdated() = runTest {
val evt = InboxCoordinator.Event.Refresh
launch {
sut.sendEvent(evt)
}
sut.events.test {
val item = awaitItem()
assertEquals(evt, item)
}
}
}

View File

@ -0,0 +1,75 @@
package com.github.diegoberaldin.raccoonforlemmy.domain.inbox.usecase
import com.github.diegoberaldin.raccoonforlemmy.core.testutils.DispatcherTestRule
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PrivateMessageModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PrivateMessageRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
import kotlin.test.assertEquals
class DefaultGetUnreadItemsUseCaseTest {
@get:Rule
val dispatcherTestRule = DispatcherTestRule()
private val identityRepository = mockk<IdentityRepository>(relaxUnitFun = true) {
every { authToken } returns MutableStateFlow("fake-token")
}
private val userRepository = mockk<UserRepository>(relaxUnitFun = true)
private val messageRepository = mockk<PrivateMessageRepository>(relaxUnitFun = true)
private val sut = DefaultGetUnreadItemsUseCase(
identityRepository = identityRepository,
userRepository = userRepository,
messageRepository = messageRepository,
)
@Test
fun whenGetUnreadReplies_thenResultIsAsExpected() = runTest {
coEvery { userRepository.getReplies(any(), any(), any()) } returns listOf(mockk())
val res = sut.getUnreadReplies()
assertEquals(1, res)
coVerify {
userRepository.getReplies(auth = "fake-token", page = 1, limit = any())
}
}
@Test
fun whenGetUnreadMentions_thenResultIsAsExpected() = runTest {
coEvery { userRepository.getMentions(any(), any(), any()) } returns listOf(mockk())
val res = sut.getUnreadMentions()
assertEquals(1, res)
coVerify {
userRepository.getMentions(auth = "fake-token", page = 1, limit = any())
}
}
@Test
fun whenGetUnreadMessages_thenResultIsAsExpected() = runTest {
val fakeMessage = mockk<PrivateMessageModel> {
every { creator } returns UserModel(id = 1)
every { recipient } returns UserModel(id = 2)
}
coEvery { messageRepository.getAll(any(), any(), any()) } returns listOf(fakeMessage)
val res = sut.getUnreadMessages()
assertEquals(1, res)
coVerify {
messageRepository.getAll(auth = "fake-token", page = 1, limit = any())
}
}
}