From 9bda2cab4bd250bff32f4b5104d7f7b4a5e2c21d Mon Sep 17 00:00:00 2001 From: Mohamed Metwalli <mohamed.metwalli@sap.com> Date: Tue, 12 Jan 2021 13:54:43 +0100 Subject: [PATCH] Add contact dairy overview screenshot test --- .../ContactDiaryOnboardingFragmentTest.kt | 12 +++ .../ContactDiaryOverviewFragmentTest.kt | 98 +++++++++++++++++++ .../FragmentTestModuleRegistrar.kt | 4 +- .../java/testhelpers/TestExtensions.kt | 2 + 4 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt index 940579651..497cde8da 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt @@ -12,8 +12,12 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import testhelpers.BaseUITest +import testhelpers.SCREENSHOT_DELAY_TIME +import testhelpers.Screenshot import testhelpers.SystemUIDemoModeRule import testhelpers.launchFragment2 +import testhelpers.launchFragmentInContainer2 +import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.locale.LocaleTestRule @RunWith(AndroidJUnit4::class) @@ -46,6 +50,14 @@ class ContactDiaryOnboardingFragmentTest : BaseUITest() { fun launch_fragment() { launchFragment2<ContactDiaryOnboardingFragment>() } + + @Screenshot + @Test + fun capture_screenshot() { + launchFragmentInContainer2<ContactDiaryOnboardingFragment>() + Thread.sleep(SCREENSHOT_DELAY_TIME) + Screengrab.screenshot(ContactDiaryOnboardingFragment::class.simpleName) + } } @Module diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt new file mode 100644 index 000000000..e7862b180 --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOverviewFragmentTest.kt @@ -0,0 +1,98 @@ +package de.rki.coronawarnapp.ui.contactdiary + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.Module +import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.contactdiary.storage.repo.ContactDiaryRepository +import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewFragment +import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewViewModel +import de.rki.coronawarnapp.contactdiary.ui.overview.adapter.ListItem +import de.rki.coronawarnapp.task.TaskController +import io.mockk.MockKAnnotations +import io.mockk.every +import io.mockk.impl.annotations.MockK +import io.mockk.spyk +import org.joda.time.LocalDate +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_DELAY_TIME +import testhelpers.Screenshot +import testhelpers.SystemUIDemoModeRule +import testhelpers.TestDispatcherProvider +import testhelpers.launchFragment2 +import testhelpers.launchFragmentInContainer2 +import tools.fastlane.screengrab.Screengrab +import tools.fastlane.screengrab.locale.LocaleTestRule + +@RunWith(AndroidJUnit4::class) +class ContactDiaryOverviewFragmentTest : BaseUITest() { + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val systemUIDemoModeRule = SystemUIDemoModeRule() + + @MockK lateinit var taskController: TaskController + @MockK lateinit var contactDiaryRepository: ContactDiaryRepository + + private lateinit var viewModel: ContactDiaryOverviewViewModel + + @Before + fun setup() { + MockKAnnotations.init(this, relaxed = true) + viewModel = spyk( + ContactDiaryOverviewViewModel( + taskController = taskController, + dispatcherProvider = TestDispatcherProvider, + contactDiaryRepository = contactDiaryRepository + ) + ) + + setupMockViewModel( + object : ContactDiaryOverviewViewModel.Factory { + override fun create(): ContactDiaryOverviewViewModel = viewModel + } + ) + } + + @After + fun teardown() { + clearAllViewModels() + } + + @Test + fun launch_fragment() { + launchFragment2<ContactDiaryOverviewFragment>() + } + + @Screenshot + @Test + fun capture_screenshot() { + every { viewModel.listItems } returns itemLiveData() + launchFragmentInContainer2<ContactDiaryOverviewFragment>() + Thread.sleep(SCREENSHOT_DELAY_TIME) + Screengrab.screenshot(ContactDiaryOverviewFragment::class.simpleName) + } + + private fun itemLiveData(): LiveData<List<ListItem>> = + MutableLiveData( + (0 until ContactDiaryOverviewViewModel.DAY_COUNT) + .map { LocalDate.now().minusDays(it) } + .map { + ListItem(it) + } + ) +} + +@Module +abstract class ContactDiaryOverviewFragmentTestModule { + @ContributesAndroidInjector + abstract fun contactContactDiaryOverviewFragment(): ContactDiaryOverviewFragment +} diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt index 24abcde42..89eb3f85a 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt @@ -2,6 +2,7 @@ package testhelpers import dagger.Module import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryOnboardingFragmentTestModule +import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryOverviewFragmentTestModule import de.rki.coronawarnapp.ui.main.home.HomeFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingDeltaInteroperabilityFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingFragmentTestModule @@ -36,7 +37,8 @@ import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule SubmissionContactTestModule::class, SubmissionQRScanFragmentModule::class, // Contact Diary - ContactDiaryOnboardingFragmentTestModule::class + ContactDiaryOnboardingFragmentTestModule::class, + ContactDiaryOverviewFragmentTestModule::class ] ) class FragmentTestModuleRegistrar diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt index 4ed236e74..e9a13544b 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt @@ -7,6 +7,8 @@ import androidx.fragment.app.FragmentFactory import androidx.fragment.app.testing.FragmentScenario import de.rki.coronawarnapp.R +const val SCREENSHOT_DELAY_TIME = 2000L + /** * Launches Fragment in Activity root container. * Same as [androidx.fragment.app.testing.launchFragmentInContainer] except that it defaults -- GitLab