From 3e0dba3a09f560579d3530d5e8f8e6b009ed3b4f Mon Sep 17 00:00:00 2001
From: Mohamed Metwalli <mohamed.metwalli@sap.com>
Date: Tue, 5 Jan 2021 17:28:58 +0100
Subject: [PATCH] Add screenshot test  in  home screen

---
 .../ui/main/home/HomeFragmentTest.kt          | 71 ++++++++++++++++---
 .../OnboardingTracingFragmentTest.kt          |  5 ++
 2 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
index bf2b84857..c8d5e4403 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt
@@ -6,42 +6,81 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
 import dagger.Module
 import dagger.android.ContributesAndroidInjector
 import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.appconfig.AppConfigProvider
+import de.rki.coronawarnapp.main.CWASettings
+import de.rki.coronawarnapp.notification.TestResultNotificationService
 import de.rki.coronawarnapp.risk.RiskState
+import de.rki.coronawarnapp.storage.SubmissionRepository
+import de.rki.coronawarnapp.storage.TracingRepository
 import de.rki.coronawarnapp.submission.ui.homecards.NoTest
+import de.rki.coronawarnapp.submission.ui.homecards.SubmissionStateProvider
+import de.rki.coronawarnapp.submission.ui.homecards.TestUnregisteredCard
+import de.rki.coronawarnapp.tracing.GeneralTracingStatus
 import de.rki.coronawarnapp.tracing.states.LowRisk
+import de.rki.coronawarnapp.tracing.states.TracingStateProvider
 import de.rki.coronawarnapp.tracing.ui.homecards.LowRiskCard
 import de.rki.coronawarnapp.tracing.ui.statusbar.TracingHeaderState
 import de.rki.coronawarnapp.ui.main.home.items.DiaryCard
 import de.rki.coronawarnapp.ui.main.home.items.FAQCard
-import de.rki.coronawarnapp.ui.main.home.items.HomeItem
+import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool
+import de.rki.coronawarnapp.util.ui.SingleLiveEvent
 import io.mockk.MockKAnnotations
 import io.mockk.Runs
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
 import io.mockk.just
-import io.mockk.mockk
+import io.mockk.spyk
 import io.mockk.verify
 import org.joda.time.Instant
 import org.junit.After
 import org.junit.Before
+import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import testhelpers.BaseUITest
 import testhelpers.Screenshot
+import testhelpers.SystemUIDemoModeRule
+import testhelpers.TestDispatcherProvider
 import testhelpers.launchFragmentInContainer2
+import tools.fastlane.screengrab.Screengrab
+import tools.fastlane.screengrab.locale.LocaleTestRule
 
 @RunWith(AndroidJUnit4::class)
 class HomeFragmentTest : BaseUITest() {
 
-    @MockK lateinit var viewModel: HomeFragmentViewModel
+    @MockK lateinit var errorResetTool: EncryptionErrorResetTool
+    @MockK lateinit var tracingStatus: GeneralTracingStatus
+    @MockK lateinit var tracingStateProviderFactory: TracingStateProvider.Factory
+    @MockK lateinit var submissionStateProvider: SubmissionStateProvider
+    @MockK lateinit var tracingRepository: TracingRepository
+    @MockK lateinit var testResultNotificationService: TestResultNotificationService
+    @MockK lateinit var submissionRepository: SubmissionRepository
+    @MockK lateinit var cwaSettings: CWASettings
+    @MockK lateinit var appConfigProvider: AppConfigProvider
+
+    private lateinit var viewModel: HomeFragmentViewModel
+
+    @Rule
+    @JvmField
+    val localeTestRule = LocaleTestRule()
+
+    @get:Rule
+    val systemUIDemoModeRule = SystemUIDemoModeRule()
 
     @Before
     fun setup() {
         MockKAnnotations.init(this, relaxed = true)
 
-        every { viewModel.tracingHeaderState } returns MutableLiveData()
-        every { viewModel.homeItems } returns MutableLiveData(emptyList())
-        every { viewModel.refreshRequiredData() } just Runs
+        viewModel = homeFragmentViewModelSpy()
+
+        with(viewModel) {
+            every { tracingHeaderState } returns MutableLiveData()
+            every { homeItems } returns MutableLiveData(emptyList())
+            every { refreshRequiredData() } just Runs
+            every { popupEvents } returns SingleLiveEvent()
+            every { showLoweredRiskLevelDialog } returns MutableLiveData()
+            every { observeTestResultToSchedulePositiveTestResultReminder() } just Runs
+        }
 
         setupMockViewModel(object : HomeFragmentViewModel.Factory {
             override fun create(): HomeFragmentViewModel = viewModel
@@ -80,6 +119,7 @@ class HomeFragmentTest : BaseUITest() {
         val homeItems = MutableLiveData(
             listOf(
                 lowRiskItem,
+                TestUnregisteredCard.Item(NoTest, onClickAction = {}),
                 DiaryCard.Item(onClickAction = { }),
                 FAQCard.Item(onClickAction = { })
             )
@@ -88,9 +128,24 @@ class HomeFragmentTest : BaseUITest() {
         every { viewModel.tracingHeaderState } returns headerState
         every { viewModel.homeItems } returns homeItems
         launchFragmentInContainer2<HomeFragment>()
-
-        Thread.sleep(5000)
+        Thread.sleep(1000)
+        Screengrab.screenshot(HomeFragment::class.simpleName)
     }
+
+    private fun homeFragmentViewModelSpy() = spyk(
+        HomeFragmentViewModel(
+            dispatcherProvider = TestDispatcherProvider,
+            errorResetTool = errorResetTool,
+            tracingRepository = tracingRepository,
+            tracingStateProviderFactory = tracingStateProviderFactory,
+            testResultNotificationService = testResultNotificationService,
+            appConfigProvider = appConfigProvider,
+            tracingStatus = tracingStatus,
+            submissionRepository = submissionRepository,
+            submissionStateProvider = submissionStateProvider,
+            cwaSettings = cwaSettings
+        )
+    )
 }
 
 @Module
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
index fe0c93bf5..8f322e28d 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentTest.kt
@@ -9,14 +9,18 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
 import dagger.Module
 import dagger.android.ContributesAndroidInjector
 import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.appconfig.AppConfigProvider
 import de.rki.coronawarnapp.nearby.TracingPermissionHelper
 import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
 import io.mockk.MockKAnnotations
 import io.mockk.Runs
+import io.mockk.coEvery
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
 import io.mockk.just
+import io.mockk.mockk
 import io.mockk.spyk
+import kotlinx.coroutines.flow.flowOf
 import org.junit.After
 import org.junit.Before
 import org.junit.Rule
@@ -56,6 +60,7 @@ class OnboardingTracingFragmentTest : BaseUITest() {
         )
 
         every { viewModelSpy.resetTracing() } just Runs
+        every { interopRepo.countryList } returns flowOf()
 
         setupMockViewModel(object : OnboardingTracingFragmentViewModel.Factory {
             override fun create(): OnboardingTracingFragmentViewModel = viewModelSpy
-- 
GitLab