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