add test for favorite users

This commit is contained in:
Carlos Martinez
2020-02-06 14:50:52 -03:00
parent b720fb39e6
commit 5ed203c3b5

View File

@@ -3,6 +3,7 @@ package com.hako.userlist.feature
import androidx.fragment.app.testing.launchFragmentInContainer import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import com.hako.base.domain.database.dao.UserDao import com.hako.base.domain.database.dao.UserDao
import com.hako.base.domain.database.entities.UserEntity
import com.hako.testing.isTextDisplayed import com.hako.testing.isTextDisplayed
import com.hako.userlist.domain.datasource.UserlistRemoteApi import com.hako.userlist.domain.datasource.UserlistRemoteApi
import com.hako.userlist.domain.usecase.GetFavoriteUsers import com.hako.userlist.domain.usecase.GetFavoriteUsers
@@ -11,11 +12,13 @@ import com.hako.userlist.domain.usecase.SetFavoriteStatus
import com.hako.userlist.model.User import com.hako.userlist.model.User
import com.hako.userlist.model.toUserEntity import com.hako.userlist.model.toUserEntity
import com.hako.userlist.viewmodel.UserlistViewmodel import com.hako.userlist.viewmodel.UserlistViewmodel
import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.context.loadKoinModules import org.koin.core.context.loadKoinModules
import org.koin.core.context.startKoin import org.koin.core.context.startKoin
import org.koin.core.context.stopKoin
import org.koin.dsl.module import org.koin.dsl.module
class UserlistFragmentTest { class UserlistFragmentTest {
@@ -33,15 +36,29 @@ class UserlistFragmentTest {
} }
} }
@After
fun killKoin() {
stopKoin()
}
@Test @Test
fun shouldShowUserlist_withAllUsers() { fun shouldShowUserlist_withAllUsers() {
userlist { userlist {
initialState() withTwoBasicUsers()
} should { } should {
showTwoBasicUsers() showTwoBasicUsers()
} }
} }
@Test
fun shouldShowOnlyFavoriteUserlist_withAllUsers() {
userlist {
withTwoBasicOneFavoriteUsers()
} should {
showOnlyOneFavorite()
}
}
private fun userlist(func: UserlistRobot.() -> Unit) = private fun userlist(func: UserlistRobot.() -> Unit) =
UserlistRobot().apply { UserlistRobot().apply {
func() func()
@@ -50,7 +67,7 @@ class UserlistFragmentTest {
class UserlistRobot { class UserlistRobot {
fun initialState() { fun withTwoBasicUsers() {
loadKoinModules( loadKoinModules(
module { module {
factory<UserDao> { MockUserDao(loadTwoBasicUsers().map { it.toUserEntity() }) } factory<UserDao> { MockUserDao(loadTwoBasicUsers().map { it.toUserEntity() }) }
@@ -60,6 +77,16 @@ class UserlistRobot {
launchFragmentInContainer<UserlistFragment>() launchFragmentInContainer<UserlistFragment>()
} }
fun withTwoBasicOneFavoriteUsers() {
loadKoinModules(
module {
factory<UserDao> { MockUserDao(loadTwoUsersOneFavorite()) }
factory<UserlistRemoteApi> { MockUserApi(loadTwoBasicUsers()) }
}
)
launchFragmentInContainer<FavoriteUserlistFragment>()
}
infix fun should(func: UserlistResult.() -> Unit) { infix fun should(func: UserlistResult.() -> Unit) {
UserlistResult().apply { func() } UserlistResult().apply { func() }
} }
@@ -82,6 +109,26 @@ class UserlistRobot {
"www.test2.com" "www.test2.com"
) )
) )
private fun loadTwoUsersOneFavorite() = listOf(
UserEntity(
1,
"Marian Arriaga",
"mariancita",
"test@gmail.com",
"+56873912",
"www.test.com",
true
),
UserEntity(
2,
"Carlos Martinez",
"carlitos",
"test2@gmail.com",
"+56873912",
"www.test2.com"
)
)
} }
class UserlistResult { class UserlistResult {
@@ -91,4 +138,9 @@ class UserlistResult {
"Carlos Martinez".isTextDisplayed() "Carlos Martinez".isTextDisplayed()
"carlitos".isTextDisplayed() "carlitos".isTextDisplayed()
} }
fun showOnlyOneFavorite() {
"Marian Arriaga".isTextDisplayed()
"mariancita".isTextDisplayed()
}
} }