Skip to content

Commit

Permalink
test: remove usage of uninstall modules (#981)
Browse files Browse the repository at this point in the history
* test: move the compose rule into the base test class

Move the compose test rule into the base test class so its always created. Also create a new mock
auth module for the AuthApi.

* test: add test modules for the api calls

* chore: downgrade mockk to 1.13.3

MockK after 1.13.3 seems to have an issue with mocking some interface classes, downgrade to 1.13.3
to fix this for now.
  • Loading branch information
Chesire committed Apr 30, 2023
1 parent 523e30a commit 62c3dae
Show file tree
Hide file tree
Showing 19 changed files with 128 additions and 88 deletions.
4 changes: 4 additions & 0 deletions app/src/androidTest/java/com/chesire/nekome/UITest.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.chesire.nekome

import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.core.app.ActivityScenario
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.adevinta.android.barista.rule.cleardata.ClearDatabaseRule
Expand Down Expand Up @@ -37,6 +38,9 @@ abstract class UITest {
@get:Rule
val clearPreferences = ClearPreferencesRule()

@get:Rule
val composeTestRule = createComposeRule()

@Inject
lateinit var authProvider: AuthProvider

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package com.chesire.nekome.features

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.core.preferences.flags.HomeScreenOptions
import com.chesire.nekome.robots.activity
import dagger.hilt.android.testing.HiltAndroidTest
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
class ActivityTests : UITest() {

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun overviewCanStartInAnimeView() {
runBlocking { applicationPreferences.updateDefaultHomeScreen(HomeScreenOptions.Anime) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,22 @@
package com.chesire.nekome.features.login

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.datasource.auth.remote.AuthApi
import com.chesire.nekome.datasource.auth.remote.AuthFailure
import com.chesire.nekome.injection.AuthModule
import com.chesire.nekome.robots.login.loginCredentials
import com.github.michaelbull.result.Err
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import io.mockk.coEvery
import io.mockk.mockk
import org.junit.Rule
import javax.inject.Inject
import org.junit.Test

@HiltAndroidTest
@UninstallModules(AuthModule::class)
class CredentialsTests : UITest() {

override val startLoggedIn = false

@BindValue
val authApi = mockk<AuthApi>()

@get:Rule
val composeTestRule = createComposeRule()
@Inject
lateinit var authApi: AuthApi

@Test
fun emptyUsernameShowsError() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,73 +1,62 @@
package com.chesire.nekome.features.login

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.datasource.auth.remote.AuthApi
import com.chesire.nekome.datasource.auth.remote.AuthDomain
import com.chesire.nekome.datasource.series.remote.SeriesApi
import com.chesire.nekome.datasource.user.remote.UserApi
import com.chesire.nekome.helpers.creation.createSeriesDomain
import com.chesire.nekome.helpers.creation.createUserDomain
import com.chesire.nekome.injection.AuthModule
import com.chesire.nekome.injection.LibraryModule
import com.chesire.nekome.injection.UserModule
import com.chesire.nekome.robots.activity
import com.chesire.nekome.robots.login.loginCredentials
import com.chesire.nekome.robots.login.loginSyncing
import com.github.michaelbull.result.Ok
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import io.mockk.coEvery
import io.mockk.mockk
import org.junit.Rule
import javax.inject.Inject
import org.junit.Before
import org.junit.Test

@HiltAndroidTest
@UninstallModules(
AuthModule::class,
LibraryModule::class,
UserModule::class
)
class LoginFlowTests : UITest() {

override val startLoggedIn = false

@BindValue
val authApi = mockk<AuthApi> {
@Inject
lateinit var authApi: AuthApi

@Inject
lateinit var seriesApi: SeriesApi

@Inject
lateinit var userApi: UserApi

@Before
fun setup() {
coEvery {
login("Username", "Password")
authApi.login("Username", "Password")
} coAnswers {
Ok(AuthDomain("accessToken", "refreshToken"))
}
}

@BindValue
val seriesApi = mockk<SeriesApi> {
coEvery {
retrieveAnime(any())
seriesApi.retrieveAnime(any())
} coAnswers {
Ok(listOf(createSeriesDomain()))
}
coEvery {
retrieveManga(any())
seriesApi.retrieveManga(any())
} coAnswers {
Ok(listOf(createSeriesDomain()))
}
}

@BindValue
val userApi = mockk<UserApi> {
coEvery {
getUserDetails()
userApi.getUserDetails()
} coAnswers {
Ok(createUserDomain())
}
}

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun navigateThroughLoginFlow() {
launchActivity()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,41 @@
package com.chesire.nekome.features.search

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.core.models.ErrorDomain
import com.chesire.nekome.datasource.search.remote.SearchApi
import com.chesire.nekome.injection.SearchModule
import com.chesire.nekome.robots.activity
import com.chesire.nekome.robots.search.host
import com.github.michaelbull.result.Err
import com.github.michaelbull.result.Ok
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import io.mockk.coEvery
import io.mockk.mockk
import org.junit.Rule
import javax.inject.Inject
import org.junit.Before
import org.junit.Test

private const val GENERIC_ERROR = "GENERIC_ERROR"
private const val NO_RESULTS_ERROR = "NO_RESULTS_ERROR"

@HiltAndroidTest
@UninstallModules(SearchModule::class)
class SearchTests : UITest() {

@BindValue
val searchApi = mockk<SearchApi> {
@Inject
lateinit var searchApi: SearchApi

@Before
fun setup() {
coEvery {
searchForAnime(GENERIC_ERROR)
searchApi.searchForAnime(GENERIC_ERROR)
} coAnswers {
Err(ErrorDomain.badRequest)
}
coEvery {
searchForAnime(NO_RESULTS_ERROR)
searchApi.searchForAnime(NO_RESULTS_ERROR)
} coAnswers {
Ok(listOf())
}
}

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun canReachSearch() {
launchActivity()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.chesire.nekome.features.series

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.core.flags.SeriesType
import com.chesire.nekome.core.flags.UserSeriesStatus
Expand All @@ -9,17 +8,13 @@ import com.chesire.nekome.robots.series.seriesList
import com.chesire.nekome.testing.createSeriesEntity
import dagger.hilt.android.testing.HiltAndroidTest
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
class FilterTests : UITest() {

private val seriesData = InitialFilterSeriesData()

@get:Rule
val composeTestRule = createComposeRule()

override fun setUp() {
super.setUp()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,26 @@
package com.chesire.nekome.features.series

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.core.flags.SeriesType
import com.chesire.nekome.core.flags.UserSeriesStatus
import com.chesire.nekome.core.models.ErrorDomain
import com.chesire.nekome.datasource.series.remote.SeriesApi
import com.chesire.nekome.helpers.creation.createSeriesDomain
import com.chesire.nekome.injection.LibraryModule
import com.chesire.nekome.robots.series.seriesList
import com.chesire.nekome.testing.createSeriesEntity
import com.github.michaelbull.result.Err
import com.github.michaelbull.result.Ok
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import io.mockk.coEvery
import io.mockk.mockk
import javax.inject.Inject
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
@UninstallModules(LibraryModule::class)
class SeriesListTests : UITest() {

@BindValue
val seriesApi = mockk<SeriesApi>()

@get:Rule
val composeTestRule = createComposeRule()
@Inject
lateinit var seriesApi: SeriesApi

@Test
fun canReachSeriesList() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.chesire.nekome.features.series

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.core.flags.SeriesType
import com.chesire.nekome.core.flags.UserSeriesStatus
Expand All @@ -9,17 +8,13 @@ import com.chesire.nekome.robots.series.seriesList
import com.chesire.nekome.testing.createSeriesEntity
import dagger.hilt.android.testing.HiltAndroidTest
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
class SortTests : UITest() {

private val seriesData = InitialSortSeriesData()

@get:Rule
val composeTestRule = createComposeRule()

override fun setUp() {
super.setUp()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
package com.chesire.nekome.features.settings

import androidx.compose.ui.test.junit4.createComposeRule
import com.chesire.nekome.UITest
import com.chesire.nekome.robots.activity
import com.chesire.nekome.robots.settings.config
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
class SettingsTests : UITest() {

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun canReachSettings() {
launchActivity()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.chesire.nekome.injection

import com.chesire.nekome.datasource.auth.remote.AuthApi
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.components.SingletonComponent
import dagger.hilt.testing.TestInstallIn
import io.mockk.mockk

@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [AuthModule::class]
)
class MockAuthModule {

@Provides
@Reusable
fun provideApi() = mockk<AuthApi>()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.chesire.nekome.injection

import com.chesire.nekome.datasource.series.remote.SeriesApi
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.components.SingletonComponent
import dagger.hilt.testing.TestInstallIn
import io.mockk.mockk

@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [LibraryModule::class]
)
class MockLibraryModule {

@Provides
@Reusable
fun provideApi() = mockk<SeriesApi>()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.chesire.nekome.injection

import com.chesire.nekome.datasource.search.remote.SearchApi
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.components.SingletonComponent
import dagger.hilt.testing.TestInstallIn
import io.mockk.mockk

@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [SearchModule::class]
)
class MockSearchModule {

@Provides
@Reusable
fun provideApi() = mockk<SearchApi>()
}
Loading

0 comments on commit 62c3dae

Please sign in to comment.