Isolate AuthTest to navigation scope and inject fake user storage
This commit is contained in:
parent
d9725e31e6
commit
586c811e10
2 changed files with 13 additions and 7 deletions
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue