From 250850cf9b1138c75b7ccd013a822d35b32bc33e Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 27 Jul 2023 20:31:42 +0100 Subject: [PATCH 1/5] Remove hardcoded topic names in `NavigationTest.kt` --- .../apps/nowinandroid/ui/NavigationTest.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 036a2955c..0cc8f4d4f 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -33,13 +33,17 @@ import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R +import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest +import kotlinx.coroutines.test.runTest +import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import javax.inject.Inject import kotlin.properties.ReadOnlyProperty import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR @@ -78,6 +82,9 @@ class NavigationTest { @get:Rule(order = 3) val composeTestRule = createAndroidComposeRule() + @Inject + lateinit var datasource: FakeNiaNetworkDataSource + private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) = ReadOnlyProperty { _, _ -> activity.getString(resId) } @@ -92,6 +99,9 @@ class NavigationTest { private val brand by composeTestRule.stringResource(SettingsR.string.brand_android) private val ok by composeTestRule.stringResource(SettingsR.string.dismiss_dialog_button_text) + @Before + fun setup() = hiltRule.inject() + @Test fun firstScreen_isForYou() { composeTestRule.apply { @@ -251,11 +261,11 @@ class NavigationTest { } @Test - fun navigationBar_multipleBackStackInterests() { + fun navigationBar_multipleBackStackInterests() = runTest { + suspend fun randomTopicName() = datasource.getTopics(ids = null).random().name composeTestRule.apply { onNodeWithText(interests).performClick() - // TODO: Grab string from fake data - onNodeWithText("Android Studio & Tools").performClick() + onNodeWithText(randomTopicName()).performClick() // Switch tab onNodeWithText(forYou).performClick() @@ -264,7 +274,7 @@ class NavigationTest { onNodeWithText(interests).performClick() // Verify we're not in the list of interests - onNodeWithText("Android Auto").assertDoesNotExist() // TODO: Grab string from fake data + onNodeWithText(randomTopicName()).assertDoesNotExist() } } } From bf5fdb4cf8f2b41de690d94623cb21a12863d6d9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 27 Jul 2023 20:36:42 +0100 Subject: [PATCH 2/5] Update NavigationTest.kt --- .../samples/apps/nowinandroid/ui/NavigationTest.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 0cc8f4d4f..a5241a9db 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -33,7 +33,7 @@ import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule @@ -83,7 +83,7 @@ class NavigationTest { val composeTestRule = createAndroidComposeRule() @Inject - lateinit var datasource: FakeNiaNetworkDataSource + lateinit var datasource: NiaNetworkDataSource private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) = ReadOnlyProperty { _, _ -> activity.getString(resId) } @@ -262,10 +262,10 @@ class NavigationTest { @Test fun navigationBar_multipleBackStackInterests() = runTest { - suspend fun randomTopicName() = datasource.getTopics(ids = null).random().name + val topics = datasource.getTopics(ids = null) composeTestRule.apply { onNodeWithText(interests).performClick() - onNodeWithText(randomTopicName()).performClick() + onNodeWithText(topics.random().name).performClick() // Switch tab onNodeWithText(forYou).performClick() @@ -274,7 +274,7 @@ class NavigationTest { onNodeWithText(interests).performClick() // Verify we're not in the list of interests - onNodeWithText(randomTopicName()).assertDoesNotExist() + onNodeWithText(topics.random().name).assertDoesNotExist() } } } From 0a1f333fc64ec75b8a794d587a7c9764f148d8bd Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 27 Jul 2023 20:58:30 +0100 Subject: [PATCH 3/5] Update NavigationTest.kt --- .../samples/apps/nowinandroid/ui/NavigationTest.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index a5241a9db..3d14eedd6 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -27,8 +27,10 @@ import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performScrollToNode import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity @@ -262,10 +264,13 @@ class NavigationTest { @Test fun navigationBar_multipleBackStackInterests() = runTest { - val topics = datasource.getTopics(ids = null) composeTestRule.apply { onNodeWithText(interests).performClick() - onNodeWithText(topics.random().name).performClick() + + // Select a random topic + val topic = datasource.getTopics().random().name + onNodeWithTag("interests:topics").performScrollToNode(hasText(topic)) + onNodeWithText(topic).performClick() // Switch tab onNodeWithText(forYou).performClick() @@ -274,7 +279,7 @@ class NavigationTest { onNodeWithText(interests).performClick() // Verify we're not in the list of interests - onNodeWithText(topics.random().name).assertDoesNotExist() + onNodeWithTag("interests:topics").assertDoesNotExist() } } } From 57f37009800ea3baf52d80145be8db7e55688e74 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 28 Jul 2023 18:16:02 +0200 Subject: [PATCH 4/5] Select last topic by name instead of a random one --- .../google/samples/apps/nowinandroid/ui/NavigationTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 3d14eedd6..1979624e9 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -36,6 +36,7 @@ import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule @@ -267,8 +268,8 @@ class NavigationTest { composeTestRule.apply { onNodeWithText(interests).performClick() - // Select a random topic - val topic = datasource.getTopics().random().name + // Select the last topic + val topic = datasource.getTopics().sortedBy(NetworkTopic::name).last().name onNodeWithTag("interests:topics").performScrollToNode(hasText(topic)) onNodeWithText(topic).performClick() From d8a6d0de13575e9385e08079a444a79c58a6389b Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 28 Jul 2023 18:21:04 +0200 Subject: [PATCH 5/5] Replace NiaNetworkDataSource with TopicsRepository to be closer to the actual source of data used by the instrumented app. --- .../samples/apps/nowinandroid/ui/NavigationTest.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 1979624e9..e1eab4796 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -35,12 +35,13 @@ import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R -import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest +import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule @@ -86,7 +87,7 @@ class NavigationTest { val composeTestRule = createAndroidComposeRule() @Inject - lateinit var datasource: NiaNetworkDataSource + lateinit var topicsRepository: TopicsRepository private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) = ReadOnlyProperty { _, _ -> activity.getString(resId) } @@ -269,7 +270,7 @@ class NavigationTest { onNodeWithText(interests).performClick() // Select the last topic - val topic = datasource.getTopics().sortedBy(NetworkTopic::name).last().name + val topic = topicsRepository.getTopics().first().sortedBy(Topic::name).last().name onNodeWithTag("interests:topics").performScrollToNode(hasText(topic)) onNodeWithText(topic).performClick()