@@ -27,19 +27,27 @@ import androidx.compose.ui.test.junit4.AndroidComposeTestRule
2727import androidx.compose.ui.test.junit4.createAndroidComposeRule
2828import androidx.compose.ui.test.onAllNodesWithText
2929import androidx.compose.ui.test.onNodeWithContentDescription
30+ import androidx.compose.ui.test.onNodeWithTag
3031import androidx.compose.ui.test.onNodeWithText
3132import androidx.compose.ui.test.performClick
33+ import androidx.compose.ui.test.performScrollToNode
3234import androidx.test.espresso.Espresso
3335import androidx.test.espresso.NoActivityResumedException
3436import com.google.samples.apps.nowinandroid.MainActivity
3537import com.google.samples.apps.nowinandroid.R
38+ import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository
39+ import com.google.samples.apps.nowinandroid.core.model.data.Topic
3640import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule
3741import dagger.hilt.android.testing.BindValue
3842import dagger.hilt.android.testing.HiltAndroidRule
3943import dagger.hilt.android.testing.HiltAndroidTest
44+ import kotlinx.coroutines.flow.first
45+ import kotlinx.coroutines.test.runTest
46+ import org.junit.Before
4047import org.junit.Rule
4148import org.junit.Test
4249import org.junit.rules.TemporaryFolder
50+ import javax.inject.Inject
4351import kotlin.properties.ReadOnlyProperty
4452import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR
4553import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR
@@ -78,6 +86,9 @@ class NavigationTest {
7886 @get:Rule(order = 3 )
7987 val composeTestRule = createAndroidComposeRule<MainActivity >()
8088
89+ @Inject
90+ lateinit var topicsRepository: TopicsRepository
91+
8192 private fun AndroidComposeTestRule <* , * >.stringResource (@StringRes resId : Int ) =
8293 ReadOnlyProperty <Any ?, String > { _, _ -> activity.getString(resId) }
8394
@@ -92,6 +103,9 @@ class NavigationTest {
92103 private val brand by composeTestRule.stringResource(SettingsR .string.brand_android)
93104 private val ok by composeTestRule.stringResource(SettingsR .string.dismiss_dialog_button_text)
94105
106+ @Before
107+ fun setup () = hiltRule.inject()
108+
95109 @Test
96110 fun firstScreen_isForYou () {
97111 composeTestRule.apply {
@@ -251,11 +265,14 @@ class NavigationTest {
251265 }
252266
253267 @Test
254- fun navigationBar_multipleBackStackInterests () {
268+ fun navigationBar_multipleBackStackInterests () = runTest {
255269 composeTestRule.apply {
256270 onNodeWithText(interests).performClick()
257- // TODO: Grab string from fake data
258- onNodeWithText(" Android Studio & Tools" ).performClick()
271+
272+ // Select the last topic
273+ val topic = topicsRepository.getTopics().first().sortedBy(Topic ::name).last().name
274+ onNodeWithTag(" interests:topics" ).performScrollToNode(hasText(topic))
275+ onNodeWithText(topic).performClick()
259276
260277 // Switch tab
261278 onNodeWithText(forYou).performClick()
@@ -264,7 +281,7 @@ class NavigationTest {
264281 onNodeWithText(interests).performClick()
265282
266283 // Verify we're not in the list of interests
267- onNodeWithText( " Android Auto " ).assertDoesNotExist() // TODO: Grab string from fake data
284+ onNodeWithTag( " interests:topics " ).assertDoesNotExist()
268285 }
269286 }
270287}
0 commit comments