diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt index e0756d16d..85a95b796 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt @@ -28,6 +28,7 @@ import com.github.takahirom.roborazzi.RoborazziOptions import com.github.takahirom.roborazzi.RoborazziOptions.CompareOptions import com.github.takahirom.roborazzi.RoborazziOptions.RecordOptions import com.github.takahirom.roborazzi.captureRoboImage +import com.google.accompanist.testharness.TestHarness import org.robolectric.RuntimeEnvironment val DefaultRoborazziOptions = @@ -36,16 +37,17 @@ val DefaultRoborazziOptions = recordOptions = RecordOptions(resizeScale = 0.5), // Reduce the size of the PNGs ) +enum class DefaultTestDevices(val description: String, val spec: String) { + PHONE("phone", "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480"), + FOLDABLE("foldable", "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480"), + TABLET("tablet", "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480"), +} fun AndroidComposeTestRule, A>.captureMultiDevice( screenshotName: String, body: @Composable () -> Unit, ) { - listOf( - "phone" to "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480", - "foldable" to "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480", - "tablet" to "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480", - ).forEach { - this.captureForDevice(it.first, it.second, screenshotName, body) + DefaultTestDevices.values().forEach { + this.captureForDevice(it.description, it.spec, screenshotName, body = body) } } @@ -53,8 +55,9 @@ fun AndroidComposeTestRule, A>.c deviceName: String, deviceSpec: String, screenshotName: String, - body: @Composable () -> Unit, roborazziOptions: RoborazziOptions = DefaultRoborazziOptions, + darkMode: Boolean = false, + body: @Composable () -> Unit, ) { val (width, height, dpi) = extractSpecs(deviceSpec) @@ -65,7 +68,9 @@ fun AndroidComposeTestRule, A>.c CompositionLocalProvider( LocalInspectionMode provides true, ) { - body() + TestHarness(darkMode = darkMode) { + body() + } } } this.onRoot() diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt index 410619638..1c521d419 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt @@ -17,14 +17,19 @@ package com.google.samples.apps.nowinandroid.feature.foryou import androidx.activity.ComponentActivity +import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.createAndroidComposeRule +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultTestDevices +import com.google.samples.apps.nowinandroid.core.testing.util.captureForDevice import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiDevice import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Loading import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.NotShown +import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Shown import dagger.hilt.android.testing.HiltTestApplication import org.junit.Before import org.junit.Rule @@ -60,7 +65,7 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenPopulatedFeed() { + fun forYouScreenPopulatedFeed() { composeTestRule.captureMultiDevice("ForYouScreenPopulatedFeed") { NiaTheme { ForYouScreen( @@ -82,7 +87,7 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenLoading() { + fun forYouScreenLoading() { composeTestRule.captureMultiDevice("ForYouScreenLoading") { NiaTheme { ForYouScreen( @@ -102,16 +107,54 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenTopicSelection() { + fun forYouScreenTopicSelection() { composeTestRule.captureMultiDevice("ForYouScreenTopicSelection") { - NiaTheme { + ForYouScreenTopicSelection() + } + } + + @Test + fun forYouScreenTopicSelection_dark() { + composeTestRule.captureForDevice( + deviceName = "phone_dark", + deviceSpec = DefaultTestDevices.PHONE.spec, + screenshotName = "ForYouScreenTopicSelection", + darkMode = true, + ) { + ForYouScreenTopicSelection() + } + } + + @Test + fun forYouScreenPopulatedAndLoading() { + composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") { + ForYouScreenPopulatedAndLoading() + } + } + + @Test + fun forYouScreenPopulatedAndLoading_dark() { + composeTestRule.captureForDevice( + deviceName = "phone_dark", + deviceSpec = DefaultTestDevices.PHONE.spec, + screenshotName = "ForYouScreenPopulatedAndLoading", + darkMode = true, + ) { + ForYouScreenPopulatedAndLoading() + } + } + + @Composable + private fun ForYouScreenTopicSelection() { + NiaTheme { + NiaBackground { ForYouScreen( isSyncing = false, - onboardingUiState = OnboardingUiState.Shown( + onboardingUiState = Shown( topics = userNewsResources.flatMap { news -> news.followableTopics } .distinctBy { it.topic.id }, ), - feedState = NewsFeedUiState.Success( + feedState = Success( feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, @@ -126,24 +169,26 @@ class ForYouScreenScreenshotTests { } } - @Test - fun testForYouScreenPopulatedAndLoading() { - composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") { - NiaTheme { - ForYouScreen( - isSyncing = true, - onboardingUiState = OnboardingUiState.Loading, - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - deepLinkedUserNewsResource = null, - onDeepLinkOpened = {}, - ) + @Composable + private fun ForYouScreenPopulatedAndLoading() { + NiaTheme { + NiaBackground { + NiaTheme { + ForYouScreen( + isSyncing = true, + onboardingUiState = Loading, + feedState = Success( + feed = userNewsResources, + ), + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + deepLinkedUserNewsResource = null, + onDeepLinkOpened = {}, + ) + } } } } diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png index aa2c12203..a66604bc6 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png index de141fa02..579bc98a8 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png new file mode 100644 index 000000000..f013bb40a Binary files /dev/null and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png index 3fe5194d8..75d6bc066 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png index 95333c1d1..715889be5 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png index ab86a2301..0bbe04955 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png new file mode 100644 index 000000000..1ba8943ef Binary files /dev/null and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png index 292fc22f6..9a51764c5 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png differ