diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..3df37557ffa03144ec3617943483189908d366a0 --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryDayFragmentTest.kt @@ -0,0 +1,127 @@ +package de.rki.coronawarnapp.ui.contactdiary + +import androidx.lifecycle.MutableLiveData +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.Module +import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.contactdiary.ui.day.ContactDiaryDayFragment +import de.rki.coronawarnapp.contactdiary.ui.day.ContactDiaryDayFragmentArgs +import de.rki.coronawarnapp.contactdiary.ui.day.ContactDiaryDayViewModel +import de.rki.coronawarnapp.contactdiary.ui.day.tabs.location.ContactDiaryLocationListFragment +import de.rki.coronawarnapp.contactdiary.ui.day.tabs.location.ContactDiaryLocationListViewModel +import de.rki.coronawarnapp.contactdiary.ui.day.tabs.person.ContactDiaryPersonListFragment +import de.rki.coronawarnapp.contactdiary.ui.day.tabs.person.ContactDiaryPersonListViewModel +import de.rki.coronawarnapp.contactdiary.util.toFormattedDay +import io.mockk.MockKAnnotations +import io.mockk.every +import io.mockk.impl.annotations.MockK +import org.joda.time.LocalDate +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.launchFragment2 +import testhelpers.launchFragmentInContainer2 +import tools.fastlane.screengrab.Screengrab +import tools.fastlane.screengrab.locale.LocaleTestRule +import tools.fastlane.screengrab.locale.LocaleUtil +import java.util.Locale + +@RunWith(AndroidJUnit4::class) +class ContactDiaryDayFragmentTest : BaseUITest() { + + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val systemUIDemoModeRule = SystemUIDemoModeRule() + + @MockK lateinit var viewModel: ContactDiaryDayViewModel + @MockK lateinit var personListViewModel: ContactDiaryPersonListViewModel + @MockK lateinit var locationListViewModel: ContactDiaryLocationListViewModel + + private val selectedDay = LocalDate.now() + .toFormattedDay(LocaleUtil.getTestLocale() ?: Locale.ENGLISH) + + private val fragmentArgs = ContactDiaryDayFragmentArgs(selectedDay = selectedDay).toBundle() + + @Before + fun setup() { + MockKAnnotations.init(this, relaxed = true) + every { viewModel.uiState } returns MutableLiveData( + ContactDiaryDayViewModel.UIState( + dayText = { selectedDay }, + dayTextContentDescription = { "Description" } + ) + ) + setupViewModels() + } + + @Test + fun launch_fragment() { + launchFragment2<ContactDiaryDayFragment>( + fragmentArgs = fragmentArgs, + themeResId = R.style.AppTheme_ContactDiary + ) + } + + @Screenshot + @Test + fun capture_screenshot() { + launchFragmentInContainer2<ContactDiaryDayFragment>( + fragmentArgs = fragmentArgs, + themeResId = R.style.AppTheme_ContactDiary + ) + Thread.sleep(10000) + Screengrab.screenshot(ContactDiaryDayFragment::class.simpleName) + } + + private fun setupViewModels() { + setupMockViewModel( + object : ContactDiaryDayViewModel.Factory { + override fun create(selectedDay: String): ContactDiaryDayViewModel { + return viewModel + } + } + ) + + setupMockViewModel( + object : ContactDiaryPersonListViewModel.Factory { + override fun create(selectedDay: String): ContactDiaryPersonListViewModel { + return personListViewModel + } + } + ) + + setupMockViewModel( + object : ContactDiaryLocationListViewModel.Factory { + override fun create(selectedDay: String): ContactDiaryLocationListViewModel { + return locationListViewModel + } + } + ) + } +} + +@Module +abstract class ContactDiaryDayFragmentTestModule { + @ContributesAndroidInjector + abstract fun contactDiaryDayFragment(): ContactDiaryDayFragment +} + +@Module +abstract class ContactDiaryPersonListFragmentTestModule { + @ContributesAndroidInjector + abstract fun contactDiaryPersonListFragment(): ContactDiaryPersonListFragment +} + +@Module +abstract class ContactDiaryLocationListFragmentTestModule { + @ContributesAndroidInjector + abstract fun contactDiaryLocationListFragment(): ContactDiaryLocationListFragment +} \ No newline at end of file diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt index 58b7ceeb6f0e44e358493088e861beb12b8b2d47..f6208bef109c31d2465b0fd59b742d928d9d5331 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt @@ -2,8 +2,10 @@ package testhelpers import dagger.Module import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryDayFragmentTestModule +import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryLocationListFragmentTestModule import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryOnboardingFragmentTestModule import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryOverviewFragmentTestModule +import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryPersonListFragmentTestModule import de.rki.coronawarnapp.ui.main.home.HomeFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingDeltaInteroperabilityFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingFragmentTestModule @@ -40,7 +42,9 @@ import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule // Contact Diary ContactDiaryOnboardingFragmentTestModule::class, ContactDiaryOverviewFragmentTestModule::class, - ContactDiaryDayFragmentTestModule::class + ContactDiaryDayFragmentTestModule::class, + ContactDiaryPersonListFragmentTestModule::class, + ContactDiaryLocationListFragmentTestModule::class ] ) class FragmentTestModuleRegistrar