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 bf2b84857b2aa0189e14af1188ad121d48382b3b..c8d5e4403f488eeb54b5f34f4f765110652c70cb 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 fe0c93bf5a7eea060e658b66c1f67af0d6d45154..8f322e28de6afe6a283115220e96057337f59451 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