Isolate AuthTest to navigation scope and inject fake user storage

This commit is contained in:
Alex Gabor 2022-04-01 16:17:25 +03:00
parent d9725e31e6
commit 586c811e10
2 changed files with 13 additions and 7 deletions

View file

@ -1,9 +1,13 @@
package org.fnives.test.showcase.ui package org.fnives.test.showcase.ui
import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import org.fnives.test.showcase.R import org.fnives.test.showcase.R
import org.fnives.test.showcase.compose.ComposeActivity import org.fnives.test.showcase.compose.ComposeActivity
import org.fnives.test.showcase.compose.screen.AppNavigation
import org.fnives.test.showcase.core.integration.fake.FakeUserDataLocalStorage
import org.fnives.test.showcase.core.login.IsUserLoggedInUseCase
import org.fnives.test.showcase.network.mockserver.scenario.auth.AuthScenario import org.fnives.test.showcase.network.mockserver.scenario.auth.AuthScenario
import org.fnives.test.showcase.testutils.MockServerScenarioSetupResetingTestRule import org.fnives.test.showcase.testutils.MockServerScenarioSetupResetingTestRule
import org.fnives.test.showcase.testutils.idling.ComposeMainDispatcherTestRule import org.fnives.test.showcase.testutils.idling.ComposeMainDispatcherTestRule
@ -36,6 +40,9 @@ class AuthComposeInstrumentedTest : KoinTest {
@Before @Before
fun setup() { fun setup() {
composeTestRule.setContent {
AppNavigation(isUserLogeInUseCase = IsUserLoggedInUseCase(FakeUserDataLocalStorage()))
}
robot = ComposeLoginRobot(composeTestRule) robot = ComposeLoginRobot(composeTestRule)
navigationRobot = ComposeNavigationRobot(composeTestRule) navigationRobot = ComposeNavigationRobot(composeTestRule)
} }
@ -46,7 +53,7 @@ class AuthComposeInstrumentedTest : KoinTest {
mockServerScenarioSetup.setScenario( mockServerScenarioSetup.setScenario(
AuthScenario.Success(password = "alma", username = "banan") AuthScenario.Success(password = "alma", username = "banan")
) )
composeTestRule.mainClock.advanceTimeBy(500L)
composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() } composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() }
navigationRobot.assertAuthScreen() navigationRobot.assertAuthScreen()
robot.setPassword("alma") robot.setPassword("alma")
@ -67,7 +74,7 @@ class AuthComposeInstrumentedTest : KoinTest {
/** GIVEN empty password and username WHEN signIn THEN error password is shown */ /** GIVEN empty password and username WHEN signIn THEN error password is shown */
@Test @Test
fun emptyPasswordShowsProperErrorMessage() { fun emptyPasswordShowsProperErrorMessage() {
composeTestRule.mainClock.advanceTimeBy(500L)
composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() } composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() }
navigationRobot.assertAuthScreen() navigationRobot.assertAuthScreen()
@ -84,7 +91,7 @@ class AuthComposeInstrumentedTest : KoinTest {
/** GIVEN password and empty username WHEN signIn THEN error username is shown */ /** GIVEN password and empty username WHEN signIn THEN error username is shown */
@Test @Test
fun emptyUserNameShowsProperErrorMessage() { fun emptyUserNameShowsProperErrorMessage() {
composeTestRule.mainClock.advanceTimeBy(500L)
composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() } composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() }
navigationRobot.assertAuthScreen() navigationRobot.assertAuthScreen()
@ -105,7 +112,7 @@ class AuthComposeInstrumentedTest : KoinTest {
mockServerScenarioSetup.setScenario( mockServerScenarioSetup.setScenario(
AuthScenario.InvalidCredentials(password = "alma", username = "banan") AuthScenario.InvalidCredentials(password = "alma", username = "banan")
) )
composeTestRule.mainClock.advanceTimeBy(500L)
composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() } composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() }
navigationRobot.assertAuthScreen() navigationRobot.assertAuthScreen()
robot.setUsername("alma") robot.setUsername("alma")
@ -131,7 +138,7 @@ class AuthComposeInstrumentedTest : KoinTest {
mockServerScenarioSetup.setScenario( mockServerScenarioSetup.setScenario(
AuthScenario.GenericError(username = "alma", password = "banan") AuthScenario.GenericError(username = "alma", password = "banan")
) )
composeTestRule.mainClock.advanceTimeBy(500L)
composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() } composeTestRule.mainClock.advanceTimeUntil { anyResourceIdling() }
navigationRobot.assertAuthScreen() navigationRobot.assertAuthScreen()
robot.setUsername("alma") robot.setUsername("alma")

View file

@ -19,10 +19,9 @@ import org.fnives.test.showcase.core.login.IsUserLoggedInUseCase
import org.koin.androidx.compose.get import org.koin.androidx.compose.get
@Composable @Composable
fun AppNavigation() { fun AppNavigation(isUserLogeInUseCase: IsUserLoggedInUseCase = get()) {
val navController = rememberNavController() val navController = rememberNavController()
val isUserLogeInUseCase = get<IsUserLoggedInUseCase>()
LaunchedEffect(isUserLogeInUseCase) { LaunchedEffect(isUserLogeInUseCase) {
delay(500) delay(500)
navController.navigate(if (isUserLogeInUseCase.invoke()) "Home" else "Auth") navController.navigate(if (isUserLogeInUseCase.invoke()) "Home" else "Auth")