From b83a912bbde72ce7f946133849edff4ae0b7c6a1 Mon Sep 17 00:00:00 2001 From: Mohamed Metwalli <mohamed.metwalli@sap.com> Date: Tue, 12 Jan 2021 12:41:55 +0100 Subject: [PATCH] Setup tests for contact diary onboarding --- .../ContactDiaryOnboardingFragmentTest.kt | 55 +++++++++++++++++++ .../FragmentTestModuleRegistrar.kt | 5 +- .../java/testhelpers/TestAndroidModule.kt | 16 ++++++ .../java/testhelpers/TestAppComponent.kt | 3 +- .../java/testhelpers/TestExtensions.kt | 11 ++++ 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt create mode 100644 Corona-Warn-App/src/androidTest/java/testhelpers/TestAndroidModule.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 new file mode 100644 index 000000000..940579651 --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/contactdiary/ContactDiaryOnboardingFragmentTest.kt @@ -0,0 +1,55 @@ +package de.rki.coronawarnapp.ui.contactdiary + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.Module +import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.contactdiary.ui.onboarding.ContactDiaryOnboardingFragment +import de.rki.coronawarnapp.contactdiary.ui.onboarding.ContactDiaryOnboardingFragmentViewModel +import io.mockk.MockKAnnotations +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.SystemUIDemoModeRule +import testhelpers.launchFragment2 +import tools.fastlane.screengrab.locale.LocaleTestRule + +@RunWith(AndroidJUnit4::class) +class ContactDiaryOnboardingFragmentTest : BaseUITest() { + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val systemUIDemoModeRule = SystemUIDemoModeRule() + + @Before + fun setup() { + MockKAnnotations.init(this, relaxed = true) + + setupMockViewModel( + object : ContactDiaryOnboardingFragmentViewModel.Factory { + override fun create(): ContactDiaryOnboardingFragmentViewModel = + ContactDiaryOnboardingFragmentViewModel() + } + ) + } + + @After + fun teardown() { + clearAllViewModels() + } + + @Test + fun launch_fragment() { + launchFragment2<ContactDiaryOnboardingFragment>() + } +} + +@Module +abstract class ContactDiaryOnboardingFragmentTestModule { + @ContributesAndroidInjector + abstract fun contactDiaryOnboardingFragment(): ContactDiaryOnboardingFragment +} diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt index d8f858652..24abcde42 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt @@ -1,6 +1,7 @@ package testhelpers import dagger.Module +import de.rki.coronawarnapp.ui.contactdiary.ContactDiaryOnboardingFragmentTestModule import de.rki.coronawarnapp.ui.main.home.HomeFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingDeltaInteroperabilityFragmentTestModule import de.rki.coronawarnapp.ui.onboarding.OnboardingFragmentTestModule @@ -33,7 +34,9 @@ import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule SubmissionTestResultConsentGivenTestModule::class, SubmissionSymptomIntroFragmentTestModule::class, SubmissionContactTestModule::class, - SubmissionQRScanFragmentModule::class + SubmissionQRScanFragmentModule::class, + // Contact Diary + ContactDiaryOnboardingFragmentTestModule::class ] ) class FragmentTestModuleRegistrar diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/TestAndroidModule.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/TestAndroidModule.kt new file mode 100644 index 000000000..81093b7a7 --- /dev/null +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/TestAndroidModule.kt @@ -0,0 +1,16 @@ +package testhelpers + +import android.content.Context +import androidx.test.platform.app.InstrumentationRegistry +import dagger.Module +import dagger.Provides +import de.rki.coronawarnapp.util.di.AppContext +import javax.inject.Singleton + +@Module +class TestAndroidModule { + @Provides + @Singleton + @AppContext + fun context(): Context = InstrumentationRegistry.getInstrumentation().targetContext +} diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/TestAppComponent.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/TestAppComponent.kt index 53c3c747c..adc3a10ac 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/TestAppComponent.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/TestAppComponent.kt @@ -11,7 +11,8 @@ import javax.inject.Singleton modules = [ AndroidSupportInjectionModule::class, MockViewModelModule::class, - FragmentTestModuleRegistrar::class + FragmentTestModuleRegistrar::class, + TestAndroidModule::class ] ) @Singleton diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt index 601202d13..4ed236e74 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/TestExtensions.kt @@ -22,3 +22,14 @@ inline fun <reified F : Fragment> launchFragmentInContainer2( @StyleRes themeResId: Int = R.style.AppTheme, factory: FragmentFactory? = null ) = FragmentScenario.launchInContainer(F::class.java, fragmentArgs, themeResId, factory) + +/** + * Launches Fragment in Activity. + * Same as [androidx.fragment.app.testing.launchFragment] except that it defaults + * the theme to [R.style.AppTheme]. + */ +inline fun <reified F : Fragment> launchFragment2( + fragmentArgs: Bundle? = null, + @StyleRes themeResId: Int = R.style.AppTheme, + factory: FragmentFactory? = null +) = FragmentScenario.launch(F::class.java, fragmentArgs, themeResId, factory) -- GitLab