ConversationsRepo unit tests use standard flow API

- Remove turbine library

MAILAND-1647
This commit is contained in:
Marino Meneghel 2021-04-20 15:30:34 +02:00
parent 7cecbafbaa
commit b14584a7fd
4 changed files with 37 additions and 41 deletions

View File

@ -351,10 +351,7 @@ dependencies {
`butterknife-compiler`
)
testImplementation(
project(Module.testAndroid),
`turbine`
)
testImplementation(project(Module.testAndroid))
androidTestUtil(`orchestrator`)
androidTestImplementation(
project(Module.testAndroidInstrumented),

View File

@ -19,7 +19,6 @@
package ch.protonmail.android.mailbox.data
import app.cash.turbine.test
import ch.protonmail.android.api.ProtonMailApiManager
import ch.protonmail.android.api.models.MessageRecipient
import ch.protonmail.android.core.Constants
@ -42,6 +41,8 @@ import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runBlockingTest
import me.proton.core.domain.arch.DataResult
@ -205,21 +206,21 @@ class ConversationsRepositoryImplTest : CoroutinesTest, ArchTest {
coEvery { api.fetchConversations(any(), testUserId) } returns conversationsRemote
// when
conversationsRepository.getConversations(parameters, testUserId).test {
// Then
val actualLocalItems = expectItem() as DataResult.Success
assertEquals(ResponseSource.Local, actualLocalItems.source)
val result = conversationsRepository.getConversations(parameters, testUserId).take(3).toList()
val actualProcessingResult = expectItem() as DataResult.Processing
assertEquals(ResponseSource.Remote, actualProcessingResult.source)
// Then
val actualLocalItems = result[0] as DataResult.Success
assertEquals(ResponseSource.Local, actualLocalItems.source)
val actualRemoteItems = expectItem() as DataResult.Success
assertEquals(ResponseSource.Remote, actualRemoteItems.source)
val actualProcessingResult = result[1] as DataResult.Processing
assertEquals(ResponseSource.Remote, actualProcessingResult.source)
val expectedConversations = conversationsRemote.conversationResponse.toListLocal(testUserId.s)
coVerify { api.fetchConversations(parameters, testUserId) }
coVerify { conversationDao.insertOrUpdate(*expectedConversations.toTypedArray()) }
}
val actualRemoteItems = result[2] as DataResult.Success
assertEquals(ResponseSource.Remote, actualRemoteItems.source)
val expectedConversations = conversationsRemote.conversationResponse.toListLocal(testUserId.s)
coVerify { api.fetchConversations(parameters, testUserId) }
coVerify { conversationDao.insertOrUpdate(*expectedConversations.toTypedArray()) }
}
@Test
@ -259,31 +260,31 @@ class ConversationsRepositoryImplTest : CoroutinesTest, ArchTest {
coEvery { api.fetchConversations(any(), testUserId) } throws IOException("Api call failed")
// when
conversationsRepository.getConversations(parameters, testUserId).test {
// Then
val actualLocalItems = expectItem() as DataResult.Success
assertEquals(ResponseSource.Local, actualLocalItems.source)
val expectedLocalConversations = listOf(
Conversation(
"conversationId234423",
"subject28348",
listOf(Correspondent("sender", "sender@pm.me")),
listOf(Correspondent("recipient", "recipient@pm.ch")),
3,
1,
4,
0,
listOf(LabelContext("labelId123", 1, 0, 0, 0, 0))
)
val result = conversationsRepository.getConversations(parameters, testUserId).take(3).toList()
// Then
val actualLocalItems = result[0] as DataResult.Success
assertEquals(ResponseSource.Local, actualLocalItems.source)
val expectedLocalConversations = listOf(
Conversation(
"conversationId234423",
"subject28348",
listOf(Correspondent("sender", "sender@pm.me")),
listOf(Correspondent("recipient", "recipient@pm.ch")),
3,
1,
4,
0,
listOf(LabelContext("labelId123", 1, 0, 0, 0, 0))
)
assertEquals(expectedLocalConversations, actualLocalItems.value)
)
assertEquals(expectedLocalConversations, actualLocalItems.value)
val actualProcessingResult = expectItem() as DataResult.Processing
assertEquals(ResponseSource.Remote, actualProcessingResult.source)
val actualProcessingResult = result[1] as DataResult.Processing
assertEquals(ResponseSource.Remote, actualProcessingResult.source)
val actualRemoteItems = expectItem() as DataResult.Error
assertEquals(ResponseSource.Remote, actualRemoteItems.source)
}
val actualRemoteItems = result[2] as DataResult.Error
assertEquals(ResponseSource.Remote, actualRemoteItems.source)
}
private fun getConversation(

View File

@ -132,5 +132,4 @@ val DependencyHandler.`orchestrator` get() = androidx("test", module = "orchest
val DependencyHandler.`browserstack-gradle-plugin` get() = dependency("gradle.plugin.com.browserstack.gradle", module = "browserstack-gradle-plugin") version `browserstack-plugin version`
val DependencyHandler.`uiautomator` get() = androidx("test.uiautomator", module = "uiautomator") version `uiautomator version`
val DependencyHandler.`android-activation` get() = dependency("com.sun.mail", module = "android-activation") version `sun-mail-android version`
val DependencyHandler.`turbine` get() = dependency("app.cash.turbine", module = "turbine") version `turbine version`
// endregion

View File

@ -97,7 +97,6 @@ const val `json-simple version` = "1.1.1" // Released: Mar
const val `browserstack-plugin version` = "3.0.1" // Released: Jun 10, 2020
const val `uiautomator version` = "2.2.0" // Released: Oct 25, 2018
const val `sun-mail-android version` = "1.5.5" // Released: Mar 06, 2020
const val `turbine version` = "0.4.1" //
// Android
const val `android-biometric version` = "1.0.1" // Released: Jan 23, 2020