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 9405796513e6c152541a0b30c3f45f42e4dd8d2c..497cde8da62349162e9e07cba441bef872664627 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 0000000000000000000000000000000000000000..e7862b180d4ee86f7574610aec670acbd2f08f3b --- /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 24abcde429ee4dec6ce63fafaa816c1a8ccc8874..89eb3f85a2d425fcf8453a7495904a93d3e2e1a6 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 4ed236e7498ba989071f881aa568156aa99dc8fa..e9a13544b4af4a590949d6b62c88a6fc9b13c5b6 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